Jump to content

Дополнительная вкладка Каталог-Товары-Вкладка


Recommended Posts

Доброго времени суток!

 

Помогите пожалуйста реализовать вот это - на престе 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

  • 1 month later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...