pdoParser. Pdotools modx revo


pdoMenu / Сниппеты / pdoTools / docs.modx.pro

Сниппет генерации меню. Может заменять Wayfinder, и позволяет более гибко указывать параметры.

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

Существенный прирост скорости дает только при первом запуске, дальше Wayfinder не особо уступает, благодаря грамотному кэшированию.

Параметры

Название По умолчанию Описание
&parents Текущий ресурс Список родителей, через запятую, для поиска результатов. Если поставить 0 - выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки.
&level 0 (не ограниченно) Уровень генерируемого меню.
&resources Список ресурсов, через запятую, для вывода в результатах. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки.
&templates Список шаблонов, через запятую, для фильтрации результатов. Если id шаблона начинается с дефиса, ресурсы с ним исключается из выборки.
&where Массив дополнительных параметров выборки, закодированный в JSON.
&displayStart 0 Включить показ начальных узлов меню. Полезно при указании более одного «parents».
&context Ограничение выборки по контексту ресурсов.
&showHidden 0 Показывать ресурсы, скрытые в меню.
&showUnpublished 0 Показывать неопубликованные ресурсы.
&previewUnpublished 0 Включить показ неопубликованных документов, если у пользователя есть на это разрешение.
&hideSubMenus 0 Спрятать неактивные ветки меню.
&select Список полей для выборки, через запятую. Можно указывать JSON строку с массивом, например {"modResource":"id,pagetitle,content"}.
&sortby menuindex Любое поле ресурса для сортировки, включая ТВ параметр, если он указан в параметре &includeTVs, например {"tvname":"ASC", "pagetitle":"DESC"}. Можно указывать JSON строку с массивом нескольких полей. Для случайно сортировки укажите «RAND()»
&sortdir ASC Направление сортировки: по убыванию или возрастанию. Если оставить параметры &sortby и &sortdir пустыми, то сортировка будет идти по порядку ресурсов в &resources.
&limit 0 Ограничение количества результатов выборки. Можно использовать «0».
&offset 0 Пропуск результатов от начала. Необходимо использовать вместе с явно указанным &limit
&checkPermissions Укажите, какие разрешения нужно проверять у пользователя при выводе документов. Например &checkPermissions=`list`.
&countChildren 0 Точный подсчет количества дочерних ресурсов каждой категории и вывод их в плейсхолдер [[+children]]. Делает дополнительные запросы в БД, поэтому по умолчанию отключен.
&toPlaceholder Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем вместо вывода на экран.
&plPrefix wf. Префикс для выставляемых плейсхолдеров
&showLog 0 Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контекcте «mgr».
&fastMode 0 Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны.
&cache 0 Кэширование результатов работы сниппета.
&cacheTime 3600 Время актуальности кэша, в секундах.
&scheme -1 Схема формирования url, передаётся в modX::makeUrl(), поэтому возможные варианты нужно смотреть здесь. Особый тип uri подставляет значение uri ресурса, без запуска функции.
&useWeblinkUrl 1 Генерировать ссылку с учетом класса ресурса.
&rowIdPrefix Префикс для выставления идентификатора в чанк.
&hereId Id документа, текущего для генерируемого меню. Нужно указывать только если скрипт сам его неверно определяет, например при выводе меню из чанка другого сниппета.
&includeTVs Список ТВ параметров для выборки, через запятую. Например: «action,time» дадут плейсхолдеры [[+action]] и [[+time]].
&tvPrefix Префикс для ТВ параметров.

Параметры шаблонов

Эти параметры устанавливают чанки, которые содержат шаблоны для генерации меню.

