Доброго времени суток! Дополнительные поля уже добавлены вручную в БД, модель и админку и в шаблоны темы, но при обновлении все слетает. Можно ли добавить поле в Товары (Категории) с помощью override (или выводить их из отдельного модуля, например) так, чтобы при обновлении не приходилось каждый раз лопатить все по новой? Подскажите, пожалуйста, куда копать? Может, у кого-то уже есть готовое решение..
Спасибо. Покопался в Гугле и нарыл: Для начала, в Админке->Расширенные параметры->Производительность Включил принудительную перекомпиляцию шаблонов и отключил кеширование. Затем 3 шага; 1. В базе данных в таблице ps_category_lang создал поле name_long VARCHAR 2. Создал файл \override\classes\Category.php со следующим содержимым: Код: class Category extends CategoryCore { /** @var string Name_long */ public $name_long;// Объявляем новое свойство класса public function __construct($id_category = null, $id_lang = null, $id_shop = null) { // Добавляем определение этого поля в модель (класс) Category по аналогии - см. метод __construct класса CategoryCore self::$definition['fields']['name_long'] = array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => true, 'size' => 128); parent::__construct($id_category, $id_lang, $id_shop); } } 3. Создал файл \override\controllers\admin\AdminCategoriesController.php Здесь есть два способа: 1. Полностью переопределить метод public function renderForm() (скопировать его ПОЛНОСТЬЮ из AdminCategoriesControllerCore с добавлением информации о новом поле) В конце этого метода строку "return parent::renderForm();" следует заменить на "return AdminController::renderForm();" 2. Воспользоваться встроенным в контролер AdminController свойством $fields_form_override Недостаток второго способа заключается в том, что добавляемое поле появляется в самом низу страницы, после всех стандартных полей. В первом же способе новое поле можно разместить произвольно. Я выбрал второй способ - решил воспользовать встроенным механизмом + гораздо меньше кода: Код: class AdminCategoriesController extends AdminCategoriesControllerCore { public function renderForm() { $this->fields_form_override =array( array( 'type' => 'text', 'label' => $this->l('Name_long'), 'name' => 'name_long', 'lang' => true, 'required' => true, 'class' => 'copy2friendlyUrl', 'hint' => $this->l('Invalid characters:').' <>;=#{}', ), ); return parent::renderForm(); } } В завершение, в Админке->Расширенные параметры->Производительность Отключил принудительную перекомпиляцию шаблонов и отключил кеширование. Все работает. Источник http://stackoverflow.com/a/35421104.
Подскажите, пожалуйста, есть у кого готовый рецепт по добавлению поля к Товарам с override, чтобы не слетало при обновлении. Насколько я понимаю, там нужно вносить изменения в том числе в тему админки. А шаблоны админки, вроде, оверрайдить нельзя. Кто что знает по этому поводу?
Всё тоже самое как и категориями, только с моделью Product и Product контроллерами. оверрайды для шаблонов админки также можно делать, к примеру для первой вкладки редактирования товара, шаблон оверрайда будет лежать здесь: \override\controllers\admin\templates\products\informations.tpl
Спасибо огромное! Очень помогла эта информация. --- Добавлено, 4 мар 2016 --- Добавить дополнительное поле в Товар - готовый рецепт. Что я сделал: 1. В Админке->Расширенные параметры->Производительность Включил принудительную перекомпиляцию шаблонов и отключил кеширование. 2. В базе данных в таблице ps_product_lang создал поле name_long VARCHAR 3. Создал файл \override\classes\Product.php со следующим содержимым: Код: class Product extends ProductCore { /** @var string Long Name */ public $name_long; public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null) { self::$definition['fields']['name_long'] = array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => true, 'size' => 128); parent::__construct($id_product, $full, $id_lang, $id_shop, $context); } } 4. Скопировал файл шаблона \adminbackend(папка с админкой)\themes\default\template\controllers\products\informations.tpl в папку \override\controllers\admin\templates\products\ В этом informations.tpl после кода: Код: <div id="product-pack-container" {if $product_type != Product::PTYPE_PACK}style="display:none"{/if}></div> <hr /> вставил: Код: <div class="form-group"> <div class="col-lg-1"><span class="pull-right">{include file="controllers/products/multishop/checkbox.tpl" field="name_long" type="default" multilang="true"}</span></div> <label class="control-label col-lg-2 required" for="name_long_{$id_lang}"> <span class="label-tooltip" data-toggle="tooltip" title="{l s='The public long name for this product.'} {l s='Invalid characters:'} <>;=#{}"> {l s='Long Name'} </span> </label> <div class="col-lg-5"> {include file="controllers/products/input_text_lang.tpl" languages=$languages input_class="{$class_input_ajax} updateCurrentText" input_value=$product->name_long input_name="name_long" required=true } </div> </div> Код, приведенный выше, взят из этого же шаблона. Он генерирует input name. Соответсвенно, name был изменен на нужное мне имя поля name_long. Если необходимо добавить textarea с html-редактором, нужно за исходник брать код, генерирующий description. Ну, собственно, и все. Протестировал. Появились дополнительные поля ввода в карте товара, данные добавляются, сохраняются и редактируются. После изменений в шаблоне темы frontend-а, содержимое поля выводится в карте товара. Да, не забываем в Админке->Расширенные параметры->Производительность включить принудительную перекомпиляцию шаблонов и включить кеширование.
Да, не забываем в Админке->Расширенные параметры->Производительность выключить принудительную перекомпиляцию шаблонов и включить кеширование --- Добавлено, 4 мар 2016 --- Еще вопрос к знатокам: На многий сайтах и форумах в рецепте добавления Поля к Товару, советуют также добавлять определенный код и в AdminProductsController - в несколько методов, везде по разному.. У меня же все работает после внесения изменений в класс-модель Product и в шаблон админки. Prestashop 1.6.1.4. Собственно, вопрос: Нужно ли что-либо еще менять или переопределять и в AdminProductsController? Возможно, какие-либо модули, или что-то другое нуждается в таких изменениях..
Данный гайд подойдет для prestoshop 1.7.3? и еще я так понял это только реализация для админки, то есть записывает данные в базу и все а как выводить в нужных местах на сайте?