Сегодня мне посчастливилось делать акции для одного из клиентских сайтов, причем не просто картинки с текстом, а с необходимостью указывать даты их проведения в виде плашек с определенными текстами. Об этом и хочу вам рассказать.
Для работы был создан новый тип страниц и 3 акции в нем. В двух из них я добавил меты с ключом date_end
и датами в прошлом и будущем. Поля с ключами date_end
и date_start
автоматически подгружают датапикер, так что не пришлось даже настраивать.
Далее в корневую страницу акций вставил инфоблок pages
с кастомным шаблоном на основе шаблона grid
, который позволяет выводить элементы в виде сетки. Весь код шаблона приводить не буду, но покажу самую сложную часть этого кода.
foreach ($result as $item){ $class = ''; if (isset($item['date_end'])){ $until = strtotime($item['date_end']); if ($until > time()){ $promo_date = 'До ' . tDate($this->locale, 'j F', $until); } else { $promo_date = 'Завершена'; $class = 'expired'; } } else { $promo_date = 'БЕССРОЧНАЯ'; } ?> ... <div class="item <?=$class;?>"> ... <div class="until"><?=$promo_date;?></div> ... </div> ... <?php }
Как видите, даже тут ничего сложного. Просто проверяем наличие меты и на основе сравнения с текущей датой применяем нужное решение. Обратите внимание, для вывода локализованной даты используется специальная функция tDate()
, которая идентична стандартной date()
за исключением наличия первого аргумента, в котором передается текущая локаль сайта, и переводом названий месяцев и недель на выбранный язык.
Что бы не потерять бессрочные акции в общем потоке, им достаточно указать статус "Закреплено". Тогда они всегда будут выводиться перед акциями со сроком.