Наверх

Выводим объекты любого класса с помощью модифицированного getResources

Недавно понадобилось выводить во фронтенде список пользователей, список групп пользователей, список ролей, и к тому же списки своих собственных объектов.

Очень хотелось той же гибкости в оформлении, которую дает getResources при выводе списка ресурсов. Ну и getPage для пагинации использовать. В результате я взял getResources и слегка его переделал, чтобы он мог выводить список объектов любого класса (ему этот класс, конечно же, придется все-таки указать).

Получился сниппет getObjects Внимание: Велосипед (кошерное решение в UPD)

Покажу примеры, как я вывожу те или иные объекты, чтобы было понятно, что к чему.

Выводим список пользователей в какой-либо группе


[[!getPage?               // С getPage работаем как обычно
    &element=`getObjects` // Указываем наш сниппет
    &objClass=`modUser`   // Указываем класс объектов для вывода
    &objects=`-1`         // Админа в список не включаем
    &parents=`8,9,10`     // Можно указать одну группу, а можно несколько

    &parentField=`primary_group`    // У пользователей нет параметра parent
                                    // зато есть primary_group

    &tpl=`tpl.getObjects.users.row` // В шаблоне вывода обычные плейсхолдеры
                                    // [[+id]], [[+username]]
  ]]

[[!+page.nav]]

Выводим группы пользователей


[[!getPage?
    &element=`getObjects`
    &objClass=`modUserGroup`  // Здесь еще проще - указываем лишь класс
    &tpl=`tpl.getObjects.organizations.row`
    &depth=`1`
    &objects=`-1`             // Ну и пропускаем группу Administrator
  ]]

[[!+page.nav]]

Выводим объект пользовательского класса


[[!getPage?
    &element=`getObjects`
    &loadRehab=`1`            // В коде сниппета подключится пакет для работы
    &objClass=`Calls`         // с классом Calls (строка 6)
    &parentField=`org_id`     // Для Calls используем поле org_id вместо parent
    &parents=`8,9,10`
    &tpl=`tpl.getCalls.row`
  ]]

[[!+page.nav]]
Таким образом можно выводить объекты любого класса используя парсер для шаблонов вывода от getResources и довольно просто реализовать разбиение списка на страницы. G+

UPD. bezumkin подсказывает, что есть нормальное решение Rowboat. Наши списки будут выводиться так:

Выводим список пользователей в какой-либо группе


[[!getPage?
    &element=`Rowboat`
    &table=`users`
    &where=`{"primary_group:IN":"8,9,10","id:!=":"1"}`
    &tpl=`tpl.getObjects.users.row`
  ]]

[[!+page.nav]]

Выводим группы пользователей


[[!getPage?
    &element=`Rowboat`
    &table=`membergroup_names`
    &where=`{"id:!=":"1"}`
    &tpl=`tpl.getObjects.organizations.row`
  ]]

[[!+page.nav]]

Выводим объект пользовательского класса


[[!getPage?
    &element=`Rowboat`
    &table=`calls`
    &where=`{"org_id:IN":"8,9,10"}`
    &tpl=`tpl.getCalls.row`
  ]]

[[!+page.nav]]

Оригинал статьи community.modx-cms.ru/blog/tips_and_tricks/9053.html


0 комментариев

    Авторизация

    через сервис Loginza:


    Шаблоны MODX

    1 2 Дальше »

    Объектная
    модель
    MODX