Помогите пожалуйста реализовать вот этот - на престе 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 . '&tabtoken=' . ($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);


После всех проделанных действий у нас должна появится дополнительная вкладка с полем для ввода данных которые мы будем хранить в базе данных.


Сообщение отредактировано boris024 05-12-2013 00:20 ...