Ничего не найдено
Быстрый старт
CSS
Компоненты
Меню
Динамическое содержимое
SEO-паук
Социальные теги
Прочее
Установка
Категории v3
Категории v3: типы свойств

Работа с динамикой

Для работы с динамикой существует объект \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, в котором будут:

  • rows- количество элементов в выборке
  • pages - количество страниц
  • next_page - номер следующей страницы (если следующей страницы нет, то будет равен 0)
  • prev_page - номер предыдущей страницы (если предыдущей страницы нет, то будет равен 0)
  • next_page_url - ссылка следующей страницы (если следующей страницы нет, то не будет установлена)
  • prev_page_url - ссылка предыдущей страницы (если предыдущей страницы нет, то не будет установлена)
  • links - массив с номерами страниц относительно страницы генерации, имейте в виду, если страниц слишком много, то они будут разбиты знаком -. В постраничной навигации всегда присутствует первая и последняя страницы.
[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(). Метод принимает строку в качестве параметра. В строке можно использовать любые поля, которые в текущий момент выводятся. Помимо этого существуют следующие функции, которые указываются до двоеточия.

  • translit -  транслитерирует строку, заменяет символы пунктуации на -.
  • date - получает формат даты, например можно написать так: {{date:property_date:Y}} - будет получать год из даты и добавлять к ссылке

Кроме того, можно сгенерировать ссылку на детальную страницу, используя настройки категории. Для этого вместо generateDetailUrl используем generateDefaultDetailUrl.

Теперь в ответ приходит только 3 поля: ИД, название и дата.

Крайне желательно использовать setSelect(), так как при его использовании dynamicBlender максимально пытается оптимизировать запрос. По мимо того, что он убирает ненужные поля из финального запроса SELECT ... FROM, он еще и убирает ненужные таблицы (например таблицу свойств или таблицы от сторонних модулей, что будет рассмотрено позже).

dynamicBlender так же умеет фильтровать элементы. Для этого используется метод addWhere(). У данного метода очень много разных вариантов использования. 

Поддерживаются несколько типов сравнения в фильтрации:

  • равно
  • не равно, используется символ: !=
  • больше, используется символ: >
  • больше либо равно, используется символ: >=
  • меньше, используется символ: <
  • меньше либо равно, используется символ: <=
  • похоже (LIKE в MySQL), используется символ ~

Например, показать элементы, где есть картинка:

Допускается использовать несколько addWhere(), но во всех последующих нужно выбрать вариант сравнения: or или and

Получаем данные из других модулей

Помимо работы с текущей категорией, dynamicBlender умеет подсоединять к ней другие таблицы, для этого  используется метод addJoin().

addJoin() принимает 2 параметра:

  • Модуль, который нужно присоединить
    • Если строка, то во время присоединения, будет использован метод blendTable(), у соответствующего объекта
    • Если массив, то первый элемент будет использован в качестве объекта, а второй, в качестве метода
  • Параметры, которые будут переданы в модуль

Некоторые модули имеют короткий и длинный способы присоединения, но об этом нужно читать в документации плагина, если он не является базовым.

Модуль пользователей

Присоединение таблицы с пользователями

Допускается использование присоединения двух модулей, но имейте в виду, что для этого необходимо дать им разный префикс. В случае с пользователями это так:

Бывает так, что в одном из свойств текущей динамической категории лежит id другой динамической категории. dynamicBlender может присоединить ее вместе со всеми свойствами. Кроме этого, он может присоединить категорию к уже присоединенной категории.

Супер короткая форма:

Короткая форма:

Аналогичная, длинная форма

Модуль универсального кеширования

Добавление модуля универсального кеширования значений (используется, например, при подсчете количества комментариев)

Модуль секций

Короткий способ:

Расширенный способ:

Модуль рейтинга

Помимо этого существуют поля, которые подключаются через дополнительные плагины. Об этом написано в документации к ним.