Автор Тема: Время доставки  (Прочитано 9885 раз)

07 Октябрь 2014, 14:53:53
Ответ #15
  • Ветеран
  • *****
  • Сообщений: 16667
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Действительно, мы легких путей не искали.
Читали - Prestashop FAQ - как добавить новое поле к товару ?
1. Добавить новое поле в таблицу.
2. Добавить новое поле в класс.
3. Добавить проверку и сохранение нового поля в контроллер.
4. Добавить новое поле в шаблон.
5. Добавить новое поле в тему админки.
Tools.php, Validate.php - лучше не трогать.
08 Октябрь 2014, 11:57:58
Ответ #16
  • Новичок
  • *
  • Сообщений: 41
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Действительно, мы легких путей не искали.
Читали - 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?
08 Октябрь 2014, 13:53:32
Ответ #17
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Цитировать
чем простое $a= отличается от $_POST['a']=
Это не одно и то-же.
"$a" - объявление переменной.
"$a = ..." - инициализация переменной / присвоение значения.
"$_POST" - ассоциативный массив данных, переданных скрипту через HTTP методом POST.

Т.е. если вы хотите получить данные из формы, переданные пользователем с вашего сайта, то используете "$_POST['имя / ключ поля']".
После получения и проверки, можете присвоить значение переменной для использования внутри функции
$a = $_POST['имя / ключ поля']
09 Октябрь 2014, 14:22:05
Ответ #18
  • Новичок
  • *
  • Сообщений: 41
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
чем простое $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('Неправильно указано время доставки'));
09 Октябрь 2014, 14:26:54
Ответ #19
  • Новичок
  • *
  • Сообщений: 41
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Ой, ну, конечно же так:
if ($_POST['hours'] [b]>[/b] $_POST['dhours'])
die(Tools::displayError('Неправильно указано время доставки'));
09 Октябрь 2014, 14:58:01
Ответ #20
  • Новичок
  • *
  • Сообщений: 41
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Всё, спасибо, разобрался, в контроллер в функцию protected function processSubmitAddress() в удобное место, где идут проверки в начале:
if ($_POST['hours'] > $_POST['dhours'])
{
$this->errors[] = Tools::displayError('Неправильно указано время доставки');
return;
}

Друзья, спасибо ВАМ всем за помощь!   ;)
07 Май 2023, 13:58:27
Ответ #21
  • Новичок
  • *
  • Сообщений: 1
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
На дворе 2023 год, а тема все еще актуальна, я абсолютный новичок в Presta, как и в программировании в целом. Есть ли готовые модули или плагины для версии 1.7, возможно кто-то решал вопрос настройки даты и времени доставки в форме оформления заказа?