Common/daterange_picker.tpl

День добрый!
Кто-нибудь пробовал разобраться с этим блоком?
Конкретно - хочу добавить или заменить в нем одну из строк на период HM

const PERIOD_MONTH_AGO_TILL_NOW = 'HM';

Вобщем, как и говорил, главное правильно задать вопрос - и решение само найдется.
Дело в том, что я встроил этот пикер в свой контроллер который сделал еще и первой страницей при входе в админку - собрал на нем всю информацию по заказам, отгрузкам, доставкам, возвратам.
Пришла пора заменить обычную форму выбора периода - на пикер с автообновлением таблицы. И тут выяснилось что вот этот блок - последние 24 часа, 7 и 30 дней - из него исключили.

А теперь - почему интересны именно они, а конкретно - последние 30 дней,
Да потому что если вы сегодня выберите кастомный период за последние 30 дней - например с 12 июня по 12 июля, то завтра он так и останется с 12 июня по 12 июля - и данных за 13 в нем не будет.
Мне надо было, чтобы выбранный период автоматически следовал за календарем.
Решение
/design/backend/templates/common/daterange_picker.tpl
в районе 80 строки в массив _.tr добавляем строчку

last_n_days: '{__("last_n_days", ["[N]"=>30])|escape:"javascript"}',

скрипт /js/tygh/date_picker.js
в районе 55 строки добавляем в переменную ranges

moment.locale(_.tr("default_lang"));
      var default_params = {
        ranges:

меняем в конце

 _ranges),

на

_defineProperty(_ranges, _.tr('last_n_days'), [moment().subtract(30, 'day').startOf('day'), moment().endOf('day')]), _ranges),

Всего то делов, а в пикере теперь есть нужный пункт.

ни и что-бы сохранялся в сессии (я использую данные сессии с дашборда dashboard_selected_period) - в своем контроллере добавить вначале этот блок кода (берется из контроллера дашборда, добавляем только строчку DateTimeHelper::PERIOD_MONTH_AGO_TILL_NOW,)

    $time_periods = [
        DateTimeHelper::PERIOD_TODAY,
        DateTimeHelper::PERIOD_YESTERDAY,
        DateTimeHelper::PERIOD_THIS_MONTH,
        DateTimeHelper::PERIOD_LAST_MONTH,
        DateTimeHelper::PERIOD_THIS_YEAR,
        DateTimeHelper::PERIOD_LAST_YEAR,
        DateTimeHelper::PERIOD_MONTH_AGO_TILL_NOW,
    ];
    $time_period = DateTimeHelper::getPeriod(DateTimeHelper::PERIOD_MONTH_AGO_TILL_NOW);
    // Predefined period selected
    if (isset($_REQUEST['time_period']) && in_array($_REQUEST['time_period'], $time_periods)) {
        $time_period = DateTimeHelper::getPeriod($_REQUEST['time_period']);
        fn_set_session_data('dashboard_selected_period', serialize(['period' => $_REQUEST['time_period']]));
    }
    // Custom period selected
    elseif (isset($_REQUEST['time_from'], $_REQUEST['time_to'])) {
        $time_period = DateTimeHelper::createCustomPeriod('@' . $_REQUEST['time_from'], '@' . $_REQUEST['time_to']);
        fn_set_session_data('dashboard_selected_period', serialize([
            'from' => $time_period['from']->format(DateTime::ISO8601),
            'to' => $time_period['to']->format(DateTime::ISO8601),
        ]));
    }
    // Fallback to previously saved period
    elseif ($timeframe = fn_get_session_data('dashboard_selected_period')) {
        $timeframe = unserialize($timeframe);
        if (isset($timeframe['period']) && in_array($timeframe['period'], $time_periods)) {
            $time_period = DateTimeHelper::getPeriod($timeframe['period']);
        } elseif (isset($timeframe['from'], $timeframe['to'])) {
            $time_period = DateTimeHelper::createCustomPeriod($timeframe['from'], $timeframe['to']);
        }
    }
    $timestamp_from = $time_period['from']->getTimestamp();
    $timestamp_to = $time_period['to']->getTimestamp();
    
    Tygh::$app['view']->assign([
        'time_from'                => $timestamp_from,
        'time_to'                  => $timestamp_to
    ]);

Может кому понадобится )

2 лайка

Добрый вы человек @alex_vp :handshake:

Да вообще очень странная логика разработчиков, впрочем чему удивляться, это не редкость. При первом входе в админку на дашборд, или после очистки данных сессии - по умолчанию задается именно этот период - последние 30 дней

 $time_period = DateTimeHelper::getPeriod(DateTimeHelper::PERIOD_MONTH_AGO_TILL_NOW);

но стоит выбрать любой другой из доступных периодов - и этот перестает быть доступным… до следующей очистки сессии.
Ну странная логика…

Все не как у людей :grinning: