Задача: нужно было сделать календарь. Причем чтобы по ссылки указывали на свои представления.
Смотрел вариант 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"] == -1 ? 6 : $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);
?>
Комментарии
Тут смотрели http://www.drupal.ru/node/72877 В модуле можно код подправить под нужды.
Смотрел конечно Я в принципе сначала тащтельно смотрю что есть а только потом делаю велосипед если надо
Насчет подправить код в чужом модуле.. не смотрел - мне для этой задачи было проще написать по быстрому свой код чем преодолеть нежелание смотреть чужой код.
В моем случае - идет строковый тип. (да и вообще я просто описал вариант как самим могут сделать не привязываясь к другим модулям на скорую руку (предполагается что вьюс стоит у всех )