В общем делаю как на картинке, при нажатии на месяц - фильтруются все новости за месяц, при нажатии - на год - все за год..ЧПУ и Pathauto в наличии.
1. Делаю вьюс по новостям с раскрытым фильтром по дате создания. Страница-"news".
Идея в том, что раскрытый фильтр это что -то типа www..ru/news/2015-12. И мне надо только организовать вывод таких страниц
2. Подключаю модуль Jcarousel.
3.Делаю блок который вывожу только на странице вьюса. Содержимое блока (php):
<?php <div class="time-line-header">Новости по месяцам</div><div class="time-line">
<?php print get_timeslider(arg()); ?>
</div><div class="time-line-all"><a href="/news">Все</a></div>?>
..то есть я в начале сказал что это такое, потом вывел блок карусели, потом вывел ссылку на все материалы.
4. Теперь делаю функцию get_timeslider(arg()); в template.php
<?php
function get_timeslider($arg)
{
$month_name = array (1 => "Январь", 2 => "Февраль", 3 => "Март", 4 => "Апрель", 5 => "Май", 6 => "Июнь", 7 => "Июль", 8 => "Август", 9 => "Сентябрь", 10 => "Октябрь", 11 => "Ноябрь", 12 => "Декабрь"); // то что надо показать пользователю
$nodes = db_query("SELECT n.created FROM {node} n WHERE (n.status = 1) AND (n.type = 'news') ORDER BY n.created ASC");
// Здесь я вытащил все материалы принадлежащие к новостям
$output = '<ul class="mycarousel jcarousel-skin-default">'; // По этому классу запускаем карусель
$curr=0; // номер месяца с которого выводим карусель
$all=1; // временная переменная для выше
$tmpyear=0; // флаг смены года
$tmpmonth=0; // флаг смены месяца
foreach ($nodes as $node) {
$currentyear=format_date($node->created, 'custom', 'Y');
$currentmonth=format_date($node->created, 'custom', 'n'); //получили год и месяц публикации
if($tmpyear!=$currentyear) //если сменился год, то выводим год
{
$output .= '<li>'. l($currentyear, 'news/'. $currentyear).'</li>';
$tmpyear=$currentyear;
if(isset($arg[1])) if($arg[1]==$currentyear) $curr=$all; // если текущее значение совпаадет с фильтром - отмечаем
$all++;
$tmpmonth=0;
}
if($tmpmonth!=$currentmonth)
{
$output .= '<li>'.l($month_name[$currentmonth], 'news/'. $currentyear.'-'.$currentmonth).'</li>';
$tmpmonth=$currentmonth;
if(isset($arg[1])) if($arg[1]==$currentyear.'-'.$currentmonth) $curr=$all; // если текущее значение совпаадет с фильтром - отмечае
$all++;
}
}
if($curr==0) $curr=$all-1; //если в фильтре совпадений не было - просто выводим
$output .= '<li>'.l($tmpyear+1, 'news').'</li>'; // тут вывели следующий год..
jcarousel_add('mycarousel', array('start' => $curr));// тут показываем старт,который посчитали ранее - это подключение карусели
return $output.'</ul>';
}?>
5. Работа с css и все ...
Вложение | Размер |
---|---|
news.jpg | 44.58 КБ |