Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Время и дата + вывод поля на странице Заказы


Azimrin

Recommended Posts

Приветствую! (Я тут впервые, если пишу не туда, просьба перенести в соответствующий раздел)

Пользуюсь обычной версией Opencart 3.0.3. Установил связку Simple и Filterit. Читал, пробовал и многие задачи решил с помощью этих модулей. А точнее создал варианты для метода доставки зависящие от "региона". Если кому интересно, могу подробно рассказать (актуально для собственной доставки).

Добавил НАБОРЫ ПОЛЕЙ У ВАРИАНТОВ ДОСТАВКИ
 

Spoiler

image.png.b5fff95d872e61bd95cd072305df9b43.png

Первое поле это Дата, с этим вроде как разобрался и всё работает.
Второе поле это время, но не конкретное, а временные диапазоны. Всё что я мог сделать это добавить поле Радиокнопки и прописать им значения в ручную.

Для отображения в Оформлении заказа этого достаточно. Но из этого вытекают два минуса.
Первый минус. Нужно, чтобы в текущем дне, за час до назначенного времени (в диапазоне) слот не был активен. // Требуется для избежания заказа, когда доставка уже выполняется.
Другими словами, если наступило уже 8 утра, то первый слот на этот день уже не может быть доступен. На данный момент слоты доступны всегда и в любой день.

Второй минус. На странице Заказы поля созданные в Simple отображаются во вкладке Дополнительно (если установить модификатор от Simple) и в Комментариях к заказу (без модификатора). Нужно, чтобы Дата и Время выводились отдельными полями в Информации о заказе, а так же в списке заказов с возможностью сортировать список по дате и\или по временным слотам.

Помогите разобраться и решить задачу. Спасибо.

Надіслати
Поділитися на інших сайтах


1 час назад, Azimrin сказал:

@deeman знаю, что это не касается техподдержки, но всё же прошу взглянуть. Буду рад любому совету, чтобы я смог самостоятельно сдвинуться с места.

Если сами не можете писать код, тогда вам раздел платных услуг.
Ваш вопрос не решить нажатием кнопки или советом..

Надіслати
Поділитися на інших сайтах

10 minutes ago, Seofisher said:

Если сами не можете писать код, тогда вам раздел платных услуг.
Ваш вопрос не решить нажатием кнопки или советом..

Если Вам нечего ответить по теме, то проходите мимо. 

2all, я не жду решения "нажатием кнопкой". Понимаю, что нужно править код order_list.twig, order_history.twig и прочие связанные с отображением полей на странице Заказы. Есть некоторое понимание, какая часть кода отвечает за вывод инфы от custom_field. Но нет понимания как код различает значения из Simple: filterit20 и filterit21. Я попросил помощи, потому что хочу сам разобраться, на мой взгляд форумы для того и существуют, чтобы люди делились опытом, а не для того, чтобы язвили и предлагали очевидные варианты типа "закажите платные услуги". Прошу не писать такие советы и не потому что нет денег купить модуль или заказать услугу. У некоторых возможно всё заплыло деньгами и от этого атрофировалось чувство чего-то добиваться и делать самостоятельно, но у меня пока эти пунктики присутствуют.
Никак не против платных услуг, но тут тема о другом.

Заранее благодарю всех кто откликнется.

Змінено користувачем Azimrin
Надіслати
Поділитися на інших сайтах


Решили вопрос с логикой реализации первого минуса.
Отображение дополнительных полей для вариантов доставки в зависимости от даты и времени суток.

Поля созданы в 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')

 

Скриншоты как это выглядит на практике:
 

Spoiler

image.png.638494108422f1b06c339a0790381b25.pngimage.png.c0889fb407d5c53ff8cd87fc21c4dccd.png 

 

  • +1 1
Надіслати
Поділитися на інших сайтах


Но возникла трудность с отображением даты. Дело в том, что в русской локализации формат даты DD.MM.YYYY, в английской DD/MM/YYYY, а в латышской DD.MM.YYYY. (с точкой в конце). Менял формат даты в файле локализации (/catalog/language/en-gb и /catalog/language/lv), но это не помагает. Хотя в коде и прописано $deliveryDate->getTimestamp() - метод не работает для варианта DD/MM/YYYY (в английской версии). Может кто знает, где копать, чтобы поправить это.

Так же вижу, что когда открывается календарь, то в зависимости от языка там отображаются дни недели и месяца на том языке, который выбран, но в файлах локализации я не нашел переводы. Я думаю, если найти переводы календаря, то там же будет и формат даты.

 

Заранее благодарю.

 

Spoiler

image.png.50bc1c605d992d6fc40ca53028ce1980.pngimage.png.e35fe422b6c08023d23fad209b0161da.png

 

Змінено користувачем Azimrin
Добавил скриншоты
  • +1 1
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.