Кастомизация нового чекаута

товарищи программисты, разработку под cs-cart осваиваю недавно, так что, нужна ваша помощь

на старом чекауте у меня на 3 шаге была добавлена дата доставки, которая через checkout.pre.php и mode == ‘update_steps’ прилетала в request и на оформлении заказа в checkout.php и mode == ‘place_order’ все появлялось

на новом, понятно, ничего не работает
подскажите, как с нового чекауте подцепить это поле с датой доставки, а то сижу голову ломаю

собственно, модуль вот этот, но он уже не поддерживается, так что у разработчика не спросить
https://marketplace.cs-cart.com/add-ons/site-management/delivery-date.html

вот код контроллера
<?php
use Tygh\Registry;
if (!defined(‘BOOTSTRAP’)) { die(‘Access denied’); }

if ($mode == 'update_steps') {

    if (!empty($_REQUEST['delivery_date'])) {
        if (!empty($_REQUEST['delivery_time'])) {
            $_SESSION['cart']['delivery_time'] = $_REQUEST['delivery_time'];
            $_REQUEST['delivery_date'] = fn_parse_datetime($_REQUEST['delivery_date'] . ' ' . $_REQUEST['delivery_time']) + 1;
        } else {
            $_REQUEST['delivery_date'] = fn_parse_date($_REQUEST['delivery_date']);
        }
    } else {
        $_REQUEST['delivery_date'] = '';
    }

    if (empty($_REQUEST['delivery_time_period'])) {
        $_REQUEST['delivery_time_period'] = '';
    }

    $_SESSION['cart']['delivery_date'] = $_REQUEST['delivery_date'];
    $_SESSION['cart']['delivery_time_period'] = $_REQUEST['delivery_time_period'];
    Tygh::$app['view']->assign('delivery_date', $_SESSION['cart']['delivery_date']);
    Tygh::$app['view']->assign('delivery_time_period', $_SESSION['cart']['delivery_time_period']);
}

К сожалению нет под рукой модуля нового чекаута, но смысл вкратце таков.

При изменении полей на чекауте запускается ajax запрос, который обрабатывается модулем one_page_checkout (точнее checkout.pre.php или checkout.post.php модуля one_page_checkout), который записывает данные в сессию). Запуск ajax обеспечивается наличием нужных классов (кажется у тега label).

Вам нужно прописать вашему полю аналогичные классы как у one_page_checkout, потом найти $mode, по которому one_page_checkout сохраняет данные и сделать в своём pre-контроллере по аналогии сохранение delivery_date в сессию

спасибо, буду копаться в коде

кто-нибудь еще чего полезного может подсказать?
может, уважаемые разработчики, чего на ушко шепнут?

А ты поле даты и времени вставил код шаблона или нет?

Aromat.studio


Новый чекаут и дата доставки, можно поискать владельца на видео екомшоу и попросить помощи у него) а вдруг

разумеется

name=“user_data[fields][38]”
name=user_data[fields][40]

  • зачем ты массив “38” и “40” ещё добавил?

меняй fields на delivery_date и delivery_time соответственно.
Убирай вообще эти 38 и 40!
И в контроллере используй!

спасибо за помощь
на скриншоте это не мой магазин, просто в пример скинули, где на новой чекауте дата доставки есть

собственно, я добавил свои поля в шаблон, атрибуты все проставил по аналогии с полями чекаута, добавил эти два поля в script.js модуля, и как я понимаю, они должны теперь обрабатываться контроллером модуля checkout.post.php и прилетать в поля user_data[fields][delivery_date] и user_data[fields][delivery_time_period], судя по этому коду из контроллера, как это я понял

/** @var \Tygh\SmartyEngine\Core $view */
$view = Tygh::$app['view'];

/** @var array $profile_fields */
$profile_fields = $view->getTemplateVars('profile_fields');

/** @var array $user_data */
$user_data = $view->getTemplateVars('user_data');

foreach ($profile_fields as $section) {
    foreach ($section as $field) {
        $user_data[$field['field_name']] = $field['is_default'] == 'Y'
            ? $user_data[$field['field_name']]
            : $user_data['fields'][$field['field_name']];
    }
}

но в fields нету ничего, подскажите, в чем ошибаюсь?

Прдлагаю почистить кэш в админке магазина.
Администрирование - Хранилище данных - Очистить кэш
+
к url в админке добавить &cc&tpl

Проверить еще раз.

да все равно ничего не работает
пойду забашляю в хелпдеск
мб объяснят, как и чего тут в новом чекауте работает

Я написал в личку

добавил на чекаут дату доставки, но дата прилетает только сегодняшняя, все зависимости от выбора на календаре
в чем может быть проблема?

Подскажите! Как сделать в две колонки плитки ?

Нужно менять стили CSS.

Вот это значение попробуйте поменять:

.litecheckout__field--xsmall {
    flex-basis: calc(25% - 1rem);
}

на

.litecheckout__field--xsmall {
    flex-basis: calc(50% - 1rem);
}

Добавляете в Редактор тем - Пользовательские CSS. Должна ширина поменяться у плиток Способов доставки и оплаты.

1 лайк

Если только для мобильных:

@media (max-width: 767px) {
.litecheckout__field--xsmall {
flex-basis: calc(50% - 1rem);
} }