Как сделать акции с красивой датой

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

Для работы был создан новый тип страниц и 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() за исключением наличия первого аргумента, в котором передается текущая локаль сайта, и переводом названий месяцев и недель на выбранный язык.

Что бы не потерять бессрочные акции в общем потоке, им достаточно указать статус "Закреплено". Тогда они всегда будут выводиться перед акциями со сроком.

© Arthur Grand, 2011–2017
Powered by SyDES