Время доставки

Автор markopolo, 19 октября 2012, 00:16:58

« назад - далее »

Adik

#15
Действительно, мы легких путей не искали.
Читали - Prestashop FAQ - как добавить новое поле к товару ?
1. Добавить новое поле в таблицу.
2. Добавить новое поле в класс.
3. Добавить проверку и сохранение нового поля в контроллер.
4. Добавить новое поле в шаблон.
5. Добавить новое поле в тему админки.
Tools.php, Validate.php - лучше не трогать.

LiTiNuM

Цитата: Adik от 07 октября 2014, 14:53:53
Действительно, мы легких путей не искали.
Читали - Prestashop FAQ - как добавить новое поле к товару ?
1. Добавить новое поле в таблицу.
2. Добавить новое поле в класс.
3. Добавить проверку и сохранение нового поля в контроллер.
4. Добавить новое поле в шаблон.
5. Добавить новое поле в тему админки.
Tools.php, Validate.php - лучше не трогать.

Спасибо тебе огромное, добрый человек! Вот это очень полезная информация...))

В общем, расставил всё по своим местам, запись в БД при Сохранении прошла.

Но вот при повторном сохранении - ошибка Chroma:
Property Address->city is empty
at line 846 in file classes/ObjectModel.php
Ругается на jquery, следовательно, order-opc.js где-то пробивает... буду смотреть по передаваемым параметрам.

В OrderOpcController.php для "case 'editCustomer':" записал следующее:

if(isset($this->context->customer->hours) && $this->context->customer->hours)
$hours = $this->context->customer->hours;
else
$hours = '';

if(isset($this->context->customer->hours2) && $this->context->customer->hours2)
$hours2 = $this->context->customer->hours2;
else
$hours2 = '';


Можете подсказать, а чем простое $a= отличается от $_POST['a']= ???
Знаю, что Insert - это именно POST. Простое приравнивание переменной к значению - это и INSERT и UPDATE?

coder

Цитироватьчем простое $a= отличается от $_POST['a']=
Это не одно и то-же.
"$a" - объявление переменной.
"$a = ..." - инициализация переменной / присвоение значения.
"$_POST" - ассоциативный массив данных, переданных скрипту через HTTP методом POST.

Т.е. если вы хотите получить данные из формы, переданные пользователем с вашего сайта, то используете "$_POST['имя / ключ поля']".
После получения и проверки, можете присвоить значение переменной для использования внутри функции
$a = $_POST['имя / ключ поля']

LiTiNuM

Цитата: coder от 08 октября 2014, 13:53:32
Цитироватьчем простое $a= отличается от $_POST['a']=
Это не одно и то-же.
"$a" - объявление переменной.
"$a = ..." - инициализация переменной / присвоение значения.
"$_POST" - ассоциативный массив данных, переданных скрипту через HTTP методом POST.

Т.е. если вы хотите получить данные из формы, переданные пользователем с вашего сайта, то используете "$_POST['имя / ключ поля']".
После получения и проверки, можете присвоить значение переменной для использования внутри функции
$a = $_POST['имя / ключ поля']

Спасибо за разъяснения!

В своей задаче, как я выяснил методом тыка, у меня всё делает java-script ORDER-OPC.js

В общем, я переделал регистрацию гостевую:
1. Для CUSTOMER обязательное поле только ИМЯ
2. В адресе обязательные:
- State, т.к. в зависимости от него автоматом рассчитывается стоимость доставки через Почту России
- Address1
- Phone
Остальные поля спрятаны через JS с использованием .hide(). При этом через JS присваиваю рандомный email, город (пока 'Гость', но планирую из Региона тащить город и в это поле подставлять).
Также, вместо address2 - сделал перечень станций метро через select - выбираем из списка.

И, главное, из-за чего весь сыр бор - добавил два новых поля для выбора времени доставки.
Все ошибки поправил, в базу всё пишется. Даже не пришлось ни в одном контроллере прописывать действия, типа: $hours = $_POST['hours'];
БД никак не реагирует на это. Т.к. js идёт в обход через AddressController.php, насколько я понял.

Теперь вопрос, мне нужно получать ошибку "Неверно введено время доставки", если значение поля (hours < dhours).
Я вот не знаю, куда это писать, в AddressController.php или Order-Opc.js?
Предполагаю, что в контроллер сразу после этого:

// Save address
if ($result = $address->save())
{

и что-то вроде этого:
if ($_POST['hours']<$_POST['dhours'])
die(Tools::displayError('Неправильно указано время доставки'));

LiTiNuM

Ой, ну, конечно же так:

if ($_POST['hours'] [b]>[/b] $_POST['dhours'])
die(Tools::displayError('Неправильно указано время доставки'));

LiTiNuM

Всё, спасибо, разобрался, в контроллер в функцию protected function processSubmitAddress() в удобное место, где идут проверки в начале:

if ($_POST['hours'] > $_POST['dhours'])
{
$this->errors[] = Tools::displayError('Неправильно указано время доставки');
return;
}


Друзья, спасибо ВАМ всем за помощь!   ;)

Bombshell

На дворе 2023 год, а тема все еще актуальна, я абсолютный новичок в Presta, как и в программировании в целом. Есть ли готовые модули или плагины для версии 1.7, возможно кто-то решал вопрос настройки даты и времени доставки в форме оформления заказа?