ezPublish - выборка объектов, опубликованных между датами
Мне необходимо fetch
статьи (или объекты), опубликованные между "сейчас" и "месяцем ранее". Код выглядит так:
{def $date = currentdate()}
{def $day = currentdate()|datetime( 'custom', '%d' )}
{def $month = currentdate()|datetime( 'custom', '%m' )}
{def $year = currentdate()|datetime( 'custom', '%Y' )}
{def $fromDate = maketime(0,0,0,$month|dec(), $day, $year)}
{def $items = fetch(content, list, hash(
'parent_node_id', 10,
'attribute_filter', array('and',
array('article/publish_date', '<=', $data),
array('article/publish_date', '>', $fromDate),
array( 'priority', '>=', 0 )),
'class_filter_type', 'include',
'class_filter_array', array('article')
))}
К сожалению, ничего не выходит. Когда я удаляю $fromDate
массив из fetch
, оно работает.
1 ответ
Короче говоря, ваш код выборки шаблона неточный (здесь или в вашем шаблоне).
Строка "array('article/publish_date', '<=', $data)" должна быть "array('article/publish_date', '<=', $date)" вместо того, чтобы исправить опечатку переменной.
Кроме того, ваша логика сравнения даты и времени (оператор) также неверна (я думаю). Прошло много времени с тех пор, как я в последний раз делал то, что вы делаете, но когда я делал это в последний раз, я использовал следующую логику.
{* Example: http://example/layout/set/content_statistics.csv/(startDate)/2010-07-14/(endDate)/2010-07-19/ *}
{def $articles=false()}
{if and( is_set( $view_parameters.startDate ), is_set( $view_parameters.endDate ) )}
{def $startDate=$view_parameters.startDate|explode("-")
$endDate=$view_parameters.endDate|explode("-")}
{def $startDateTimestamp=maketime(0,0,0,$startDate.1,$startDate.2,$startDate.0)
$endDateTimestamp=maketime(23,59,59,$endDate.1,$endDate.2,$endDate.0)}
{set $articles=fetch( 'content', 'list', hash(
'parent_node_id', 77,
'class_filter_type', 'include',
'class_filter_array', array( 'article' ),
'sort_by', array( 'published', false() ),
'attribute_filter', array( array( 'published', '>=', $startDateTimestamp ),
array( 'published', '<', $endDateTimestamp ) )
) )}
{else}
{set $articles=fetch( 'content', 'list', hash(
'parent_node_id', 77,
'class_filter_type', 'include',
'class_filter_array', array( 'article' ),
'sort_by', array( 'published', false() ),
'limit', 10000
) )}
{/if}
Обратите внимание, что операторы сравнения меток даты и времени фильтра атрибутов используют совершенно другую формулу re: '>=' '<', и я думаю, что этот пример будет работать лучше для вас.
'attribute_filter', array( array( 'published', '>=', $startDateTimestamp ),
array( 'published', '<', $endDateTimestamp ) )
) )}
Надеюсь, это поможет!
Ура, Хит
Примечание: я позаимствовал приведенный выше пример у eZpedia, но боялся ссылаться здесь, так как не уверен в политике ссылок на документацию сообщества (даже если в ней есть ответ на заданный вопрос): http://www.ezpedia.org/en/solution/how_to_fetch_content_based_on_view_parameter_date_range