Название Описание
&tplOuter Чанк обертка всего блока меню. По умолчанию: @INLINE <ul[[+classes]]>[[+wrapper]]</ul>
&tpl Имя чанка для оформления ресурса. Если не указан, то содержимое полей ресурса будет распечатано на экран. По умолчанию: @INLINE <li[[+classes]]><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li>
&tplParentRow Чанк оформления контейнера с потомками
&tplParentRowHere Чанк оформления текущей категории
&tplHere Чанк текущего документа
&tplInner Чанк обертки внутренних пунктов меню. Если пуст - будет использовать &tplOuter
&tplInnerRow Чанк обертка внутреннего пункта меню
&tplInnerHere Чанк обертка активного пункта меню
&tplParentRowActive Чанк оформления активной категории
&tplCategoryFolder Специальный чанк оформления категории. Категория - это документ с «isfolder = 1» и или нулевым шаблоном, или с атрибутом "rel=category"
&tplStart Чанк оформления корневого пункта, при условии, что включен &displayStart. По умолчанию: @INLINE <h3[[+classes]]>[[+menutitle]]</h3>[[+wrapper]]

Параметры CSS классов

Эти параметры задают значение плейсхолдера [[+classes]] для различных элементов меню.

Название Описание
&firstClass Класс для первого пункта меню. По умолчанию: first
&lastClass Класс последнего пункта меню. По умолчанию: last
&hereClass Класс для активного пункта меню. По умолчанию: active
&parentClass Класс категории меню.
&rowClass Класс одной строки меню.
&outerClass Класс обертки меню.
&innerClass Класс внутренних ссылок меню.
&levelClass Класс уровня меню. Например, если укажите «level», то будет «level1», «level2» и т.д.
&selfClass Класс текущего документа в меню.
&webLinkClass Класс документа-ссылки.

Примеры

Обычный вывод меню из корня сайта в один уровень:

[[pdoMenu? &parents=`0` &level=`1` ]]

Вывод с исключением определенных родителей и проверкой разрешений пользователя:

[[pdoMenu? &parents=`-10,-15` &level=`2` &checkPermissions=`load,list,view` ]]

Вывод меню сразу из двух родителей, с показом корневых точек:

[[pdoMenu? &parents=`10,15` &displayStart=`1` ]]

Вывод двух уровней документов с подсчетом количества вложенных ресурсов:

[[pdoMenu? &parents=`0` &level=`2` &tplInner=`@INLINE [[+wrapper]]` &tplParentRow=`@INLINE <li[[+classes]]><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a> ([[+children]])</li>[[+wrapper]]` &countChildren=`1` ]]

docs.modx.pro

pdoParser / Классы / pdoTools / docs.modx.pro

pdoParser является заменой класса modParser.

Обработка плейсхолдеров

Его задача - стараться быстро разобрать теги MODX без создания объектов, как это делает оригинальный парсер. pdoParser умеет работать только с простыми тегами, без фильтров и условий, то есть:

Специальные теги FastField были предложены Виталием Киреевым в одноимённом дополнении. После согласованию с автором, pdoParser был обучен работе с ними.

Он умеет:

Цифра после решетки - это id ресурса, от которого нужно выбрать данные.

Все эти теги pdoTools обрабатывает без создания объектов modElement, поэтому работает немного быстрее чем родные методы MODX. Если же плейсхолдер вызван с какими-то параметрами, то он уйдёт в родной modParser.

Шаблонизатор Fenom

С версии 2.0 в состав pdoTools входит шаблонизатор Fenom (анонс от автора на Хабре).

Работает только при включенном pdoParser и если разрешен в системных параметрах.

Возможности
Настройки

Порядок запуска шаблонизатора

Если включен pdoParser и системная опция pdotools_fenom_parser, то шаблонизатор запускается ровно вот здесь.

В этот момент все кэшированные чанки и сниппеты на странице обработаны (или загружены из кэша) и вы можете использовать вот такие конструкции:

{if $.get.test == 1} [[!pdoResources?parents=`0`]] {else} [[!pdoMenu?parents=`0`]] {/if}

То есть, в зависимости от $_GET['test'] на странице будет запущен или один сниппет или другой. Парсер MODX же запустил бы оба и результат выполнения одного неподходящего просто не показал.

Таким образом, вы можете реализовывать гораздо более сложную логику работы сайта даже с отключенными опциями pdotools_fenom_php и pdotools_fenom_modx. Понятное дело, что вызов тегов Fenom на страницах сайта никак не кэшируется.

