Решили вопрос с логикой реализации первого минуса.
Отображение дополнительных полей для вариантов доставки в зависимости от даты и времени суток.
Поля созданы в Filterit+Simple
Путь:/catalog/model/tool/
В файле simpleapicustom.php
Дописали код:
public function getAvailableDeliveryTimes($deliveryDateStr) {
$values = array();
date_default_timezone_set("Europe/Riga");
setlocale(LC_TIME, "ru_RU");
if (empty($deliveryDateStr)) {
$deliveryDate = new DateTime('now');
}
else
{
$deliveryDate = new DateTime($deliveryDateStr);
}
$currentDateTime = new DateTime('now');
$deliveryDate->setTime( 9, 0, 0 );
if ($deliveryDate->getTimestamp() - $currentDateTime->getTimestamp() > 0) {
array_push($values,array(
'id' => 'morning',
'text' => $this->language->get('text_delivery_morning') . ' ' . $this->language->get($deliveryDate->format('l')) . ' ' . $deliveryDate->format('d.m.Y')
));
}
$deliveryDate->setTime( 18, 0, 0 );
if ($deliveryDate->getTimestamp() - $currentDateTime->getTimestamp() > 0) {
array_push($values,array(
'id' => 'evening',
'text' => $this->language->get('text_delivery_evening') . ' ' . $this->language->get($deliveryDate->format('l')) . ' ' . $deliveryDate->format('d.m.Y')
));
}
return $values;
}
Где под себя подстроить можно date_default_set, setlocale, setTime, значение morning и evening (в моем случае это два временных слота на выбор).
setTime( H, m, s ) - это время во сколько данный слот уже не доступен в текущий день. Например, если доставка с 10 утра до 13 (например), и для обработки заказов Вам требуется час, то вписываем setTime( 9, 0, 0 ), чтобы слот не был доступен за час до начала периода доставки. Так же и со вторым слотом, у меня это evening.
Так же для достижения дружелюбности интерфейса каждому слоту добавляется текст, который можно прописать в локализации для каждого языка. Для первого варианта это text_delivery_morning, а для второго text_delivery_evening. В папке /catalog/language/ переходим в папку нужного языка и открываем файл php. Например: /ru-ru/ru-ru.php
Добавляем в раздел Text нужные значения.
$_['text_delivery_morning'] = 'Утренняя доставка —';
$_['text_delivery_evening'] = 'Вечерняя доставка —';
$_['Monday'] = 'Понедельник';
$_['Tuesday'] = 'Вторник';
$_['Wednesday'] = 'Среда';
$_['Thursday'] = 'Четверг';
$_['Friday'] = 'Пятница';
$_['Saturday'] = 'Суббота';
$_['Sunday'] = 'Воскресенье';
В коде есть добавка, чтобы после текстового значения еще прописывался день недели, ну чтобы клиенту было удобно воспринимать информацию. Это в части кода, где прописано $this->language->get($deliveryDate->format('l')) . ' ' . $deliveryDate->format('d.m.Y')
Скриншоты как это выглядит на практике: