Как в общем случае можно вывести список материалов, отфильтровам по сложному условию (к примеру вывести только те материалы где cck-поле меньше друго cck-поля).
Конкретнее.
Есть тип материала в котором есть 4 числовых поля: день и месяц начала сезона, день и месяц конца сезона (сезоны ежегодно в одно и то же время). Нужно вывести только те материалы где текущая дата попадает в диапазон между началом и концом сезона (если ещё конкретнее - тут будет ещё множество проверок, вроде если начало больше конца - нужно обрабатывать отдельно). Использовать date для этих целей не удалось, т.к. в дате никак нельзя уйти от привязки к году.
В общем случае можно опустить и день. Пусть будет только месяц. Как хотя бы сделать проверку date('n') > field_begin_month && date('n') < field_end_month?
Комментарии
Можно добавить Computed field, в него заносить либо 1 (если date('n') > field_begin_month && date('n') < field_end_month) либо 0Поле сделать *hidden* а во views сделать фильтр по нему.PS> ерунду написал, сорри![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
Тоже сначала пытался этим занятся, но потом понял что если такое поле сохранять в базе - оно будет недействительно на следующий день, если не сохранять - оно не будет видно во вьюсах.
Пока что решил проблему создав php-блок (но был бы рад другому решению):
<?php
$sql = "SELECT np.nid, np.title, n.title as season
FROM node n, node np, content_field_parent p,
(
select s.nid,
MAKEDATE(YEAR(CURDATE()),1) + INTERVAL s.field_from_month_value - 1 MONTH + INTERVAL s.field_from_day_value - 1 DAY as d1,
MAKEDATE(YEAR(CURDATE()),1) + INTERVAL s.field_to_month_value - 1 MONTH + INTERVAL s.field_to_day_value - 1 DAY as d2
from content_type_season s
) s
WHERE s.nid = n.nid
AND n.nid = p.nid
AND np.nid = p.field_parent_nid
AND ((d1 <= d2 AND CURDATE() BETWEEN s.d1 and s.d2) OR (d1 >= d2 AND CURDATE() NOT BETWEEN s.d2 and s.d1))"; $result = db_query_range($sql, 0, 10);
while ($node = db_fetch_object($result)) {
$output[] = l($node->title, "node/$node->nid") . ". $node->season";
}
print theme('item_list', $output);
?>
Кстати, использование sql-евского CURDATE() вместо php-шного date() - какие может повлечь проблемы? Могут ли результаты этих функций сильно отличаться (разница +/-день несущественна)?