Внутри чанков Fenom всегда выполняется в первую очередь, позволяя также разделять их содержимое для MODX, в зависимости от условий.

Кэширование чанков Fenom

По умолчанию этот функционал Fenom отключен, потому что по моим тестам, толку от него в MODX нет. Но, это на моих мелких и простых чанках, а у вас может быть что-то посложнее.

Поэтому вы можете включить системную настройку pdotools_fenom_cache и тогда скомпилированные шаблоны будут сохранены в /cache/default/fenom/ в зависимости от своего типа.

Чанки из БД кэшируются под своими id, а INLINE именуются как хэш от своего содержимого, то есть - путь к обычному чанку будет выглядеть как cache/default/fenom/chunk/90.cache.php, а к INLINE уже как cache/default/fenom/inline/35e115c27fdc3814b6f41a1015aa67e6.cache.php.

Отсюда следует, что нормальные чанки из БД кэшируются намертво, и обновляются только при очистке системного кэша, а INLINE чанки при изменении контента сохраняются под новым именем и весь кэш чистить не нужно.

Как это работает дальше?

При первом запуске с пустым кэшем pdoTools получает нужный чанк, определяет его тип и отдаёт в Fenom. Тот компилирует шаблон и сохраняет его во внутренний кэш pdoTools методом setStore(). Этот кэш находится в ОЗУ и сохраняется только на время выполнения скрипта, он нужен чтобы не компилировать 10 раз один и тот же чанк при выводе pdoResources.

А вот если включена опция pdotools_fenom_cache, то исходный код скомпилированного шаблона сохраняется на HDD сервера, и при следующем запуске Fenom уже не нужно его компилировать. Кэшер MODX отдаёт исходный код, из него получается объект Fenom\Render который передаётся в setStore() и оттуда уже работает.

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

Обычно выходит, что на маленьких и простых чанках (как у сниппетов pdoTools) выигрыша нет, а лишних файлов много, а вот на больших и сложных чанках (которые вы наверняка создадите, используя возможности Fenom) разница уже может быть. Время компиляции и работы с кэшем выводится в &showLog=`1`, так что каждый может проверить сам.

Примеры

Стандартный чанк tpl.Tickets.comments.wrapper из компонента Tickets

<div> [[+modx.user.id:isloggedin:is=`1`:then=` <span> <label for="comments-subscribe"> <input type="checkbox" name="" value="1" [[+subscribed:notempty=`checked`]] /> [[%ticket_comment_notify]] </label> </span> `:else=``]] <h5>[[%comments]] (<span>[[+total]]</span>)</h5> <div> <ol>[[+comments]]</ol> </div> <div> <div></div> <div></div> </div> </div>

Он же, переписанный для работы с Fenom

<div> {if $modx->user->isAuthenticated($modx->context->key)} <span> <label for="comments-subscribe"> <input type="checkbox" name="" value="1" {$subscribed != '' ? 'checked' : ''} /> {$modx->lexicon('ticket_comment_notify')} </label> </span> {/if} <h5>{$modx->lexicon('comments')} (<span>{$total}</span>)</h5> <div> <ol>{$comments}</ol> </div> <div> <div></div> <div></div> </div> </div>

docs.modx.pro

pdoNeighbors / Сниппеты / pdoTools / docs.modx.pro

Сниппет pdoNeighbors выводит предыдущие и следующие документы от указанного.

Умеет выводить по несколько соседей сразу, проверяет их статус (удалён, опубликован) и позволяет указать сортировку.

Вы можете выводить предыдущие/следующие документы по «menuindex», дате публикации или другому полю ресурса.

Параметры

Принимает все параметры pdoTools (за исключением чанков-шаблонов) и некоторые свои:

