eZ Fetch: руководство по выборкам

eZ Fetch: руководство по выборкам

Простой fetch по урлу и идентификатору объекта.

Чаще всего самый правильный путь - производить fetch по url, например:

// Добавляем к урлу текущего объекта
{def $business_resources_node = fetch(content, node, hash(node_path, concat($node.url, '/business-resources')))}

// Указываем полный урл
{def $hotels_node = fetch(content, node, hash(node_path, '/home/business_gallery'))}

Если же Вам нужен объект с конкретным идентификатором, можно использовать код ниже. Правда, лучше Вам так никогда не делать, потому как после пересоздания объекта в панели администратора, этот код перестанет работать.

{def $comment_node = fetch(content, node, hash(node_id, 350 ))}

Fetch по типу.

Давайте пойдем чуть дальше и попробуем произвести выборку объектов по типу:

// Откроем страницу NEWS
{def $news_page = fetch(content, node, hash(node_path, '/news'))}

// Выберем все объекты с типом HR_NEWS на странице NEWS
{def $events = fetch(content, list, hash(
  parent_node_id, $news_page.node_id,
  sort_by, array(attribute, false(), 'hr_event/date'),
  class_filter_type, 'include',
  class_filter_array, array('hr_event')
))}

Давайте сделаем еще пару примеров по выборкам объектов.

Fetch по приоритету.

{def $images = fetch(content, list, hash(
  parent_node_id, $gallery_folder.node_id,
  sort_by, array('priority', true()),
  class_filter_type, 'include',
  class_filter_array,array('image')
))}

Выборка первого из списка, согласно приоритету.

{def $announcements = fetch(content, list, hash(
  parent_node_id, $announcements_node.node_id,
  sort_by, array(priority, true()),
  limit, 1,
  class_filter_type, 'include',
  class_filter_array, array('hr_announcement') 
))}

Выборка объекта с глубиной, большей единицы.

{def $random_items = fetch(content, list, hash(
  parent_node_id, $catalog_page.node_id,
  depth, 2,
  sort_by', array(priority, true()),
  offset, rand(0, $total_count|sub($items_count|inc())),
  limit, $items_count,
  class_filter_type, 'include',
  class_filter_array, array('hr_item')
))}

Пример выборки событий, которые разрешено публиковать на главной странице.

Давайте в качестве примера сделаем выборку объектов для главной страницы. Например, нам нужно отобразить в блоке "События" все события, отсортированные по дате. Код будет выглядеть так:

{def $events = fetch(content, list, hash(
  parent_node_id, $home_page.node_id,
  sort_by, array(attribute, false(), 'hr_event/date'),
  class_filter_type, 'include',
  attribute_filter, array(array('hr_event/on_the_homepage', '=', '1')),
  class_filter_array, array('hr_event')
))}

А теперь давайте немного усложним задачу, и сделаем выборку событий, которые еще не произошли:

{def $currentdate = currentdate()}

{def $events = fetch(content, list, hash(
  parent_node_id, $node.node_id,
  class_filter_type, include,
  class_filter_array, array('hr_event'),
  attribute_filter, array(array('hr_event/date', '>=', $currentdate)),
  sort_by, array(attribute, true(), 'hr_event/date')
))}

Выборка любых 3-х элементов, отсортированных по приоритету.

{def $available_properties_count = fetch(content, tree_count, hash(
  parent_node_id, $available_properties_node.node_id,
  class_filter_type, 'include',
  class_filter_array, array('hr_available_property') 
))}

{def $available_properties = fetch(content, list, hash(
  parent_node_id, $available_properties_node.node_id,
  sort_by, array('priority', true()),
  offset, rand(0, $available_properties_count|sub(4)),
  limit, 3,
  class_filter_type, 'include',
  class_filter_array, array('hr_available_property')
))}

Комментарии

Оставить комментарий

Теги:

В России:

Дорогой сердцу Hadrout (Гэдрут) в России. Проекты, клиенты, мысли и эмоции нашей команды.

В Америке:

Наш далекий и в тоже время очень близкий Hadrout в Америке. Те же клиенты и проекты, но уже немного другие мысли и совсем другой вид из окна.