добавить поле на страницу редактирования продукта в администраторе prestashop

Я добавил поле «mystock» в таблицу продуктов базы данных prestashop. Теперь я хочу отобразить/отредактировать это поле на странице редактирования продукта. Это также будет обновление, когда продукт будет обновляться.


person user1493023    schedule 18.03.2013    source источник


Ответы (5)


Этот процесс требует некоторой работы по шагам. Ниже я их перечислил.

1) Откройте классы/Product.php. Поместите public $mystock в список свойств класса, который вы увидите после запуска класса.

2) Внизу файла найдите public static $definition = array( , это будет длинный массив. Найдите в нем 'fields' => array(, а там вы увидите все поля базы данных, размещенные с проверкой, типами данных и т. д. Поместите свой mystock в этот массив в качестве другого элемента и поместите правильные проверки и типы данных, как для других полей.

3) Теперь откройте adminFolder/themes/default/template/controllers/products/informations.tpl и поместите свое поле с правильным именем и идентификатором в соответствующее место. Обратите внимание, что имя поля/идентификатор должны совпадать с именем поля базы данных и тем, которое мы добавили в классе Products.php.

Вот и все, надеюсь, вы понимаете процесс и заставите его работать.

Спасибо

person Altaf Hussain    schedule 19.03.2013
comment
Привет, altafhussain, спасибо за ответ, и это полезно для меня, теперь я столкнулся с новой проблемой. когда я перехожу к редактированию продукта, это дает мне ошибку. Этот URL-адрес для поля требуется по крайней мере на английском (английском) и не показывает кнопку сохранения, помогите мне - person user1493023; 19.03.2013
comment
Я хочу сказать вам, что я добавляю продукты в таблицу напрямую - person user1493023; 19.03.2013
comment
Перезапись ссылки или любые другие обязательные поля необходимы только для языка сайта по умолчанию. Я думаю, что вы добавили продукты, но не добавили информацию о продукте, например, переписали ссылку в таблице product_lang, или если вы их добавили, то вы не добавили их для языка по умолчанию, такого как английский. Проверьте это, пожалуйста - person Altaf Hussain; 20.03.2013

у меня это работает на prestashop 1.5.4

добавьте файл Product.php в \override\classes, содержащий:

    <?php
    Product::$definition['fields']['mystock'] = array('type' => ObjectModel::TYPE_INT, 'validate' => 'isUnsignedInt');
    class Product extends ProductCore 
    { 
       public $mystock; 
    } 

... предположим, вам нужно поле для ввода числа.

затем 3) ответа альтафхуссейна

не забудьте добавить свое поле в БД, для числового поля:
ALTER TABLE ps_product ADD mystock INT NOT NULL;

person Bell418    schedule 27.05.2013
comment
этот ответ лучше, у вас больше шансов, что обновление prestashop не нарушит вашу функциональность - person tXK; 21.07.2013
comment
ЭТО НЕ РАБОТАЕТ, если оно находится в классах переопределения модуля! Я провел расследование для этого, и это определенно неправильно :( ps v1.5.6.1 - person Smash; 18.01.2014

Я наткнулся на эту статью и построил свой компонент на ее основе, и это кажется самым чистым решением: http://nemops.com/prestashop-products-new-tabs-fields/ в основном описывает, как сделать модуль, который добавляет многоязычное поле в пользовательскую панель на странице редактирования товара..

НЕ нужно редактировать шаблоны, основные файлы или добавлять файлы переопределения.

person YangombiUmpakati    schedule 22.10.2013

Спасибо, Альтафхуссейн. Вы должны добавить свое поле в таблицы «products_shop» и «products».

ALTER TABLE ps_product_shop ADD `mystock` int NOT NULL DEFAULT 0;
ALTER TABLE ps_product ADD `mystock` int NOT NULL DEFAULT 0;

Я использую пс 1.6.0.6

person user1624951    schedule 10.09.2015

Лучшее комплексное решение в четыре этапа:

1) добавьте файл Product.php в \override\classes, содержащий:

<?php
Product::$definition['fields']['mystock'] = array('type' => ObjectModel::TYPE_INT, 'validate' => 'isUnsignedInt');
class Product extends ProductCore 
{ 
   public $mystock; 
} 

2) откройте adminFolder/themes/default/template/controllers/products/informations.tpl и поместите свое поле с правильным именем и идентификатором в соответствующее место.

3) удалить файл cache/class_index.php

4) добавьте свое поле в БД, для числового поля:

ALTER TABLE ps_product ADD mystock INT NOT NULL;

[Спасибо Bell418 за 1) и 4) и Альтафу Хуссейну за 2)]

person Onireon    schedule 07.04.2016