Проще добавить поле. Не нужно переделывать и можно и обновлять prestashop не боясь потерять данные.
Текстовое? Там уже есть поле для комментариев, проще в него ручками писать. Но мы не ищем лёгких путей. Я дату рождения трогать не стал, пришёл к тому, что проще добавить два select'a на форму и писать их в новое поле в БД.
В общем, там много, на самом деле мест, где вносятся обновления. Направьте меня, пожалуйста, если ошибаюсь:
1. Добавил в БД новое поле (ps_customer) - dtime, type=timestamp.
2. Tools.php, добавил генерацию часов на примере $DAYS, (от 10 до 22), появились две переменные: $hours и $hours2. В шаблоне OPC получаю их, есть возможность выбора через <select>.
3. Customer.php: шёл от примера birthday, копировал строку и переделывал под dtime. Вот пример (и для add и для update функций):
public function add($autodate = true, $null_values = true) {
***
$this->birthday = (empty($this->years) ? $this->birthday : (int)$this->years.'-'.(int)$this->months.'-'.(int)$this->days);
$this->dtime = ($this->dtime ? $this->dtime : (int)$this->hours.'-'.(int)$this->hours2);
4. Validate.php... ну, в общем, сделал следующее (первый раз делаю проверку, если что... и да-да, понимаю, что можно короче записать, потом пооптимизирую):
public static function isDTime($dtime) {
if (empty($date) || $date == '00-00')
return true;
if (preg_match('/^(([1][0])-(([1][0-9])|([2][0-2]))|([1][1])-(([1][1-9])|([2][0-2]))|([1][2])-(([1][2-9])|([2][0-2]))|([1][3])-(([1][3-9])|([2][0-2]))|([1][4])-(([1][4-9])|([2][0-2]))|([1][5])-(([1][5-9])|([2][0-2]))|([1][6])-(([1][6-9])|([2][0-2]))|([1][7])-(([1][7-9])|([2][0-2]))|([1][8])-(([1][8-9])|([2][0-2]))|([1][9])-(([1][9])|([2][0-2]))|([2][0])-([2][0-2])|([2][1])-([2][1-2])|([2][2])-([2][2]))?$/', $dtime))
return preg_match('/^([1-2][0-9])-([1-2][0-9])?$/', $dtime);
}
5. Вот тут начинаются танцы с бубнами! Контроллеры... О них никто не писал, но их много...
- AuthController.php - добавление в БД через POST... написал такое:
$customer->dtime = (empty($_POST['hours']) ? '' : (int)$_POST['hours'].'-'.(int)$_POST['hours2']);
- OrderOpcController.php, добавил условие + внёс в array переменные sl_hour и sl_hour2:
if ($customer->dtime)
$dtime = explode('-', $customer->dtime);
else
$dtime = array('0', '0');
***
'sl_hour' => $dtime[0],
'sl_hour2' => $dtime[1],
***
- IdentityController.php, залез в postProcess:
if (Tools::getValue('hours') != '' && Tools::getValue('hours2') != '')
$this->customer->dtime = (int)(Tools::getValue('hours')).'-'.(int)(Tools::getValue('hours2'));
elseif (Tools::getValue('hours') == '' && Tools::getValue('hours2') == '')
$this->customer->dtime = null;
В initContent я тоже залез. В общем, где был birthday - везде добавлял dtime.
На текущий момент при выборе времени доставки, к примеру, с 13 до 10 - выдаёт сообщение: dtime неверный.
Если время правильное - то CHROME - Technical Error, не может сохранить adresses (Гостевая покупка, завожу пользователя и адрес, выбираю время доставки и жму СОХРАНИТЬ).
Вопрос: что-то лишнее или где-то ещё нужно добавлять?