Подскажите, как быть в следующей ситуации. Что-то ничего не нагуглилось...
Есть тип материалов, сделанный модулем event (события), у которых определена дата начала (а у некоторых — еще и время). Требуется сделать так, чтобы события, начало которых в прошлом, автоматически снимались с показа на главной странице. Как?
Из дополнительного — установлен еще модуль signup. Можно ориентироваться, например, не на дату начала события, а на статус — открыта ли запись на него. Такой вариант меня тоже устроит. Но, опять же, как?
Комментарии
Я долго ковырялся в этом и пришел к тому что от event нужно либо отказываться (реализовал почти всё то же другими модулями) либо его (event) надо ломать.
Хотя он в стадии активной разработки и возможно нечто подобное появится в будущем. И проблема не только в прошедших событиях, а фильтрации вывода вообще. Т.е. нужно найти перехват вывода событий чтобы самому определять - какие ноды отдавать ему а какие нет.
В качестве временного варианта можно попробовать подключить token+rules и пробовать в rules по событию например запуск cron (предварительно настроив его) менять свойства материала (например снимать пометку помещать на главную или менять тип материала). Нужно экспериментировать...
Если у меня что-то получится - доложусь обязательно
Только сейчас понял что наверное имеется в виду вывод списка нод на ГЛАВНОЙ? Тогда модуль event здесь вообще не при чем, потому что event'ом может быть любой тип материала.
Тогда нужно просто в папке темы поколдовать над node.tpl.php.
Например переименовать node.tpl.php в xxx.tpl.php
Создать пустой файл node.tpl.php и повписывать туда всё что нужно
Что-нибудь вроде такого:
$date_event_start = mktime(0,0,0,$node->event['start_exploded']['month'],$node->event['start_exploded']['day'],$node->event['end_exploded']['year']);
$date_now = mktime(0,0,0,date('m'),date('d'),date('Y'));
$date_event_delta_after_end = ($date_now - $date_event_end) / 86400; //разница в днях ПОСЛЕ конца
$date_event_delta_do_start = ($date_event_start - $date_now) / 86400; //разница в днях ДО начала
Потом эти дельты нужно разобрать например так:
{
// Здесь вставить что делать если дата конца уже в прошлом. Например ничего не показывать
echo 'Здесь должна быть нода в режиме teaser но мы ее не покажем :)<br>';
}
elseif ($date_event_delta_after_end < 1)
{
// Здесь вставить что делать если дата конца сегодня или в будущем. Например показать ноду
include 'xxx.tpl.php';
}
if ($date_event_delta_do_start > 0)
{
// Здесь вставить что делать если дата старта еще в будущем. Например не показывать ноду
echo 'Здесь должна быть нода в режиме teaser но мы ее не покажем :)<br>';
}
elseif ($date_event_delta_do_start < 1)
{
// Здесь вставить что делать если дата старта сегодня или в прошлом. Например показать ноду
include 'xxx.tpl.php';
}
Код приведен для примера но из рабочего сайта
О, круто, спасибо. Если не найду пути, не подразумевающего залезания в темплейты (времени мало, а это все, возможно, отлаживать придется), обязательно воспользуюсь.
Я таким способом сортирую вывод не только по датам, но и по куче разных параметров (например значениям полей CCK) настраиваемым каждым юзером индивидуально под себя при помощи модуля Flag. Кстати очень полезный модуль
И еще и раскрашиваю ноды разными цветами и маркирую картинками. (использую xx1.tpl.php, xx2.tpl.php ... и т.д.)
Вообще от модуля event у меня осталось только показ событий в красивых таблицах календаря. Вот подумываю - а не снести ли мне его :).
потом). Хотя может получится домучать event или хотябы просто доламать его (пока не выходит) :).
Дату начала и конца можно добавить материалу при помощи CCK.
Кстати я уже проверял - после сноса Event тип материала Event - остается (только его подрихтовать нужно
Угу. Я event пользую в основном за красивый блок с календариком (тоже, правда, не без рихтовки), и еще за то, что с ним работает signup. Но вообще он кривоват, конечно. Вот, например, мне не нужны представления month и week в страничном виде календаря. Вы не знаете, где их можно открутить?
Кстати забавная штука.
Столкнулся с глюком функции mktime (получались дробные чилса при том что часы минуты и секунды вставляю в 0), долго сидел с калькулятором и потом понял.
Unix-время началось с 1 дня. Кроме того у моего хостера mktime выдает время с учетом часового пояса :). Итого у меня был сдвиг на 21 час.
Простейшее решение использование PHP-функции round().
Но можно и по-другому - в mktime вместо нулей, учитывать необходимый сдвиг. Правда никто не знает что стукнет хостеру в голову завтра поэтому красивого решения я еще не нашел :).
Поэтому пока так:
<?php
$date_event_delta_after_end = round(($date_now - $date_event_end) / 86400); //разница в днях ПОСЛЕ конца
$date_event_delta_do_start = round(($date_event_start - $date_now) / 86400); //разница в днях ДО начала
?>
забейте болт вы на этот не доработанный модуль, хотите красивый календарь юзайте модуль calendar он идет через views bc ним можно делать все что угодно!