В стандартной сборке 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)
;

Теперь можно посмотреть на результат проделанной работы.

Скачать исходные материалы