Делаю фильтр в виде месяцы-годы

Главные вкладки

Аватар пользователя Andrey_Ka Andrey_Ka 6 декабря 2015 в 20:47

В общем делаю как на картинке, при нажатии на месяц - фильтруются все новости за месяц, при нажатии - на год - все за год..ЧПУ и 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 (=> "Январь"=> "Февраль"=> "Март"=> "Апрель"=> "Май"=> "Июнь"=> "Июль"=> "Август"=> "Сентябрь"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.jpg44.58 КБ