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

19 Октябрь 2012, 00:16:58
  • Новичок
  • *
  • Сообщений: 9
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Уважаемые знатоки, а есть ли какое то решение для того что-бы покупатель при выборе доставки курьером мог сразу выбрать день доставки и время?

Единственное что нашел модуль Date of delivery, но он задает лишь сообщает клиенту примерную дату доставки. Не хочется звонить каждому клиенту и  договариваться о времени.

Спасибо.
19 Октябрь 2012, 01:00:12
Ответ #1
  • Фрилансер
  • *
  • Сообщений: 176
  • Репутация: +0/-0
    • Просмотр профиля
Есть модуль Date Picker (with hours) for Prestashop. Можно выбирать дату и время.
19 Октябрь 2012, 20:24:39
Ответ #2
  • Новичок
  • *
  • Сообщений: 9
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Да хорошая штука. только платная.
28 Ноябрь 2012, 12:08:28
Ответ #3
  • Новичок
  • *
  • Сообщений: 3
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
а где можно купить подскажите и сколько стоит?
28 Ноябрь 2012, 12:37:25
Ответ #4
  • Фрилансер
  • *
  • Сообщений: 176
  • Репутация: +0/-0
    • Просмотр профиля
а где можно купить подскажите и сколько стоит?
Если нужен, пиши в личку.
28 Ноябрь 2012, 13:02:15
Ответ #5
  • Новичок
  • *
  • Сообщений: 3
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
написал в личку
28 Ноябрь 2012, 13:04:08
Ответ #6
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Есть модуль Date Picker (with hours) for Prestashop. Можно выбирать дату и время.
Только для версии 1.4
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
28 Ноябрь 2012, 13:37:23
Ответ #7
  • Новичок
  • *
  • Сообщений: 3
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Есть модуль Date Picker (with hours) for Prestashop. Можно выбирать дату и время.
Только для версии 1.4

у меня 1.4.4.0
27 Март 2013, 21:11:23
Ответ #8
  • Новичок
  • *
  • Сообщений: 1
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Ребята, поделитесь плиз
28 Март 2013, 11:21:57
Ответ #9
  • Ветеран
  • *****
  • Сообщений: 885
  • Репутация: +206/-0
    • Просмотр профиля
А для престашопа в1.5 есть?
06 Октябрь 2014, 12:20:50
Ответ #10
  • Новичок
  • *
  • Сообщений: 41
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Я тоже решения не нашёл, поэтому сам создаю обходной путь.

Есть поля под выбор даты рождения. Так вот, добавляем туда два поля под выбор часов, переименовываем название с "Дата рождения" на "Желаемая дата доставки" и записываем в БД Год-месяц-день часы-часы. Изменения должны быть минимальны. Изменить также формирование 'birthday' в Customer.php.

Теперь реализация, в форму добавил новый <select>:
<select id="months" name="months">
<option value="">-</option>
{foreach from=$hours item=hour}
<option value="{$hours|escape:'htmlall':'UTF-8'}" {if isset($guestInformations) && ($guestInformations.sl_hour == $hour)} selected="selected"{/if}>{$hour|escape:'htmlall':'UTF-8'}&nbsp;</option>
{/foreach}
</selec

В TOOLS.php добавил:
public static function dateHours()
{
$tab = array();
for ($i = 1; $i != 25; $i++)
$tab[] = $i;
return $tab;
}

В контроллер AuthController.php добавил:
if (isset($_POST['hours']) && is_numeric($_POST['hours']))
$selectedHours = (int)($_POST['hours']);
$hours = Tools::dateHours();
...
'hours' = $hours,
'sl_hour' => (isset($selectedHours) ? $selectedHours : 0)

Но в select'е пусто, не подтягиваются значения.

Подскажите, пожалуйста, где ещё вносятся изменения???
06 Октябрь 2014, 13:09:30
Ответ #11
  • Новичок
  • *
  • Сообщений: 41
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Нашёл: OrderOpcController.php

Теперь нужно это в правильном формате писать в БД. Там поле с типом DATE... поменяю на VARCHAR (64)... нужно SELECT'ы к базе переписывать, где возраст собирается...
06 Октябрь 2014, 13:32:36
Ответ #12
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Не только в бд тип поля изменить, еще и к классе Customer.php нужно поменять. а то проверку не пройдет.
'birthday' => array('type' => self::TYPE_DATE, 'validate' => 'isBirthDate'),
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
06 Октябрь 2014, 18:30:31
Ответ #13
  • Ветеран
  • *****
  • Сообщений: 16667
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Проще добавить поле. Не нужно переделывать и можно и обновлять prestashop не боясь потерять данные.
07 Октябрь 2014, 13:38:11
Ответ #14
  • Новичок
  • *
  • Сообщений: 41
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Проще добавить поле. Не нужно переделывать и можно и обновлять 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 (Гостевая покупка, завожу пользователя и адрес, выбираю время доставки и жму СОХРАНИТЬ).

Вопрос: что-то лишнее или где-то ещё нужно добавлять?