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