В стандартной сборке Prestashop у пользователя отсутствует поле «Телефон», что не может оцениваться положительно, ведь в некоторых случаях оно просто необходимо. В данной статье мы расскажем, как добавить это поле к основной информации, не затронув ядро PrestaShop.
Для начала предопределим нужные нам классы и контролёры с помощью возможности такой PrestaShop, как Ovveriding. Это позволит сохранять внесённые изменения при обновлениях движка.
Далее добавляем в базу данных к таблице «ps_customer» новое поле - «phone».
Новое поле phone в таблице ps_customer
После данного добавления следует предопределить поведение класса Customer, а именно свойства $definition, отвечающего за правило валидации и определения в объектную модель. Для этого перейдём в папку /override/classes/ и создадим файл Customer.php. В нём, как написано в документации, расширим основной класс CustomerCore.
class Customer extends CustomerCore
Последней строкой добавим в массив со всеми необходимыми параметрами поле «phone», а также публичное свойство класса.
'phone' => array('type' => self::TYPE_STRING, 'validate' => 'isPhoneNumber','required' => false, 'size' => 32),
public $phone;
Теперь поле «phone» осталось вывести только в личном кабинете. Это можно сделать с помощью класса CustomerFormatter.php. В папке /override/classes/form/ создадим на него переопределение
class CustomerFormatter extends CustomerFormatterCore
И добавим вывод поля
$format['phone'] = (new FormField)
->setName('phone')
->setType('text')
->setLabel(
$this->translator->trans(
'Phone', [], 'Shop.Forms.Labels'
)
)
->setRequired(false)
;
Теперь можно посмотреть на результат проделанной работы.