День добрый!
Кто-нибудь пробовал разобраться с этим блоком?
Конкретно - хочу добавить или заменить в нем одну из строк на период 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
]);
Может кому понадобится )