Я пытаюсь добавить настраиваемое поле в группы клиентов в Prestashop 1.6, редактируемые из области администрирования. Я пробовал различные решения, но подход, который работал лучше всего, описан в этом руководстве: http://nemops.com/extending-prestashop-objects/. Я сделал то же самое, прежде чем читать, но, похоже, этот парень заработал так.Добавить новое поле в группу клиентов в Prestashop
Что я сделал, в основном, добавить новый столбец в таблице ps_group
, что делает его не нулевым (новое поле является обязательным для всех групп).
Затем в файле classes/Group.php
Я отредактировал массив $definition
. (Я знаю, что я не должен редактировать ядро. Я выберу все это, как только проверю, работает).
public static $definition = array(
'table' => 'group',
'primary' => 'id_group',
'multilang' => true,
'fields' => array(
'reduction' => array('type' => self::TYPE_FLOAT, 'validate' => 'isFloat'),
'price_display_method' => array('type' => self::TYPE_INT, 'validate' => 'isPriceDisplayMethod', 'required' => true),
'show_prices' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
'provinces' => array('type' => self::TYPE_STRING, 'required' => true, 'size' => 200),
// Lang fields
'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 32),
),
);
ключ - мое дополнение.
Затем я отредактировал файл controllers/admin/AdminGroupsController.php
, чтобы добавить новое поле в область администратора, чтобы оно было доступно для редактирования. В методе renderForm()
я добавил новый дочерний элемент 'input'
массива $this->fields_form
. Моя модификация заключается в следующем:
array(
'type' => 'select',
'label' => $this->l('Provinces'),
'name' => 'provinces',
'required' => 'true',
'col' => 3,
'hint' => $this->l('The provinces belonging to this customer group.'),
'options' => array(
'query' => array(
array(
'id_method' => '1',
'name' => 'Option 1'
),
array(
'id_method' => '2',
'name' => 'Option 2'
)
),
'id' => 'id_method',
'name' => 'name'
)
),
Я понимаю, что называть одинаково столбец базы данных и поле будет вызывать значение в этом поле, чтобы спастись, так же, как остальные поля. Но этого не происходит. Когда я отредактировать группу, внести некоторые изменения и сохранить его, следующее сообщение об ошибке появляется в верхней части окна, рядом с восклицательным знаком:
Property Group->provinces is empty
Форма POST, тем не менее, отправляется правильно, и мои данные прошел просто отлично, как и остальные поля.
Есть ли что-то, что мне не хватает здесь? Я думаю, что это все необходимые шаги для добавления нового поля в любого объекта (кроме продуктов, которые работают по-разному).
Является ли мой код неправильным в какой-то момент? Или, как я могу добавить новое поле в группы клиентов?
Большое спасибо :)
Добавление собственности решила проблему, спасибо. Поле должно быть строкой, так как в этом поле я сохраню кучу данных. Опубликованный код был упрощенным примером конечного результата. Благодарим также за инструкции по переопределению поведения ядра! – Berna