doclister modx evo параметры

Разработчикам

Контроллеры

Имя класса расположенного в файле php файле должно заканчиваться на DocLister, а сам класс должен быть унаследован от абстрактного класса DocLister.

В параметре dir можно указать пусть от корня сайта к папке с контроллером.

Экстендеры

Экстендеры могут загружаться из контроллера или с помощью параметра extenders, в котором перечислены имена файлов *.extender.inc из папки /core/extender/

Загружаемый экстендер должен быть классом имя которого должно начинаться с имени экстендера и заканчиваться на _DL_Extender. Помимо этого, загружаемый экстендер должен быть унаследован от абстрактного класса extDocLister.

Фильтры

Правила фильтрации можно найти в файле *.filter.php по имени фильтра из папки /core/filter/. Класс в файле должен быть унаследован от абстрактного гласса filterDocLister, а само имя должно заканчиваться на _DL_filter.

Приведение типов TV-параметров

Пример в контроллере site_content:

Сохранение объекта DocLister

Это может быть удобно, когда один и тот же список необходимо шаблонизировать 2 раза.

Или, например, нужно получить массив ID документов, которые задействованы в выводе

Использование шаблонизатора DocLister в своих сниппетах

Подключив класс DLTemplate вы уже можете пользоваться шаблонизатором, который:

Обычная шаблонизация

Подмена шаблона у документа

Для упрощения восприятия, весь процесс настройки ТВ параметров будет упущен. Поэтому представим, что у нас имеется:

Создаем плагин для событий OnLoadWebDocument и OnLoadWebPageCache

Использовать подмену шаблонов может быть удобно, если вы редактируете сайт на горячую (без разворачивания девелоперских версий).

Источник

DocLister: Параметры выборки

DocLister: Параметры выборки

&controller

Задает класс для выборки данных. Базовые классы (расположены в папке DocLister/core/controller/):

&idType

Тип выборки документов.

Список документов подставляемых в запрос будет выбран из параметра, имя которого совпадает со значением данного параметра.

Во избежание недоразумений рекомендуется всегда явно определять этот параметр. Особенно актуально, когда одновременно используются параметры parents и documents.

&parents

Выборка документов на основании списка родительских документов.

&documents

Выборка произвольных документов.

Если используется параметр parents__, то документы перечисленные в этом параметре будут просто подмешаны в результат и подвержены последующим правилам выборки (фильтрация, сортировка).

&ignoreEmpty

Позволяет сделать выборку всех записей из таблицы, если параметр documents не задан. Параметр idType в этом случае должен быть documents.

&display

Максимальное число документов при выборке.

Может быть переопределено значением параметра queryLimit.

&queryLimit

Максимальное число документов при выборке.

&depth

Глубина выборки с использованием параметра parents.

&offset

Число пропускаемых документов с начала списка. Переопределяется при использовании пагинации. Если же требуется всегда пропускать N документов, то необходимо использовать параметр start.

&start

Число документов пропускаемых с начала выборки. Складывается со значением offset автоматически устанавливаемым при пагинации.

&total

Максимальное число документов отображаемое на 1 странице в выборке.

&addWhereList

Дополнительные условия выборки документов. Любая строка удовлетворяющая требованиями строки для подстановки в WHERE блок SQL запроса.

&showParent

Исключение документов из которых делалась выборка с использованием параметра parents.

&selectFields

Имена полей, включаемых в выборку.

&groupBy

Группировка результатов по какому-нибудь полю.

Параметры выборки для произвольных таблиц (контроллер onetable)

&table

Имя таблицы по которой будет производиться выборка. Если в таблице PrimaryKey отличается от id, то необходимо дополнительно задать имя этого поля в параметре idField.

&idField

Имя поля PrimaryKey. Документы, указанные через параметр documents, будут выбираться по этому полю.

&parentField

Имя поля в котором хранятся значения idField родительских документов. Используется при выборке документов из параметра parents.

Выборка с TV-параметрами

&tvPrefix

