Календарь во вьюсе в виде блока

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

Аватар пользователя z-s z-s 9 декабря 2012 в 0:03

Задача: нужно было сделать календарь. Причем чтобы по ссылки указывали на свои представления.

Смотрел вариант calendar + date + views - но там плохо что жесткая привязка к полю типа date - мне же этой привязки не нужно было.

Теперь то что касается вьюса: лениво было отдельно модуль блока писать - поэтому во всьюсе фильтр поставил материал ранее 01-01-1970 и в разделе что делать если нет данных - php код. (хотя уверен отдельный модуль будет производительнее - но если вдруг кому понадобиться - пишите сделаю полноценный настраиваемый под ваши потребности модуль блока календаря с привязками ко вьюсам )

Сразу оговорюсь что написано грязно, с дублирование проверок - но главное суть.. p.s. лень нифига не двигатель прогресса - не берите с меня пример!

неприятное тока то что для блока нельзя взять $views->args (но поскольку мы настраиваем на конкретный вьюс - мы же знаем где там что в адресной строке - поэтому обошелся только arg() )


<?php
$url 
$view->get_path();

$day 1;
$args arg(1);
if(
$args){
$dat explode(".",$args);
$year $dat[2] or date("Y");
$month $dat[1] or date("m");
$selectedday $dat[0] or date("d");

if(!

checkdate($month,$selectedday,$year)){
  
$year date("Y");
  
$month date("m");
  
$selectedday date("d");
}
}else{
$year date("Y");
$month date("m");
$selectedday date("d");
}
    
$day_of_week[] = 'пн';
    
$day_of_week[] = 'вт';
    
$day_of_week[] = 'ср';    
    
$day_of_week[] = 'чт';
    
$day_of_week[] = 'пт';
    
$day_of_week[] = 'сб';
    
$day_of_week[] = 'вс';
        
    
$table['header'] = $day_of_week;
    
$firstdayweekday getdate(mktime(0,0,0,$month,$day,$year));
        
$firstdayweekday["wday"]--;
        
$firstdayweekday["wday"] = $firstdayweekday["wday"] == -$firstdayweekday["wday"];
    
    while(
checkdate($month,$day,$year)){
        for(
$i 0;$i<7;$i++){
            if(!
$start and $firstdayweekday["wday"] == $i$start true;        
            if(
$start and (! checkdate($month,$day,$year)) ) $start false;
            if(
date("d") != $day){
                if(
$day != $selectedday){
                    
$row[$i] = $start l($day,$url ."/"$day++ .".".$month.".".$year) : '';
                }else{
                    
$row[$i] = $start ? array('data'=> l($day,$url ."/"$day++ .".".$month.".".$year) ,'class'=>'selected','style'=>'background:red;') : '';
                }
            }else{
                if(
$day != $selectedday){            
                    
$row[$i] = array('data'=> l($day,$url ."/"$day++ .".".$month.".".$year) ,'class'=>'today','style'=>'background:green;');
                }else{
                    
$row[$i] = array('data'=> l($day,$url ."/"$day++ .".".$month.".".$year) ,'class'=>'selected','style'=>'background:red;');
                }
            }
        }
        
$table['rows'][] = $row;
    }
    print 
theme('table',$table);
?>

Комментарии

Аватар пользователя z-s z-s 11 декабря 2012 в 7:27

<a href="mailto:mNigma@drupal.org">mNigma@drupal.org</a> wrote:
Тут смотрели http://www.drupal.ru/node/72877 В модуле можно код подправить под нужды.

Смотрел конечно Smile Я в принципе сначала тащтельно смотрю что есть а только потом делаю велосипед если надо Smile

Насчет подправить код в чужом модуле.. не смотрел - мне для этой задачи было проще написать по быстрому свой код чем преодолеть нежелание смотреть чужой код.

В моем случае - идет строковый тип. (да и вообще я просто описал вариант как самим могут сделать не привязываясь к другим модулям на скорую руку (предполагается что вьюс стоит у всех Smile )