Параметр По умолчанию Описание
&id Текущий документ Идентификатор ресурса, относительно которого выводятся соседи.
&tplPrev см. ниже Чанк ссылки на предыдущий документ.
&tplUp см. ниже Чанк ссылки на родительский документ.
&tplNext см. ниже Чанк ссылки на следующий документ.
&tplWrapper см. ниже Чанк-обёртка, для заворачивания результатов. Понимает плейсхолдеры: [[+left]], [[+top]], [[+right]] и [[+log]]. Не работает вместе с параметром &toSeparatePlaceholders.
&toPlaceholder Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран.
&showLog 0 Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контекте «mgr».

Шаблоны

Шаблон По умолчанию
&tplPrev @INLINE <span><a href="/[[+uri]]">&larr; [[+menutitle]]</a></span>
&tplUp @INLINE <span>&uarr; <a href="/[[+uri]]">[[+menutitle]]</a></span>
&tplNext @INLINE <span><a href="/[[+uri]]">[[+menutitle]] &rarr;</a></span>
&tplWrapper @INLINE <div>[[+prev]][[+up]][[+next]]</div>

Примеры

По умолчанию сниппет выводит соседей, как они есть в дереве ресурсов, то есть, ориентируется на «menuindex»:

[[pdoNeighbors]]

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

[[pdoNeighbors? &id=`55` ]]

Сниппет отлично подходит для вывода ссылок на соседние новости (их лучше сортировать по дате публикации):

[[pdoNeighbors? &sortby=`publishedon` &sortdir=`asc` ]]

docs.modx.pro

pdoUsers / Сниппеты / pdoTools / docs.modx.pro

Сниппет для вывода пользователей сайта через pdoTools.

Формирует список пользователей сайта с учетом групп и ролей.

Параметры

Использует все общие параметры pdoTools за исключением специфичных для класса modResource, а так же свои собственные:

Название По умолчанию Описание
&groups Список групп пользователей, через запятую. Можно использовать имена и id. Если значение начинается с минуса (-), значит пользователь не должен присутствовать в этой группе.
&roles Список ролей пользователей, через запятую. Можно использовать имена и id. Если значение начинается с минуса (-), значит такой роли у пользователя быть не должно.
&users Список пользователей для вывода, через запятую. Можно использовать поля username и id. Если значение начинается с минуса (-), этот пользователь исключается из выборки.
&showInactive 0 Выводить в том числе и неактивных пользователей
&showBlocked 0 Выводить в том числе и блокированных пользователей
&returnIds Установите значение «1», чтобы вернуть строку со списком id ресурсов, вместо оформленных результатов. Все указанные шаблоны игнорируются.
&showLog 0 Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контекте «mgr».
&toPlaceholder Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран.
&wrapIfEmpty Включает вывод чанка-обертки &tplWrapper, даже если результатов нет.
&tplWrapper Чанк-обёртка, для заворачивания всех результатов. Понимает один плейсхолдер: [[+output]]. Не работает вместе с параметром &toSeparatePlaceholders.
Переопределенные параметры pdoTools
Название По умолчанию Описание
&class modUser Класс пользователя
&sortby modUser.id Любое поле пользователя для сортировки. Можно указывать JSON строку с массивом нескольких полей. Для случайно сортировки укажите «RAND()»
&sortdir ASC Направление сортировки: по убыванию «DESC» или возрастанию «ASC».

Все шаблоны по умолчанию пусты. Для вывода результата в виде HTML, нужно указать, как минимум, значение шаблона &tpl.

Примеры

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

[[!pdoUsers]]

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

[[!pdoUsers? &groups=`Authors` &tpl=`tpl.Authors.author` &sortdir=`asc` ]]

Можно комбинировать его с pdoPage\getPage:

[[!pdoPage? &element=`pdoUsers` &groups=`Authors` &tpl=`tpl.Authors.author` &sortdir=`asc` ]]

Встроенные чанки:

[[!pdoUsers? &roles=`Member` &tpl=`@INLINE <p>Имя - [[+fullname]], ID - [[+id]]</p>` &sortby=`id` &sortdir=`asc` ]]

Демо

Вывод авторов и друзей репозитория Simple Dream.

docs.modx.pro


Prostoy-Site | Все права защищены © 2018 | Карта сайта