Префикс для плейсхолдеров создаваемых из имен TV-параметров.

&tvList

Список TV-параметров, которые должны быть в выборке.

&renderTV

TV-параметры, значение которых необходимо подготовить к отображению в соответствии с установленными виджетами. TV параметры которых нет в значении параметра tvList будут проигнорированы.

Читайте также:  Что цветет в августе в москве и московской области аллергия

Сортировка

&sortType

Значение none определяет автоматическую сортировку правилами MySQL (как правило по primary key).

&orderBy

Единая строка сортировки (как минимум совокупность параметров sortBy и sortDir, но имеет больший приоритет).

Для сортировки в случайном порядке значение параметра orderBy будет «RAND()».

&sortBy

Критерий сортировки без направления сортировки.

&order

&sortDir

Синоним параметра order, но имеет больший приоритет. Если установлены 2 параметра order и sortDir, то будет использоваться значение параметра sortDir.

Сортировка по TV-параметрам

&tvSortType

Правила приведения типов TV-параметров при сортировке.

Возможные значения (перечисляются через запятую в том порядке, в котором указаны имена TV в параметре orderBy):

&tvSortWithDefault

Фильтрация

&showNoPublish

Вывод удаленных или не опубликованных ресурсов (используется только в контроллерах на базе site_content)

&filters

Правила для фильтрации документов.

&filter_delimiter

Разделитель фильтров для режима containsOne.

Выборка по тэгам

&tagsData

Строка определяющая источник тэгов.

Дополнительные данные

&urlScheme

Схема генерации URL

&dateSource

Поле документа в котором располагается дата.

&dateFormat

Правила форматирования даты (format) для PHP функции strftime.

В качестве источника даты используется параметр dateSource. Помимо этого учитывается смещение даты на сервере (смотрите системный параметр server_offset_time). Таким образом, можно использовать персонализованную подстановку времени в зависимости от часового пояса пользователя.

&summary

Правила обработки текстов для формирования краткого описания. Загружает экстендер summary. В контроллере site_content есть дополнительное правило для обрабатываемого текста: по умолчанию на обработку отправляется поле content. Но если поле introtext не пустое, то текст именно из этого поля будет передан в дополнение summary. Аналогичным образом себе ведет и контроллер onetable.

&introField

Имя поля для источника краткого описания текста из contentField. Используется только если загружен экстендер summary.

&contentField

Имя поля в котором хранится основной текст документа. Используется только если загружен экстендер summary

Экранирование значений полей. Имена полей доступны в шаблонах через плейсхолдеры с префиксом e: [+e.pagetitle+], [+e.longtitle+].

&jotcount

Добавляет в выборку количество комментариев JotX с помощью экстендера jotcount.

Источник

Параметры выборки

Основные параметры

controller

Задает класс для выборки данных. Базовые классы (расположены в папке DocLister/core/controller/ ):

idType

Список документов подставляемых в запрос будет выбран из параметра, имя которого совпадает со значением данного параметра.

parents

Выборка документов на основании списка родительских документов.

documents

Выборка произвольных документов.

ignoreEmpty

display

Максимальное число документов при выборке.

queryLimit

Максимальное число документов при выборке.

depth

Глубина выборки с использованием параметра parents.

offset

start

Число документов пропускаемых с начала выборки. Складывается со значением offset автоматически устанавливаемым при пагинации.

total

Максимальное число документов отображаемое на одной странице в выборке.

addWhereList

Дополнительные условия выборки документов. Любая строка удовлетворяющая требованиями строки для подстановки в WHERE блок SQL запроса.

showParent

selectFields

Имена полей, включаемых в выборку.

groupBy

Группировка результатов по какому-нибудь полю.

Параметры выборки для произвольных таблиц (контроллер onetable )

table

idField

parentField

Выборка с TV-параметрами

tvPrefix

Префикс для плейсхолдеров создаваемых из имен TV-параметров.

tvList

Список TV-параметров, которые должны быть в выборке.

renderTV

