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

Другие вопросы по тегам