Темизация Views в зависимости от времени года
В этом посте расскажу о том, как можно темизировать представления в зависимости от времени года.
Допустим, нужно сделать разное отображение элементов для Весны, Лета, Осени и Зимы...
Приступим.
Добавляем переменную с периодом
Для начала, нам нужно вычислить текущий период года, и передать это значение во Views.
В этом нам поможет хук препроцесса template_preprocess_views_view.
Чтоб его использовать, открываем файл template.php темы, в которой будем настраивать отображение, и добавляем наш препроцессор:
/**
* Implements template_preprocess_views_view().
*/
function ИМЯ_ТЕМЫ_preprocess_views_view(&$vars) {
// Сюда будем писать код
}
Получить текущую дату нам поможет PHP-функция date().
Узнаем номер текущего месяца:
$mon = date('m');
И, теперь, проверяем период:
if($mon > 2 && $mon < 6){
$vars['period'] = 'spring';
}
if($mon > 5 && $mon < 9){
$vars['period'] = 'summer';
}
if($mon > 8 && $mon < 12){
$vars['period'] = 'autumn';
}
if($mon = 12 || $mon < 3){
$vars['period'] = 'winter';
}
Указывая значение $vars['period'] мы добавляем в массив переменных доступных в представлении, новую. Она будет доступна в шаблоне как $period.
Темизация представления
Теперь, когда наше представление знает какой сейчас период, мы "попросим" его выводить специальный класс, который позже настроим в стилях нашей темы.
Для темизации, переходим в настройки нужного представления, в блоке с прочими настройками нажимаем "Тема оформления: Информация":
В открывшемся окне выбираем шаблон, в зависимости от необходимого результата (в этом примере будем темизировать только один, конкретный дисплей представления), и копируем его название.
Нажимаем на просмотр содержимого шаблона.
В папке "templates", темы оформления создаем файл с названием, которое мы скопировали перед открытием содержимого шаблона, в моем случае это "views-view--test-content--page.tpl.php". Открываем этот файл в текстовом редакторе, и копируем туда значение открывшееся в окне содержимого шаблона:
<?php
/**
* @file
* Main view template.
*
* Variables available:
* - $classes_array: An array of classes determined in
* template_preprocess_views_view(). Default classes are:
* .view
* .view-[css_name]
* .view-id-[view_name]
* .view-display-id-[display_name]
* .view-dom-id-[dom_id]
* - $classes: A string version of $classes_array for use in the class attribute
* - $css_name: A css-safe version of the view name.
* - $css_class: The user-specified classes names, if any
* - $header: The view header
* - $footer: The view footer
* - $rows: The results of the view query, if any
* - $empty: The empty text to display if the view is empty
* - $pager: The pager next/prev links to display, if any
* - $exposed: Exposed widget form/info to display
* - $feed_icon: Feed icon to display, if any
* - $more: A link to view more, if any
*
* @ingroup views_templates
*/
?>
<div class="<?php print $classes; ?>">
<?php print render($title_prefix); ?>
<?php if ($title): ?>
<?php print $title; ?>
<?php endif; ?>
<?php print render($title_suffix); ?>
<?php if ($header): ?>
<div class="view-header">
<?php print $header; ?>
</div>
<?php endif; ?>
<?php if ($exposed): ?>
<div class="view-filters">
<?php print $exposed; ?>
</div>
<?php endif; ?>
<?php if ($attachment_before): ?>
<div class="attachment attachment-before">
<?php print $attachment_before; ?>
</div>
<?php endif; ?>
<?php if ($rows): ?>
<div class="view-content">
<?php print $rows; ?>
</div>
<?php elseif ($empty): ?>
<div class="view-empty">
<?php print $empty; ?>
</div>
<?php endif; ?>
<?php if ($pager): ?>
<?php print $pager; ?>
<?php endif; ?>
<?php if ($attachment_after): ?>
<div class="attachment attachment-after">
<?php print $attachment_after; ?>
</div>
<?php endif; ?>
<?php if ($more): ?>
<?php print $more; ?>
<?php endif; ?>
<?php if ($footer): ?>
<div class="view-footer">
<?php print $footer; ?>
</div>
<?php endif; ?>
<?php if ($feed_icon): ?>
<div class="feed-icon">
<?php print $feed_icon; ?>
</div>
<?php endif; ?>
</div><?php /* class view */ ?>
В строку выводящую классы (в этом примере строка №30) добавим наш класс, изменив её на:
<div class="<?php print $classes; print ' current_period_'.$period; ?>">
Сохраняем, сбрасываем кеш и проверяем результат. Наше представление выводится с классом "current_period_НАЗВАНИЕ"
Настраиваем отображение
Почти все готово, осталось дело за малым - настроить разное отображение для различных периодов.
Это можно сделать с помощью CSS.
В стилях нашей темы прописываем что-нибудь вроде этого:
.current_period_spring {
color: green;
}
.current_period_summer {
color: red;
}
.current_period_autumn {
color: orange;
}
.current_period_winter {
color: grey;
}
Сохраняем, и наслаждаемся результатом.
Делитесь полезными материалами в социальных сетях.