TV-параметры, значение которых необходимо подготовить к отображению в соответствии с установленными виджетами. TV параметры которых нет в значении параметра tvList будут проигнорированы.

Сортировка

sortType

Значение sortType определяет режим сортировки. Если не задано, то производится сортировка по критериям, указанным в параметрах orderBy или sortBy и sortDir

orderBy

sortBy

Критерий сортировки без направления сортировки.

order

sortDir

Сортировка по TV-параметрам

tvSortType

Правила приведения типов TV-параметров при сортировке.

Возможные значения (перечисляются через запятую в том порядке, в котором указаны имена TV в параметре orderBy ):

Читайте также:  К чему снятся цветы гладиолусы во сне женщине

tvSortWithDefault

В силу особенностей движка (TV-параметры значения которых совпадают со значениями по умолчанию не сохраняются в отдельную таблицу), сортировка записей может быть не корректа, если значение по умолчанию отличается от пустой стрки. Поэтому рекомендуется дополнительно указывать ТВ параметры у которых принудительно указано значение по умолчанию.

Фильтрация

showNoPublish

Вывод удаленных или не опубликованных ресурсов (используется только в контроллерах на базе site_content )

filters

Правила для фильтрации документов.

Пример строки

filter_delimiter

Выборка по тэгам

tagsData

Строка определяющая источник тэгов.

Дополнительные данные

urlScheme

Схема генерации URL

dateSource

Поле документа в котором располагается дата.

dateFormat

summary

Правила обработки текстов для формирования краткого описания.

introField

contentField

Имя поля в котором хранится основной текст документа. Используется только если загружен экстендер summary

jotcount

Источник

DocLister: Разработчикам

DocLister: Разработчикам

Контроллеры

Имя класса расположенного в файле php файле должно заканчиваться на DocLister, а сам класс должен быть унаследован от абстрактного класса DocLister.

В параметре dir можно указать пусть от корня сайта к папке с контроллером.

Экстендеры

Экстендеры могут загружаться из контроллера или с помощью параметра extenders, в котором перечислены имена файлов *.extender.inc из папки /core/extender/

Загружаемый экстендер должен быть классом имя которого должно начинаться с имени экстендера и заканчиваться на _DL_Extender. Помимо этого, загружаемый экстендер должен быть унаследован от абстрактного класса extDocLister.

Фильтры

Правила фильтрации можно найти в файле *.filter.php по имени фильтра из папки /core/filter/. Класс в файле должен быть унаследован от абстрактного гласса filterDocLister, а само имя должно заканчиваться на _DL_filter.

Приведение типов TV-параметров

Пример в контроллере site_content:

Сохранение объекта DocLister

Это может быть удобно, когда один и тот же список необходимо шаблонизировать 2 раза.

Или, например, нужно получить массив ID документов, которые задействованы в выводе

Использование шаблонизатора DocLister в своих сниппетах

Подключив класс DLTemplate вы уже можете пользоваться шаблонизатором, который:

Обычная шаблонизация

Подмена шаблона у документа

Для упрощения восприятия, весь процесс настройки ТВ параметров будет упущен. Поэтому представим, что у нас имеется:

Создаем плагин для событий OnLoadWebDocument и OnLoadWebPageCache

Использовать подмену шаблонов может быть удобно, если вы редактируете сайт на горячую (без разворачивания девелоперских версий).

Источник

Обработка данных перед выводом

Чаще всего полученные данные выводятся не в чистом виде. Например, требуется выполнение при выводе каких-либо условий или обработок (вывод превью для картинки, пересчет цены, форматирование значений).

Традиционным способом в MODX является вызов сниппетов в шаблонах вывода или использование модификаторов (phx). Такой подход часто используется новичками в силу простоты, но при этом увеличивается нагрузка на парсер и базу данных.

В DocLister предусмотрена возможность предварительной обработки данных средствами PHP с помощью параметра prepare.

Значением параметра prepare может быть:

Можно задавать несколько значений для последовательных обработок.

Использование сниппетов

