boris024 Posted December 5, 2013 Share Posted December 5, 2013 Доброго времени суток! Помогите пожалуйста реализовать вот это - на престе 1.5 я элементарно файл не могу найти adminproducts.php Заранее спасибо. И так появилась следующая задача в одном из интернет магазинов на PrestaShop, в карточке товара выводить такой параметр как ссылка на сторонний ресурс, что то вроде сервиса который тестирует интернет магазины. Данная ссылка индивидуальна для каждого товара, и также ее может не быть вообще. Конечно есть много способов реализовать задуманное, но мы не ищем легких путей да и подобный подход в дальнейшем может использоваться и в других корыстных целях господа.Что бы воплотить в жизнь столь грандиозный план, нам необходимо на странице товара (речь идет о админке PrestaShop), добавить к уже существующим вкладкам свою. Назовем ее к примеру “Тест Великан”.Для этого идем в your_admin_dirtabsAdminProducts.php и после <div class="tab-page" id="step7"><h4 class="tab">7.'.$this->l('Attachments').' ('.$countAttachments.')</h4></div> Добавляем <div class="tab-page" id="step8"><h4 class="tab">8. '.$this->l('Тест Великан').'</h4></div>'; ну и сразу не отходя черканемс после toload[7] = true; наш toload[8] = true; Далее создаем функцию которая будет отображать содержимое нашей вкладки, назовем ее displayFormTestvelikan function displayFormTestvelikan($obj, $languages, $defaultLanguage) { parent::displayform(); $defaultIso = Language::getIsoById($defaultLanguage); //тут будем кодить нашу формочку echo 'Test Velikan-->GO'; } Так случилось что при первой активации вкладок в PrestaShop, подгрузка ее содержимого осущетсвляется ajax. Для того что б скрипт знал какое содержимое выводить в нашей вкладе, идем в your_admin_dirajax.php ищем там условие if ($step = (int)(Tools::getValue('ajaxProductTab'))) и в массив $switchArray добавим новый элемент 8 => 'displayFormTestvelikan' Тут displayFormTestvelikan – имя нашей функции из your_admin_dirtabsAdminProducts.php, а 8 – ID вкладки, после чего у нас уже должен работать вывод содержимого вкладки.по сути нам необходимо создать всего одно поле для ввода ссылки на отчет о контрольной закупке товара, вот как это мы сделаем function displayFormTestvelikan($obj, $languages, $defaultLanguage) { parent::displayform(); $defaultIso = Language::getIsoById($defaultLanguage); echo ' <table cellpadding="5"> <tr> <td colspan="2"><b>' . $this->l('Независимая служба проверки интернет-магазинов') . '</b></td> </tr> </table> <hr style="width:100%;" /><br /> <table cellpadding="5" style="width:100%"> <tr> <td style="width:250px;text-align:right;padding-right:10px;font-weight:bold;vertical-align:top;" valign="top">' . $this->l('Отчет о контрольной закупке:') . '</td> <td style="padding-bottom:5px;"> <input type="text" name="reliable" id="reliable" size="50" value="' . (($this->getFieldValue($obj, 'reliable')) ? ($this->getFieldValue($obj, 'reliable')) : '0') . '" /> <p>' . $this->l('Адрес страницы с опубликованным отчетом о контрольной закупке') . '</p> </td> </tr> <tr> <td colspan="2" style="text-align:center;"> <input type="submit" name="submitReliable" value="' . $this->l('Сохранить') . '" class="button" onclick="this.form.action += '&addproduct&tabs=8';" /> </td> </tr>'; echo '</table>'; } Что ж форма это хорошо, но теперь надо реализовать обрабтку нашего поля при сабмите формы товара, дял этого ищем в your_admin_dirtabsAdminProducts.php строку elseif (Tools::isSubmit('submitCustomizationConfiguration')) { и перед ней влезим со своим корытом ) elseif (Tools::isSubmit('submitReliable')){ if(Validate::isLoadedObject($product = new Product((int)(Tools::getValue('id_product'))))) { $product->reliable = $_POST['reliable']; if (!sizeof($this->_errors) AND !$product->update()) $this->_errors[] = Tools::displayError('An error occurred while updating'); if (!sizeof($this->_errors)) Tools::redirectAdmin($currentIndex . '&id_product=' . $product->id . '&id_category=' . (!empty($_REQUEST['id_category']) ? $_REQUEST['id_category'] : '1') . '&add' . $this->table . '&tabs=8&token=' . ($token ? $token : $this->token)); } else { $this->_errors[] = Tools::displayError('Product must be created.'); } } Теперь надо подумать над тем где же мы будем хранить наш адресок. А хранить мы его будем конечно в базе данных, и совершенно верно в таблице основных параметров товара (продукта) ps_product.Необходимо добавить новое поле в таблицу ps_product назовем поле reliable varchar(255)Дальше поработаем над моделью, для этого открываем файл classesProduct.php. Даем понять что у нас новенькое поле reliable.Добавим /** @var string Product reliable */ public $reliable; потом в protected $fieldsValidate = array 'reliable' => 'isString', и конечно в public function getFields() { добавим $fields['reliable'] = pSQL($this->reliable); После всех проделанных действий у нас должна появится дополнительная вкладка с полем для ввода данных которые мы будем хранить в базе данных. Link to comment Share on other sites More sharing options...
AlmazKab Posted January 20, 2014 Share Posted January 20, 2014 А на Престе 1.4 как реализовать такую же фишку? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now