Для работы с динамикой существует объект \Eva\dynamicBlender. Все действия связанные с получением списка элементов динамики — рекомендуется производить через него.
Для получения
Это самый базовый вызов. В ответ получим примерно такой массив:
Array ( [items] => Array ( [0] => Array ( [id] => 6 [false_id] => [name] => Вторичный конус выноса в XXI веке [sort] => 10 [preview_text] => [detail_text] => [category] => 2 [published] => 1 [link_name] => [section] => 0 [created_by] => 1 [created_time] => 2016-05-19 19:04:20 [modified_by] => 1 [modified_time] => 2016-05-20 17:15:58 [search] => [property_img] => [property_img_add] => [property_img_element] => [property_date] => 2016-05-08 18:05:39 [property_date_add] => 1 [property_date_element] => 6 ) ... ) )
Если нам необходимо получить только первые N элементов — используем такую конструкцию
Очень часто, при вызове динамики, необходимо использовать сортировку и разбивку по страницам.
В ответ, дополнительно к массиву items получим массив pages, в котором будут:
[pages] => Array ( [rows] => 4 [pages] => 2 [page] => 1 [next_page] => 2 [prev_page] => 0 [next_page_url] => /test.php?p=2 [links] => Array ( [0] => Array ( [page] => 1 [url] => /test.php ) [1] => Array ( [page] => 2 [url] => /test.php?p=2 ) ) )
Так как запрос на получение количества страниц может являться очень ресурсоёмкой задачей (если в базе данных много записей), по этому dynamicBlender кеширует количество страниц на 1 час.
Как мы видим, по умолчанию dynamicBlender достает все возможные свойства. Не очень хорошо требовать от базы данных вернуть нам то, что не нужно.
Допустим нам нужно вывести новостной блок на главную страницу, там нам не нужен детальный текст, разные системные поля, картинка и т.д. Для этого используем setSelect($arr)
Часто приходится строить ссылку детального описания у динамических элементов. Для этого используем метод generateDetailUrl(). Метод принимает строку в качестве параметра. В строке можно использовать любые поля, которые в текущий момент выводятся. Помимо этого существуют следующие функции, которые указываются до двоеточия.
Кроме того, можно сгенерировать ссылку на детальную страницу, используя настройки категории. Для этого вместо generateDetailUrl используем generateDefaultDetailUrl.
Теперь в ответ приходит только 3 поля: ИД, название и дата.
Крайне желательно использовать setSelect(), так как при его использовании dynamicBlender максимально пытается оптимизировать запрос. По мимо того, что он убирает ненужные поля из финального запроса SELECT ... FROM, он еще и убирает ненужные таблицы (например таблицу свойств или таблицы от сторонних модулей, что будет рассмотрено позже).
dynamicBlender так же умеет фильтровать элементы. Для этого используется метод addWhere(). У данного метода очень много разных вариантов использования.
Поддерживаются несколько типов сравнения в фильтрации:
Например, показать элементы, где есть картинка:
Допускается использовать несколько addWhere(), но во всех последующих нужно выбрать вариант сравнения: or или and
Помимо работы с текущей категорией, dynamicBlender умеет подсоединять к ней другие таблицы, для этого используется метод addJoin().
addJoin() принимает 2 параметра:
Некоторые модули имеют короткий и длинный способы присоединения, но об этом нужно читать в документации плагина, если он не является базовым.
Присоединение таблицы с пользователями
Допускается использование присоединения двух модулей, но имейте в виду, что для этого необходимо дать им разный префикс. В случае с пользователями это так:
Бывает так, что в одном из свойств текущей динамической категории лежит id другой динамической категории. dynamicBlender может присоединить ее вместе со всеми свойствами. Кроме этого, он может присоединить категорию к уже присоединенной категории.
Супер короткая форма:
Короткая форма:
Аналогичная, длинная форма
Добавление модуля универсального кеширования значений (используется, например, при подсчете количества комментариев)
Короткий способ:
Расширенный способ:
Помимо этого существуют поля, которые подключаются через дополнительные плагины. Об этом написано в документации к ним.