Для того, чтоб получить значение параметров из вызова сниппета используйте конструкцию:

Данная конструкция позволяет получить значения параметра ‘parameter_name’ из вызова сниппета.

Использование методов класса

Значение параметра в этом случае: DLprepare::prepare

Аналогичным образом можно использовать анонимные функции.

Примеры из блога Agel Nash

Пример 1

Итак, представим, что у нас есть некий вызов DocLister’a:

Где tplChunk это ни что иное, как:

Внутри чанка tplChunk имеется вложенный вызов if (допустим тот, что был указан в начале топика). Что мы делаем?

Добавляем к вызову DocLister параметр &prepare= test (можно и не тест, а любое другое значение).

Создаем сниппет с именем test (ну или с тем именем, которое было указано в параметре prepare)

В сниппете пишем такой код:

Читайте также:  что необходимо для въезда в россию гражданам россии

Вы конечно можете вместо runSnippet написать и:

Но еще раз вспомним почему это плохо: pagetitle может содержать символы об которые запнется парсер modx. Так можно написать только в том случае, если pagetitle может содержать вызов сниппета (но это оооочень редкий случай + есть другие способы для обработки вложенных modx тегов)! Но вернемся к нашим баранам.

Избавившись от вложенного сниппета теперь можно спокойно избавиться от чанка tplChunk и вынести шаблон прямо в вызов DocLister’a:

Пример №2

Этот пример будет сложнее для понимания. Но он еще более наглядно демонстрирует преимущество параметра prepare.

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

Упростим немного эту задачку переместив в TV-параметр count заказываемое количество позиций. А саму корзину выведем точным перечислением ID документов. Таким образом вызов принимает следующий вид:

А чанк ListShop содержит такой код:

Если сниппет DocInfo всем знаком, то сниппет FullPrice это ни что иное, как банальное перемножение двух чисел:

Чтобы стало понятнее, вот так выглядит дерево ресурсов:

Т.к. это корзина, то все вызовы сниппетов делаем не кешированными и смотрим на результат (меня интересует общее число запросов): 12 SQL запросов для решения такой плевой задачи.

Пробуем теперь сделать тоже самое при помощи prepare сниппета.

fullPrice это ни что иное, как банальное перемножение 2 числе (цены и количества). Согласитесь, нет необходимости для такой банальной операции создавать/вызывать еще 1 сниппет, когда можно произвести расчет прямо как говорится «не отходя от кассы».

category запускает тот же самый DocInfo при помощи runSnippet (т.е. ничего не поменялось).

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

Пример №3

Этот пример еще сложнее, но одновременно с этим еще более полезней и интересней.

Именно для этой цели в DocLister, а если быть точнее в экстендере prepare есть 2 метода: getStore и setStore. Один сохраняет, а второй соответственно извлекает данные из памяти. Как только DocLister завершил свою работу, сохраненные блоки удаляются из памяти (массив автоматически очищается) и все работает дальше без каких-либо глюков, как это могло бы быть, если бы мы сохраняли временные данные в глобальный массив плейсхолдеров. Более того, при таком подходе и больших объемах потребовалось бы очень много памяти.

Ладно, хватит лирики. Давайте посмотрим как можно переписать сниппет prepare с учетом getStore и setStore:

Я не стал копипастить весь исходник, а только процитировал измененную часть. Но думаю тут и так понятно, что мы «обернули» вызов сниппета DocInfo в эти 2 функции. А в качестве уникального ключа указали currentParents[+parent+]. Таким образом, для формирований этой же страницы MODX-у потребовалось всего 7 SQL запросов.

Таким образом: сниппет prepare позволяет не только обрабатывать данные, но и исключить бесполезное повторное выполнение кода.

Обработка шаблона обертки

После того, как каждый документ обработан, DocLister пытается применить обертку ownerTPL. Порой бывает необходимо эту обертку дополнительно обработать и возможно подменить в зависимости от различных условий (кол-во выводимых документов, даты и т.п.).

Источник

Образовательный портал