Содержание
pdoMenu / Сниппеты / pdoTools / docs.modx.pro
Сниппет генерации меню. Может заменять Wayfinder, и позволяет более гибко указывать параметры.
Например, умеет строить меню сразу из нескольких родителей, отображая их как вместе, так и отдельными ветками.
Существенный прирост скорости дает только при первом запуске, дальше Wayfinder не особо уступает, благодаря грамотному кэшированию.
Параметры
По умолчанию pdoMenu принимает общие параметры pdoTools и некоторые свои:
Название | По умолчанию | Описание |
---|---|---|
&parents | Текущий ресурс | Список родителей для поиска результатов, через запятую. Если поставить &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-строку с массивом, например &select=`{«modResource»:»id,pagetitle,content»}` | |
&sortby | menuindex | Любое поле ресурса для сортировки, включая ТВ-параметр, если он указан в параметре &includeTVs, например &sortby=`{«tvname»:»ASC»,»pagetitle»:»DESC»}`. Можно указывать JSON-строку с массивом нескольких полей. Для случайной сортировки укажите &sortby=`RAND()` |
&sortdir | ASC | Направление сортировки: по убыванию или по возрастанию. Если оставить параметры &sortby и &sortdir пустыми, то сортировка будет идти по порядку ресурсов в &resources. |
&limit | 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 | Список ТВ-параметров для выборки, через запятую. Например &includeTVs=`action,time` дадут плейсхолдеры [[+action]] и [[+time]] . | |
&prepareTVs | Список ТВ-параметров, с файлами из источников медиа, для которых нужно сгенерировать полные пути. Если установить &prepareTVs=`1`, будут подготовлены все ТВ, указанные в &includeTVs. | |
&processTVs | Список ТВ-параметров, которые нужно обработать и вывести согласно их настроек в менеджере системы. Если установить &processTVs=`1`, будут обработаны все ТВ, указанные в &includeTVs. Замедляет работу. | |
&tvPrefix | Префикс для ТВ-параметров. |
Параметры шаблонов
Эти параметры устанавливают чанки, которые содержат шаблоны для генерации меню.
Название | Описание |
---|---|
&tplOuter | Чанк оформления всего блока меню. По умолчанию: @INLINE <ul [[+classes]]>[[+wrapper]]</ul> |
&tpl | Чанк оформления пункта меню. Если не указан, то содержимое полей ресурса будет распечатано на экран. По умолчанию: @INLINE <li [[+classes]]><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li> |
&tplHere | Чанк оформления текущего пункта меню. |
&tplStart | Чанк оформления корневого пункта, при условии, что включен &displayStart. По умолчанию: @INLINE <h3 [[+classes]]>[[+menutitle]]</h3>[[+wrapper]] |
&tplParentRow | Чанк оформления родителя с потомками, не подпадающего под условия &tplCategoryFolder . Например: @INLINE <li><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li> |
&tplParentRowHere | Чанк оформления текущего документа, если он содержит потомков. |
&tplParentRowActive | Чанк оформления родителей с потомками в активной ветке меню. |
&tplCategoryFolder | Специальный чанк оформления категории. Категорией считается родитель с потомками, у которого указан пустой шаблон или rel="category" в поле link_attributes . |
&tplInner | Чанк оформления всего блока подпунктов меню. Если пуст — будет использовать &tplOuter. Например: @INLINE <ul>[[+wrapper]]</ul> |
&tplInnerRow | Чанк оформления подпункта меню. Например: @INLINE <li><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li> |
&tplInnerHere | Чанк оформления активного подпункта меню. |
Параметры CSS классов
Эти параметры задают значение плейсхолдеров [[+classnames]]
и [[+classes]]
для различных элементов меню. Плейсхолдер [[+classnames]]
выводит только название класса без атрибута class=»», в отличие от плейсхолдера [[+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`
]]
Pdomenu modx revo параметры
Эти два сниппета используются для построения меню на основе дерева ресурсов Modx Revo. pdoMenu по сравнению с Wayfinder работает значительно шустрее, да и по функционалу и гибкости несомненно у последнего выигрывает. Поэтому на всех разрабатываемых мною сайтах, я постепенно стал отказываться от Wayfinder в пользу pdoMenu. Но поскольку их параметры изредка да отличаются, чтобы такой переход был безболезненным, в этой статье я решил пройтись по всем параметрам двух сниппетов, объединив схожие по назначению параметры в одну строку. Таким образом, если вы решите перейти с Wayfinder на pdoMenu, вам просто нужно будет заменить значение из первого столбика на второе. Впрочем справедливо и обратное утверждение, однако я пока что не встречал таких случаев, чтобы в этом была необходимость.
Основные параметры
Wayfinder (значение по умолчанию) | pdoMenu (значение по умолчанию) | Применение |
---|---|---|
Wayfinder (значение по умолчанию) | pdoMenu (значение по умолчанию) | Применение |
---|---|---|
Wayfinder (значение по умолчанию) | pdoMenu (значение по умолчанию) | Применение |
---|---|---|
Название | По умолчанию | Описание |
---|---|---|
&parents | Текущий ресурс | Список родителей для поиска результатов, через запятую. Если поставить &parents=`0` – выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки. |
&level | 0 (не ограниченно) | Уровень генерируемого меню. |
&resources | Список ресурсов для вывода в результатах, через запятую. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки. | |
&templates | Список шаблонов для фильтрации результатов, через запятую. Если id шаблона начинается с дефиса, ресурсы с ним исключается из выборки. | |
&where | Массив дополнительных параметров выборки, закодированный в JSON. | |
&displayStart | Включить показ начальных узлов меню. Полезно при указании более одного «parents». | |
&context | Ограничение выборки по контексту ресурсов. | |
&showHidden | Показывать ресурсы, скрытые в меню. | |
&showUnpublished | Показывать неопубликованные ресурсы. | |
&previewUnpublished | Включить показ неопубликованных ресурсов, если у пользователя есть на это разрешение. | |
&hideSubMenus | Спрятать неактивные ветки меню. | |
&select | Список полей для выборки, через запятую. Можно указывать JSON-строку с массивом, например &select=`<«modResource»:»id,pagetitle,content»>` | |
&sortby | menuindex | Любое поле ресурса для сортировки, включая ТВ-параметр, если он указан в параметре &includeTVs, например &sortby=`<«tvname»:»ASC»,»pagetitle»:»DESC»>`. Можно указывать JSON-строку с массивом нескольких полей. Для случайной сортировки укажите &sortby=`RAND()` |
&sortdir | ASC | Направление сортировки: по убыванию или по возрастанию. Если оставить параметры &sortby и &sortdir пустыми, то сортировка будет идти по порядку ресурсов в &resources. |
&limit | Ограничение количества результатов выборки. | |
&offset | Пропуск результатов от начала. Необходимо использовать вместе с явно указанным &limit | |
&checkPermissions | Укажите, какие разрешения нужно проверять у пользователя при выводе ресурсов, например &checkPermissions=`list`. | |
&countChildren | Точный подсчет количества дочерних ресурсов каждой категории и вывод их в плейсхолдер [[+children]] . Делает дополнительные запросы в БД, поэтому по умолчанию отключен. | |
&toPlaceholder | Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем вместо вывода на экран. | |
&plPrefix | wf. | Префикс для выставляемых плейсхолдеров. |
&showLog | Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контекcте «mgr». | |
&fastMode | Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны. | |
&cache | Кэширование результатов работы сниппета. | |
&cacheTime | 3600 | Время актуальности кэша, в секундах. |
&scheme | -1 | Схема формирования url, передаётся в modX::makeUrl(), поэтому возможные варианты нужно смотреть здесь. Особый тип uri подставляет значение uri ресурса, без запуска функции. |
&useWeblinkUrl | 1 | Генерировать ссылку с учетом класса ресурса. |
&rowIdPrefix | Префикс для выставления идентификатора в чанк. | |
&hereId | id текущего ресурса для генерируемого меню. Нужно указывать только если скрипт сам его неверно определяет, например при выводе меню из чанка другого сниппета. | |
&includeTVs | Список ТВ-параметров для выборки, через запятую. Например &includeTVs=`action,time` дадут плейсхолдеры [[+action]] и [[+time]] . | |
&prepareTVs | Список ТВ-параметров, с файлами из источников медиа, для которых нужно сгенерировать полные пути. Если установить &prepareTVs=`1`, будут подготовлены все ТВ, указанные в &includeTVs. | |
&processTVs | Список ТВ-параметров, которые нужно обработать и вывести согласно их настроек в менеджере системы. Если установить &processTVs=`1`, будут обработаны все ТВ, указанные в &includeTVs. Замедляет работу. | |
&tvPrefix | Префикс для ТВ-параметров. |
Параметры шаблонов
Эти параметры устанавливают чанки, которые содержат шаблоны для генерации меню.
Название | Описание |
---|---|
&tplOuter | Чанк оформления всего блока меню. По умолчанию: @INLINE |
&tpl | Чанк оформления пункта меню. Если не указан, то содержимое полей ресурса будет распечатано на экран. По умолчанию: @INLINE [[+menutitle]][[+wrapper]] |
&tplHere | Чанк оформления текущего пункта меню. |
&tplStart | Чанк оформления корневого пункта, при условии, что включен &displayStart. По умолчанию: @INLINE |
[[+menutitle]]
[[+wrapper]]
[[+menutitle]][[+wrapper]]
[[+menutitle]][[+wrapper]]
Параметры CSS классов
Эти параметры задают значение плейсхолдеров [[+classnames]] и [[+classes]] для различных элементов меню. Плейсхолдер [[+classnames]] выводит только название класса без атрибута , в отличие от плейсхолдера [[+classes]] .
Название | Описание |
---|---|
&firstClass | Класс для первого пункта меню. По умолчанию: first |
&lastClass | Класс последнего пункта меню. По умолчанию: last |
&hereClass | Класс для активного пункта меню. По умолчанию: active |
&parentClass | Класс категории меню. |
&rowClass | Класс пункта меню. |
&outerClass | Класс обертки блока меню. |
&innerClass | Класс обертки блока подпунктов меню. |
&levelClass | Класс уровня меню. Например если укажите «level», то будет «level1», «level2» и т.д. |
&selfClass | Класс текущего ресурса в меню. |
&webLinkClass | Класс ресурса-ссылки. |
Примеры
Обычный вывод меню из корня сайта в один уровень:
Вывод с исключением определенных родителей и проверкой разрешений пользователя:
Вывод меню сразу из двух родителей, с показом корневых точек:
Вывод двух уровней ресурсов с подсчетом количества вложенных:
Меню с дополнительным пунктом в чанке, без ссылки на страницу:
Сниппет генерации меню. Может заменять Wayfinder, и позволяет более гибко указывать параметры.
Например, умеет строить меню сразу из нескольких родителей, отображая их как вместе, так и отдельными ветками.
Существенный прирост скорости дает только при первом запуске, дальше Wayfinder не особо уступает, благодаря грамотному кэшированию.
Параметры
По умолчанию pdoMenu принимает общие параметры pdoTools и некоторые свои:
Название | По умолчанию | Описание |
---|---|---|
&parents | Текущий ресурс | Список родителей для поиска результатов, через запятую. Если поставить &parents=`0` – выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки. |
&level | 0 (не ограниченно) | Уровень генерируемого меню. |
&resources | Список ресурсов для вывода в результатах, через запятую. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки. | |
&templates | Список шаблонов для фильтрации результатов, через запятую. Если id шаблона начинается с дефиса, ресурсы с ним исключается из выборки. | |
&where | Массив дополнительных параметров выборки, закодированный в JSON. | |
&displayStart | Включить показ начальных узлов меню. Полезно при указании более одного «parents». | |
&context | Ограничение выборки по контексту ресурсов. | |
&showHidden | Показывать ресурсы, скрытые в меню. | |
&showUnpublished | Показывать неопубликованные ресурсы. | |
&previewUnpublished | Включить показ неопубликованных ресурсов, если у пользователя есть на это разрешение. | |
&hideSubMenus | Спрятать неактивные ветки меню. | |
&select | Список полей для выборки, через запятую. Можно указывать JSON-строку с массивом, например &select=`<«modResource»:»id,pagetitle,content»>` | |
&sortby | menuindex | Любое поле ресурса для сортировки, включая ТВ-параметр, если он указан в параметре &includeTVs, например &sortby=`<«tvname»:»ASC»,»pagetitle»:»DESC»>`. Можно указывать JSON-строку с массивом нескольких полей. Для случайной сортировки укажите &sortby=`RAND()` |
&sortdir | ASC | Направление сортировки: по убыванию или по возрастанию. Если оставить параметры &sortby и &sortdir пустыми, то сортировка будет идти по порядку ресурсов в &resources. |
&limit | Ограничение количества результатов выборки. | |
&offset | Пропуск результатов от начала. Необходимо использовать вместе с явно указанным &limit | |
&checkPermissions | Укажите, какие разрешения нужно проверять у пользователя при выводе ресурсов, например &checkPermissions=`list`. | |
&countChildren | Точный подсчет количества дочерних ресурсов каждой категории и вывод их в плейсхолдер [[+children]] . Делает дополнительные запросы в БД, поэтому по умолчанию отключен. | |
&toPlaceholder | Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем вместо вывода на экран. | |
&plPrefix | wf. | Префикс для выставляемых плейсхолдеров. |
&showLog | Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контекcте «mgr». | |
&fastMode | Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны. | |
&cache | Кэширование результатов работы сниппета. | |
&cacheTime | 3600 | Время актуальности кэша, в секундах. |
&scheme | -1 | Схема формирования url, передаётся в modX::makeUrl(), поэтому возможные варианты нужно смотреть здесь. Особый тип uri подставляет значение uri ресурса, без запуска функции. |
&useWeblinkUrl | 1 | Генерировать ссылку с учетом класса ресурса. |
&rowIdPrefix | Префикс для выставления идентификатора в чанк. | |
&hereId | id текущего ресурса для генерируемого меню. Нужно указывать только если скрипт сам его неверно определяет, например при выводе меню из чанка другого сниппета. | |
&includeTVs | Список ТВ-параметров для выборки, через запятую. Например &includeTVs=`action,time` дадут плейсхолдеры [[+action]] и [[+time]] . | |
&prepareTVs | Список ТВ-параметров, с файлами из источников медиа, для которых нужно сгенерировать полные пути. Если установить &prepareTVs=`1`, будут подготовлены все ТВ, указанные в &includeTVs. | |
&processTVs | Список ТВ-параметров, которые нужно обработать и вывести согласно их настроек в менеджере системы. Если установить &processTVs=`1`, будут обработаны все ТВ, указанные в &includeTVs. Замедляет работу. | |
&tvPrefix | Префикс для ТВ-параметров. |
Параметры шаблонов
Эти параметры устанавливают чанки, которые содержат шаблоны для генерации меню.
Название | Описание |
---|---|
&tplOuter | Чанк оформления всего блока меню. По умолчанию: @INLINE |
&tpl | Чанк оформления пункта меню. Если не указан, то содержимое полей ресурса будет распечатано на экран. По умолчанию: @INLINE [[+menutitle]][[+wrapper]] |
&tplHere | Чанк оформления текущего пункта меню. |
&tplStart | Чанк оформления корневого пункта, при условии, что включен &displayStart. По умолчанию: @INLINE |
[[+menutitle]]
[[+wrapper]]
[[+menutitle]][[+wrapper]]
[[+menutitle]][[+wrapper]]
Параметры CSS классов
Эти параметры задают значение плейсхолдеров [[+classnames]] и [[+classes]] для различных элементов меню. Плейсхолдер [[+classnames]] выводит только название класса без атрибута , в отличие от плейсхолдера [[+classes]] .
Название | Описание |
---|---|
&firstClass | Класс для первого пункта меню. По умолчанию: first |
&lastClass | Класс последнего пункта меню. По умолчанию: last |
&hereClass | Класс для активного пункта меню. По умолчанию: active |
&parentClass | Класс категории меню. |
&rowClass | Класс пункта меню. |
&outerClass | Класс обертки блока меню. |
&innerClass | Класс обертки блока подпунктов меню. |
&levelClass | Класс уровня меню. Например если укажите «level», то будет «level1», «level2» и т.д. |
&selfClass | Класс текущего ресурса в меню. |
&webLinkClass | Класс ресурса-ссылки. |
Примеры
Обычный вывод меню из корня сайта в один уровень:
Вывод с исключением определенных родителей и проверкой разрешений пользователя:
Вывод меню сразу из двух родителей, с показом корневых точек:
Вывод двух уровней ресурсов с подсчетом количества вложенных:
Параметры шаблонов pdoMenu | Зона разработки
Если вы читаете данную статью, значит, во-первых, вы знаете, что такое pdoMenu и pdoTools, а во-вторых, у вас возникли трудности с пониманием какой параметр шаблона для чего нужен.
Блондинка едет в машине. И по радио говорят: «Вы слушаете радио Европа плюс». Блондинка удивлённо: «Откуда они знают?»
Шаблонов у pdoMenu больше 10. Вот их полный список. Давайте теперь последовательно их разберём.
Параметр tplOuter
Это самый первый параметр в описании. Он содержит или название чанка или код инлайн-чанка, который будет контейнером для пунктов меню. По-умолчанию, в нём указано @INLINE <ul[[+classes]]>[[+wrapper]]</ul>
. Плейсхолдер [[+wrapper]]
будет заменён на пункты меню. А в плейсхолдер [[+classes]]
подставится значение параметра outerClass
, в котором указывается класс контейнера меню. В принципе, можно сразу указать нужный класс в шаблоне. В этом случае параметр outerClass
можно не использовать.
[[pdoMenu? &tplOuter = `@INLINE <ul>[[+wrapper]]</ul>` ... ]]
Параметр tpl
Он отвечает за формирование пунктов меню. В нём также указывается чанк (обычный или инлайн). По-умолчанию, он содержит шаблон элемента списка для контейнера, указанного в предыдущем параметре —
@INLINE <li[[+classes]]><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li>
Мы тут видим элемент li, который содержит ссылку на страницу. За ссылку отвечает плейсхолдер [[+link]]
, который формируется согласно параметру scheme
. Если вы используете относительные ссылки, то [[+link]]
можно безболезненно заменить на [[+uri]]
.
Плейсхолдеры [[+attributes]]
и [[+menutitle]]
содержат значение полей ресурса link_attribute
и menutitle
соответственно. Тут надо отметить, что если поле menutitle
пустое, то в плейсхолдер [[+menutitle]]
будет записано значение поля pagetitle
.
В плейсхолдере [[+classes]]
хранятся классы, указанные в параметрах классов, за исключением параметров outerClass
и innerClass
. Эти параметры используются в шаблонах-контейнерах, указанных в tplOuter
и tplInner
соответственно. В документации про классы описано достаточно понятно.
Запомните!
Есть одна ломающая логическую парадигму тонкость — параметр шаблона для активных элементов меню имеет суффикс «Active», параметры текущих элементов — суффикс «Here» (tplHere, tplParentHere). А у классов — для активного пункта предназначен параметр hereClass
со значением по-умолчанию «active», а для текущего пункта — параметр selfClass
.
Было бы логичнее назвать их по аналогии с шаблонами activeClass
и hereClass
соответственно.
На всякий случай поясню, что текущий пункт — это текущая открытая страница, а активные пункты — это текущая страница и её родители.
Плейсхолдер [[+wrapper]]
необходим для вывода следующего уровня меню. Если его убрать, то дочерние ресурсы показываться не будут, т.е. будет отображён только первый уровень меню.
В принципе этих двух параметров хватит для вывода меню. Достаточно указать родителя и уровень вложенности:
[[pdoMenu? &parents=`0` &level=`2` ]]
Параметр tplHere
Если вы хотите, чтобы текущий пункт меню отличался от остальных не только классом, но и разметкой (например, вместо ссылки должен быть текст), то в этом случае на помощь придёт параметр tplHere
.
[[pdoMenu? &parents=`0` &level=`2` &tplHere=`@INLINE <li [[+classes]]><span>[[+menutitle]]</span>[[+wrapper]]</li>` ]]
Параметр tplParentRow
Этот параметр используется в тех случаях, когда нужно выделить пункт меню, у которого есть подменю, и одним классом не обойтись. Например, добавить дополнительные элементы в разметку — треугольники, картинки и т.п.
У меня в разделе Документация этот параметр выглядит так
&tplParentRow = `@INLINE <li [[+classes]]><i></i> <a href="[[+link]]">[[+menutitle]]</a><div>[[+wrapper]]</div></li>`
Параметр tplParentRowHere
В этом параметре указывается шаблон для открытой страницы-контейнера. Если вы указали шаблон в tplParentRow
, то придётся определять шаблон и для этого параметра. В противном случае для текущего пункта меню будет использоваваться шаблон, указанный в параметре tplHere
, который используется для обычных пунктов, т.е. не контейнеров.
Параметр tplParentRowActive
Шаблон, указанный в данном параметре, используется для отображения всех родителей текущей страницы. Т.е. если вы выбрали ресурс, находящийся на 3-ем уровне, то родительские пункты меню первого и второго уровня отрисуются согласно шаблону, указанному в этом параметре. Если его не указывать, то будет использован шаблон из tplParentRow
(или tpl
, если не указан tplParentRow
).
Теперь давайте рассмотрим параметры для вложенного меню — tplInner
, tplInnerRow
и tplInnerHere
.
Параметр tplInner
Шаблон из этого параметра является обёрткой для вложенных пунктов меню. Обычно это ul элемент. Т.е. он аналогичен шаблону tplOuter
. И если его не указать, то tplOuter
и будет использоваться.
Параметр tplInnerRow
Является аналогом tpl
, но используется только для вложенных пунктов. Если не указан, то вместо него будет применён шаблон tpl
.
Параметр tplInnerHere
Заменяет шаблон из tplHere для вложенных пунктов.
Вот как это выглядит.
<ul> // tplOuter <li>Первый пункт. Содержит подменю. Активный // tplParentRowActive <ul> // tplInner <li>Первый подпункт, текущий</li> // tplInnerHere <li>Второй подпункт</li> // tplInnerRow </ul> </li> <li>Второй пункт. Содержит подменю // tplParentRow <ul> // tplInner <li>Первый подпункт</li> // tplInnerRow <li>Второй подпункт</li> // tplInnerRow </ul> </li> <li>Третий пункт</li> // tpl </ul>
Параметр tplCategoryFolder
Этот параметр позволяет задать шаблон для отдельных пунктов меню. Вот что указано в документации —
Специальный чанк оформления категории. Категория — это документ с «isfolder = 1» и или нулевым шаблоном, или с атрибутом «rel=category»
Этот шаблон предназначен для каких-то специфических случаев.
Параметр levelClass
Это важный параметр. Он позволяет указать уровень пунктов меню через название класса. Т.е. если задать значение «level», то у элементов первого уровня будет класс «level1», у второго — «level2» и т.д. Это упрощает задачу оформления меню.
Надеюсь, стало более менее понятно.
1
21735
Документация по pdoMenu
Сниппет генерации меню. Может заменять Wayfinder, и позволяет более гибко указывать параметры.
Например, умеет строить меню сразу из нескольких родителей, отображая их как вместе, так и отдельными ветками.
Существенный прирост скорости дает только при первом запуске, дальше Wayfinder не особо уступает, благодаря грамотному кэшированию.
Параметры
По умолчанию pdoMenu принимает общие параметры pdoTools и некоторые свои:
Название | По умолчанию | Описание |
---|---|---|
&parents | Текущий ресурс | Список родителей для поиска результатов, через запятую. Если поставить &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-строку с массивом, например &select=`{«modResource»:»id,pagetitle,content»}` | |
&sortby | menuindex | Любое поле ресурса для сортировки, включая ТВ-параметр, если он указан в параметре &includeTVs, например &sortby=`{«tvname»:»ASC»,»pagetitle»:»DESC»}`. Можно указывать JSON-строку с массивом нескольких полей. Для случайной сортировки укажите &sortby=`RAND()` |
&sortdir | ASC | Направление сортировки: по убыванию или по возрастанию. Если оставить параметры &sortby и &sortdir пустыми, то сортировка будет идти по порядку ресурсов в &resources. |
&limit | 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 | Список ТВ-параметров для выборки, через запятую. Например &includeTVs=`action,time` дадут плейсхолдеры [[+action]] и [[+time]] . | |
&prepareTVs | Список ТВ-параметров, с файлами из источников медиа, для которых нужно сгенерировать полные пути. Если установить &prepareTVs=`1`, будут подготовлены все ТВ, указанные в &includeTVs. | |
&processTVs | Список ТВ-параметров, которые нужно обработать и вывести согласно их настроек в менеджере системы. Если установить &processTVs=`1`, будут обработаны все ТВ, указанные в &includeTVs. Замедляет работу. | |
&tvPrefix | Префикс для ТВ-параметров. |
Параметры шаблонов
Эти параметры устанавливают чанки, которые содержат шаблоны для генерации меню.
Название | Описание |
---|---|
&tplOuter | Чанк оформления всего блока меню. По умолчанию: @INLINE <ul [[+classes]]>[[+wrapper]]</ul> |
&tpl | Чанк оформления пункта меню. Если не указан, то содержимое полей ресурса будет распечатано на экран. По умолчанию: @INLINE <li [[+classes]]><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li> |
&tplHere | Чанк оформления текущего пункта меню. |
&tplStart | Чанк оформления корневого пункта, при условии, что включен &displayStart. По умолчанию: @INLINE <h3 [[+classes]]>[[+menutitle]]</h3>[[+wrapper]] |
&tplParentRow | Чанк оформления родителя с потомками, не подпадающего под условия &tplCategoryFolder . Например: @INLINE <li><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li> |
&tplParentRowHere | Чанк оформления текущего документа, если он содержит потомков. |
&tplParentRowActive | Чанк оформления родителей с потомками в активной ветке меню. |
&tplCategoryFolder | Специальный чанк оформления категории. Категорией считается родитель с потомками, у которого указан пустой шаблон или rel="category" в поле link_attributes . |
&tplInner | Чанк оформления всего блока подпунктов меню. Если пуст — будет использовать &tplOuter. Например: @INLINE <ul>[[+wrapper]]</ul> |
&tplInnerRow | Чанк оформления подпункта меню. Например: @INLINE <li><a href="[[+link]]" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li> |
&tplInnerHere | Чанк оформления активного подпункта меню. |
Параметры CSS классов
Эти параметры задают значение плейсхолдеров [[+classnames]]
и [[+classes]]
для различных элементов меню. Плейсхолдер [[+classnames]]
выводит только название класса без атрибута class=»», в отличие от плейсхолдера [[+classes]]
.
Название | Описание |
---|---|
&firstClass | Класс для первого пункта меню. По умолчанию: first |
&lastClass | Класс последнего пункта меню. По умолчанию: last |
&hereClass | Класс для активного пункта меню. По умолчанию: active |
&parentClass | Класс категории меню. |
&rowClass | Класс пункта меню. |
&outerClass | Класс обертки блока меню. |
&innerClass | Класс обертки блока подпунктов меню. |
&levelClass | Класс уровня меню. Например если укажите «level», то будет «level1», «level2» и т.д. |
&selfClass | Класс текущего ресурса в меню. |
&webLinkClass | Класс ресурса-ссылки. |
Примеры
Обычный вывод меню из корня сайта в один уровень:
[[pdoMenu?
&parents=`<span>0</span>`
&level=`<span>1</span>`
]]
Вывод с исключением определенных родителей и проверкой разрешений пользователя:
[[pdoMenu?
&parents=`-<span>10</span>,-<span>15</span>`
&level=`<span>2</span>`
&checkPermissions=`load,<span>list</span>,view`
]]
Вывод меню сразу из двух родителей, с показом корневых точек:
[[pdoMenu?
&parents=`<span>10</span>,<span>15</span>`
&displayStart=`<span>1</span>`
]]
Вывод двух уровней ресурсов с подсчетом количества вложенных:
[[pdoMenu?
&parents=`<span>0</span>`
&level=`<span>2</span>`
&tplInner=`@INLINE [[+wrapper]]`
&tplParentRow=`@INLINE <li [[+classes]]><a href=<span>"[[+link]]"</span> [[+attributes]]>[[+menutitle]]</a> ([[+children]])</li>[[+wrapper]]`
&countChildren=`<span>1</span>`
]]
pdoMenu как замена Wayfinder / Сниппеты / Modx Revolution / Технический блог веб-разработчика
Эти два сниппета используются для построения меню на основе дерева ресурсов Modx Revo. pdoMenu по сравнению с Wayfinder работает значительно шустрее, да и по функционалу и гибкости несомненно у последнего выигрывает. Поэтому на всех разрабатываемых мною сайтах, я постепенно стал отказываться от Wayfinder в пользу pdoMenu. Но поскольку их параметры изредка да отличаются, чтобы такой переход был безболезненным, в этой статье я решил пройтись по всем параметрам двух сниппетов, объединив схожие по назначению параметры в одну строку. Таким образом, если вы решите перейти с Wayfinder на pdoMenu, вам просто нужно будет заменить значение из первого столбика на второе. Впрочем справедливо и обратное утверждение, однако я пока что не встречал таких случаев, чтобы в этом была необходимость.
Основные параметры
Wayfinder (значение по умолчанию) | pdoMenu (значение по умолчанию) | Применение |
---|---|---|
&startId=`[[*id]]`
|
&parents=`[[*id]]`
|
Wayfinder. В качестве параметра указывается ресурс, от начала которого будет построено меню. 0 — означает что от самого корня, ни один ресурс не будет пропущен.
pdoMenu. В parents через запятую можно указывать несколько родителей. Если имя ресурса начинается с «дефиса», то он исключается из выборки.
|
&displayStart=`0`
|
&displayStart=`0`
|
Включать ли самого родителя, от которого строится меню, в выборку. 0 — не включать.
|
&level=`0`
|
&level=`0`
|
Максимальный уровень вложенности. 0 — показывать все уровни.
|
&ignoreHidden=`0`
|
&showHidden=`0`
|
Игнировать ли настройку ресурса — «Не показывать в меню». 0 — не игнорировать.
|
&ph=`0`
|
&toPlaceholder
|
Если значение не пусто, то все данные будут сохранены в плэйсхолдер, вместо их вывода на экран.
|
&hideSubMenus=`0`
|
&hideSubMenus=`0`
|
Прятать неактивные ветки меню. 0 — не прятать.
|
&rowIdPrefix=`0`
|
&rowIdPrefix
|
Если значение не пусто, то будет использоваться заданный префикс, который будет указан перед id документа.
|
&useWeblinkUrl=`1`
|
&useWeblinkUrl=`1`
|
Генерировать ссылку на ресурс или нет. Станет доступна в плэйсхолдере [[+link]].
|
&includeDocs
|
&resources
|
pdoMenu. Если значение не пусто, то в меню будут выведены только указанные ID ресурсов. Указываются через запятую. Если ID ресурса начинается с дефиса, то он исключается из выборки.
Wayfinder. За выборку определённых ресурсов отвечает параметр &includeDocs, за исключение — &excludeDocs.
|
&cacheResults
|
&cache=`0`
|
Кэшировать ли результаты сниппета. 0 — не кэшировать, 1 — кэшировать.
|
&cacheTime=`3600`
|
&cacheTime=`3600`
|
Время хранения кэша, если включено кэширование результатов работы сниппета.
|
&contexts
|
&context
|
Если не пусто, то выборка ограничивается по заданному контексту.
|
&scheme=`-1`
|
&scheme=`-1`
|
Схема формирования URL:
|
&sortBy
|
&sortby=`menuindex`
|
Поле, по которому будет производиться сортировка.
|
&where
|
&where
|
JSON строка, в которой задаются параметры для выборки данных. Например: &where=`[{«class_key:!=»: «msCategory»}]` То есть, не выводить те ресурсы, которые являются категориями Minishop.
|
&hereId
|
&hereId
|
ID итерируемого (который обрабатывается именно сейчас) документа. Используется в тех случаях, когда сам сниппет по каким-то причинам определяет его неправильно.
|
&hereTpl
|
&tplHere
|
Чанк текущего (активного) документа.
|
Параметры шаблонов
Wayfinder (значение по умолчанию) | pdoMenu (значение по умолчанию) | Применение |
---|---|---|
&outerTpl
|
&tplOuter=`@INLINE <ul[[+classes]]>[[+wrapper]]</ul>`
|
Чанк-обёртка всех пунктов меню.
|
&rowTpl
|
&tpl=`@INLINE <li[[+classes]]><a href=»[[+link]]» [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li>`
|
Чанк оформления пункта меню.
|
&startItemTpl
|
&tplStart=`@INLINE <h3[[+classes]]>[[+menutitle]]</h3>[[+wrapper]]`
|
Чанк оформления корневого пункта меню, при условии что активирован параметр displayStart.
|
&parentRowHereTpl
|
&tplParentRowHere
|
Чанк оформления текущего ресурса, при условии что он содержит дочерние ресурсы.
|
&parentRowTpl
|
&tplParentRow
|
Чанк оформления ресурса-контейнера с потомками.
|
&hereTpl
|
&tplHere
|
Чанк текущего (активного) документа.
|
&innerTpl
|
&tplInner
|
Чанк внутренней обёртки, которая используется при выводе подменю. Удобно, когда внутреннему ul мы хотим задать какой-то иной класс.
|
&innerRowTpl
|
&tplInnerRow
|
Чанк оформления пункта меню, который в свою очередь находится внутри внутреннего ul.
|
&innerHereTpl
|
&tplInnerHere
|
Чанк оформления активного пункта меню, который в свою очередь находится внутри внутреннего ul.
|
&activeParentRowTpl
|
&tplParentRowActive
|
Чанк оформления активного ресурса-контейнера с потомками.
|
&categoryFoldersTpl
|
&tplCategoryFolder
|
Чанк оформления категории. Под категорией подразумевается ресурс-контейнер, у которого пустой шаблон или присутствует атрибут rel=category.
|
Параметры CSS классов
Wayfinder (значение по умолчанию) | pdoMenu (значение по умолчанию) | Применение |
---|---|---|
&firstClass
|
&firstClass=`first`
|
Класс для первого пункта в меню.
|
&lastClass=`last`
|
&lastClass=`last`
|
Класс для последнего пункта в меню.
|
&hereClass=`active`
|
&hereClass=`active`
|
Класс для активного пункта меню (включая все меню верхнего уровня).
|
&selfClass
|
&selfClass
|
Класс для активного пункта меню (но не для всей цепочки).
|
&parentClass=`parent`
|
&parentClass
|
Класс для пункта меню, который является контейнером и имеет детей.
|
&rowClass
|
&rowClass
|
Класс для каждой строки меню.
|
&levelClass
|
&levelClass
|
Класс для каждого уровня меню. Если указать level, то будет сгенерировано level1, level2, level3 и т. д.
|
&outerClass
|
&outerClass
|
Класс для обёртки меню.
|
&innerClass
|
&innerClass
|
Класс для внутренних пунктов меню.
|
&webLinkClass
|
&webLinkClass
|
Класс для пункта меню типа «Ссылка».
|
Примеры работы
Для того чтобы построить самое простое меню, которое выведет пункты меню только первого уровня от корня, достаточно вызвать снипет так:
[[pdoMenu? &parents=`0` &level=`1`]]
А вот и пример того, насколько сниппет вообще может быть гибким:
[[!pdoMenu?
&parents=`2`
&level=`2`
&tplOuter=`@INLINE<ul>[[+wrapper]]</ul>`
&tplInner=`@INLINE<ul>[[+wrapper]]</ul>`
&tplParentRow=`@INLINE <li><a href="[[+link]]"><span>[[+menutitle]]</span></a>[[+wrapper]]</li>`
&hereClass=`selected`
]]
Фактически здесь мы кастомизировали обёртку как для первого, так и второго уровня вложенности.
Однако, это лишь малая часть того, как можно использовать сниппет — благодаря его гибкости, вариантов может быть бесконечно много.
Меню в MODX с помощью компонента pdoMenu — LOCO.RU
pdoMenu позволяет более гибко указывать параметры, чем Wayfinder. Например, формировать меню сразу из нескольких родителей. Смотрите возможные параметры pdoMenu.
Устанавливаем пакет PdoTools (Приложения->Установщик).
Далее вызываем pdoMenu в шаблоне (обычно в чанке header).
[[pdoMenu? &level=`1` &parents=`2` &outerClass=`nav`]]
Где:
-
&level=`1` — уровень вложенности (в данном случае вложенности нет) -
&parents=`2` — id родителя пунктов меню (если нет, то 0) -
&outerClass=`nav` — добавляем класс к меню (присваивается в ul)
Если нужно вывести не все ресурсы в меню, а только некоторые, то для этого есть параметр &resources
[[pdoMenu? &level=`1` &resources=`2,3,4,5` &parents=`2` &outerClass=`nav`]]
Или если нужно исключить один ресурс:
[[pdoMenu? &level=`1` &resources=`-3` &parents=`2` &outerClass=`nav`]]
Можно выводить пункты сразу из нескольких родителей:
[[pdoMenu? &parents=`2,6` &displayStart=`1`]]
Пример организации выпадающего многоуровневого меню в MODX с помощью pdoMenu
1. html-основа нашего меню будет такая
<div> <ul> <li><a href='#'><span>Ленты</span></a> <ul> <li><a href='#'><span>Ленты 1</span></a> <ul> <li><a href='#'><span>Ленты 1.1</span></a></li> <li><a href='#'><span>Ленты 1.2</span></a></li> </ul> </li> </ul> </li> <li><a href='#'><span>Фетр</span></a> <ul> <li><a href='#'><span>Фетр 1</span></a></li> <li><a href='#'><span>Фетр 2</span></a></li> </ul> </li> <li><a href='index.html'><span>Декупаж</span></a></li> </ul> </div>
Переменные шаблона TV в CMS MODX
Статья, в которой рассмотрим назначение TV параметров и основные принципы работы с ними в MODX Revolution.
Что такое переменные шаблона (TV)
По умолчанию любой ресурс в MODX Revolution имеет определённый набор полей: pagetitle (заголовок), content (содержимое), description (описание) и т.д.
Но кроме встроенных полей с каждым ресурсом можно ещё связать (добавить к нему) любое количество других полей. Осуществляются эти действия в MODX Revolution посредством TV переменных. Связывание TV параметров с ресурсами выполняется не напрямую, а через шаблоны. Т.е. для того чтобы дополнительное поле появилось у ресурса, соответствующий TV параметр должен быть связан с его шаблоном. Из-за этого данные переменные и называются TV, т.е. переменными шаблона (Template Variable).
Создание TV (дополнительных полей)
Рассмотрим, как в MODX Revolution с помощью TV-переменных можно расширить назначение стандартных ресурсов (документов). Например, разберём какие TV поля необходимо добавить к ресурсам, чтобы их можно было использовать, для представления книг на сайте.
В MODX создание TV параметров осуществляется очень просто, посредством выполнения следующих шагов:
- Войти в админку (менеджер) MODX Revolution.
- Перейти в левой панели во вкладку «Элементы» и нажать на кнопку «Новое дополнительное поле».
- В открывшейся странице ввести имя дополнительному полю, например,
authors
. Данное поле будем использовать для хранения авторов книги. - Перейти на вкладку «Параметры ввода» и указать необходимый формат данных, который будет определять тип значения, которое может быть помещено в этот TV параметр. Для TV переменной authors установим тип значения ввода, равный «текст».
- В секции «Параметры вывода» следует задать формат, в котором необходимо выводить данные из этого поля. Например, TV параметр
authors
будем выводить в формате текста. Для этого ему установим соответствующее значение в качестве значения параметра «Тип вывода». - В разделе «Доступно для шаблонов» необходимо выбрать те шаблоны, через которые TV поле появится у соответствующих ресурсов.
Для примера создадим ещё несколько TV параметров: release-year
(год выпуска), quantity-of-pages
(количество страниц), cover-photo-book
(фото обложки книги). Привяжем TV поля к тому же шаблону (например, шаблон книги).
Заполнение TV полей при создании или редактировании ресурсов
После создания TV полей они становятся доступными во время создания или редактирования соответствующих ресурсов. Располагаются TV-поля на страницах ресурсах по умолчанию во вкладке «Дополнительные поля».
Более удобного расположить TV поля на страницах определённых ресурсов можно с помощью инструмента MODX Revo «Настройка форм» (значок «Шестерёнка» в главном меню админки -> пункт «Настройка форм»).
Некоторый результат, который можно достигнуть путём применения определённого набора правил к соответствующим ресурсам (через шаблон) с помощью элемента MODX «Настройка форм».
Вывод TV (дополнительных полей)
В MODX вывод значения TV переменной, связанной с текущим ресурсом, осуществляется также как и любого другого поля этого ресурса.
Например, получим значение TV поля authors
у текущего ресурса (в шаблоне):
[[*authors]]
Рассмотрим ещё один пример. В котором разберём, как можно с помощью сниппета pdoResources
, организовать вывод всех дочерних ресурсов (по отношению к текущему ресурсу) вместе с их TV полями:
[[!pdoResources? &parents=`[[*id]]` &includeTVs=`authors,cover-photo-book,quantity-of-pages,release-year` &tpl=`@INLINE <h3><a href="[[~[[+id]]]]">[[+pagetitle]]</a></h3> <ul> <li>Автор(ы): [[+tv.authors]]</li> <li>Количество страниц: [[+tv.quantity-of-pages]]</li> <li>Год выпуска: [[+tv.release-year]]</li> </ul> <img src="/[[+tv.cover-photo-book]]" alt="Фото обложки книги [[+pagetitle]]"> ` ]]
То же самое действие, но уже с использованием сниппета getResources:
// вызов сниппета getResources [[!getResources? &parents=`[[*id]]` &includeTVs=`1` &tpl=`book` ]] // содержимое чанка book: <h3><a href="[[~[[+id]]]]">[[+pagetitle]]</a></h3> <ul> <li>Автор(ы): [[+tv.authors]]</li> <li>Количество страниц: [[+tv.quantity-of-pages]]</li> <li>Год выпуска: [[+tv.release-year]]</li> </ul> <img src="/[[+tv.cover-photo-book]]" alt="Фото обложки книги [[+pagetitle]]">
MODX — Использование в условии where TV переменных
Например, следующий код показывает, как можно выбрать книги (ресурсы), в зависимости от некоторого условия (поле автор должно содержать значение «Резиг»). Условия в сниппете pdoResources
задаются с помощью параметра where
.
[[!pdoResources? &parents=`[[*id]]` &includeTVs=`authors,cover-photo-book,quantity-of-pages,release-year` &tpl=`@INLINE <h3><a href="[[~[[+id]]]]">[[+pagetitle]]</a></h3> <ul> <li>Автор(ы): [[+tv.authors]]</li> <li>Количество страниц: [[+tv.quantity-of-pages]]</li> <li>Год выпуска: [[+tv.release-year]]</li> </ul> <img src="/[[+tv.cover-photo-book]]" alt="Фото обложки книги [[+pagetitle]]"> ` &where=`{"authors:LIKE":"%Резиг%"}` ]]
Сортировка ресурсов по TV полю
Для сортировки ресурсов в MODX Revo в зависимости от того какое значение имеет TV поле можно выполнить с помощью параметра сниппета pdoResources sortby.
Например, выведем книги по году выпуска (по убыванию):
[[!pdoResources? &parents=`[[*id]]` &includeTVs=`authors,cover-photo-book,quantity-of-pages,release-year` &tpl=`@INLINE <h3><a href="[[~[[+id]]]]">[[+pagetitle]]</a></h3> <ul> <li>Автор(ы): [[+tv.authors]]</li> <li>Количество страниц: [[+tv.quantity-of-pages]]</li> <li>Год выпуска: [[+tv.release-year]]</li> </ul> <img src="/[[+tv.cover-photo-book]]" alt="Фото обложки книги [[+pagetitle]]"> ` &sortby=`release-year` &sortdir=`DESC` ]]
Использование pdoMenu для создания главной панели навигации Bootstrap 3
Вызов Drop-in Snippet для использования с Bootstrap 3.
Опубликовано
09 мая, 2015 в 15:02:00
Уровень:
Новичок
Зависимости: Нет
Цель pdoMenu — стать заменой Wayfinder. Для большинства приложений пользователи могут найти это правдой, в то время как другие могут обнаружить несоответствия, которые могут вызвать некоторую путаницу.
Вызов сниппета
[[pdoMenu?
& displayStart = `1`
& родители = `0`
& resources = `-90`
& level = `1`
& sortBy = `menuindex`
& sortdir = `ASC`
& scheme = `full`
& hideSubMenus = `1`
& tpl = `@ INLINE Несоответствия (1.11.1-пл) При настройке вызова фрагмента выше я попытался использовать столько параметров, сколько необходимо для создания меню. Проблема в том, что некоторые атрибуты просто игнорируются, даже если они присутствуют в коде.
- & outerClass
- должен заменить заполнитель
+ классы
в & tplOuter
значениями, установленными во время выполнения с помощью параметра. Возвращается только classes = ""
. Если используется специальный фрагмент, отображаются значения. - & innerClass
- Также не работает, хотя первый, последний и активные классы появятся в заполнителе
+ классы
в @tpl
, как и ожидалось.
Преимущества
У pdoMenu много преимуществ. Возможность размещения шаблонов внутри Snippet Call или в файловой системе может рассматриваться как очень полезная для приложений, которые могут быть полезны тем, кто желает обойти необходимость в дереве элементов.
Front-end разработчики могут сохранять HTML-код на странице, облегчая создание нового макета.С другой стороны, разработчики пакетов могут хранить свои компоненты в файловой системе.
Банкноты
Даже с учетом несоответствий, я предпочитаю pdoMenu, а не Wayfinder и getResources из-за дополнительных инструментов, которые он включает. pdoResources также можно использовать для меню, макетов навигации и боковых меню.
Что такое pdoTools? (Часть 1)
После создания новой установки MODX следующим шагом часто является установка ряда дополнительных компонентов для добавления функциональности сайту.
Обычный набор всем известен:
- getResources для списка ваших документов
- getPage для нумерации списков
- Wayfinder для меню сборки
- Панировочные сухари для панировочных сухарей
- GoogleSitemap для карты сайта
Но можно заменить все одним пакетом: pdoTools!
Начнем с введения того, что может pdoTools.
9 фрагментов
Да, я серьезно. pdoTools содержит 9 сниппетов, которые могут выполнять практически любые функции обычного веб-сайта. И почти все они являются заменой другим популярным сниппетам.
pdoResources
pdoResources является заменой getResources.
Как и все другие сниппеты в pdoTools, он не использует объекты xPDO для представления ресурсов. Он работает напрямую с таблицами базы данных. Это делает его быстрее.
Вам не нужно преобразовывать даты ресурсов в метки времени, прежде чем вы сможете передать их в выходной фильтр «date».И он объединяет только необходимые телевизоры, поэтому вы должны указать их в свойстве & includeTVs
в виде списка, разделенного запятыми.
[[pdoResources?
& родители = `0`
& includeTVs = `my_tv1, my_tv2`
& tvPrefix = `tv.`
& processTVs = `1`
& includeContent = `1`
& showLog = `1`
]]
Одной из наиболее важных функций pdoTools является свойство & showLog
. Это позволяет вам проверить, насколько быстр фрагмент. Это медленный SQL-запрос или слишком сложный фрагмент? Свойство & showLog
поможет вам в этом разобраться.
Вторая важная особенность — соединения SQL. С помощью pdoResources вы можете создавать сложные запросы и выбирать только то, что вам нужно.
[[! PdoResources?
& родители = `0`
& class = `modResource`
& leftJoin = `{
"Родитель": {
"класс": "modResource",
"on": "modResource.parent = Parent.id"
},
"Создан": {
"класс": "modUserProfile",
"on": "modResource.createdby = CreatedBy.internalKey"
}
} `
& select = `{
«modResource»: «modResource.id, modResource.pagetitle ",
"Parent": "Parent.pagetitle as parent",
"CreatedBy": "CreatedBy.fullname как автор"
} `
& showLog = `1`
]]
В приведенном выше примере вам не нужно вызывать какие-либо фрагменты или фильтры вывода, чтобы получить родительский элемент ресурса или имя создателя. Насколько быстро это работает? Посмотрим на вывод журнала ..
Есть много других интересных функций, но это самые важные.
pdo Страница
pdoPage — это замена для getPage.Есть несколько отличий от getPage:
- Пустые страницы не отображаются. Если у вас нет результатов на странице, или пользователь ввел неверную страницу вручную — вы будете перенаправлены на первую страницу.
- У него есть свойство
& maxLimit
, для которого по умолчанию установлено значение 100. Это гарантирует, что пользователи не могут замедлить работу вашего сайта, установив в URL-адресе & limit = 100000
. Если вы используете getPage — попробуйте сделать это на своем сайте. - Устанавливает метатеги для предыдущей и следующей страниц для поисковых роботов в заголовке страницы.
- Имеет встроенную разбивку на страницы ajax. Вот как это работает:
[[! pdoPage?
& родители = `0`
& ajaxMode = `по умолчанию`
]]
[[! + page.nav]]
Конечно, вы можете изменить разметку, указав дополнительные параметры для сниппета.
pdoMenu
Этот фрагмент может заменить Wayfinder. В основном это работает так же, но немного быстрее.
Поскольку объекты xPDO игнорируются, вам необходимо вручную проверить права доступа к элементам в меню с помощью специального свойства:
[[! PdoMenu?
& родители = `0`
& checkPermissions = `список`
]]
По умолчанию все проверки разрешений отключены.Кстати, это свойство можно использовать во всех сниппетах pdoTools.
pdoПользователи
В этом фрагменте перечислены пользователи вашего сайта. Вы можете отфильтровать их по группам и ролям:
[[! PdoUsers?
& groups = `Авторы`
& sortdir = `asc`
]]
Вы можете объединить это с pdoPage , чтобы получить список пользователей с разбивкой на страницы:
[[! PdoPage?
& element = `pdoUsers`
& groups = `Авторы`
& роли = `Член`
& sortby = `id`
& sortdir = `asc`
]]
[[! + стр.nav]]
Заполнители — это все поля из объектов modUser
и modUserProfile
. Вы можете увидеть их все, если просто установите пустой параметр и tpl
(или не установите его вообще, если во фрагменте нет значения tpl по умолчанию).
Пустые & tpl
— еще одна общая черта всех сниппетов pdoTools.
pdoКарта сайта
pdoSitemap создает быструю карту сайта, которая не требует, чтобы ресурс был установлен на XML, если свойство & forceXML
включено (по умолчанию).
Он кэширует данные, и ключ кеша зависит от параметров сниппета, но вы также можете установить свой собственный ключ.
Чтобы увидеть, насколько это быстро, мы можем протестировать его, отключив и forceXML
и включив и showLog
. На моем сайте для первого запуска требуется почти 30 секунд, а для второго всего 0,03:
[[! PdoSitemap?
& forceXML = `0`
& showLog = `1`
]]
В моей карте сайта 6873 ресурсов.
pdoNeighbours
Фрагмент для создания ссылок на предыдущую, следующую и верхнюю страницы текущего документа.
[[! PdoNeighbours?
& sortby = `menuindex`
& sortdirc = `desc`
]]
pdoCrumbs
Моя версия простого сниппета для панировочных сухарей на сайте. Ничего особенного, за исключением того, что он использует ядро pdoTools с быстрой обработкой фрагментов и выборкой данных.
[[! PdoCrumbs]]
pdo Название
Этот фрагмент кода генерирует тег «заголовок» страниц. Он запускает pdoCrumbs и показывает путь к текущему документу в заголовке.
[[! PdoTitle]] / [[++ site_name]]
По умолчанию он поддерживает pdoPage , поэтому вы увидите количество страниц в заголовке.
Вопросы / стр. 5 из 593 / Sections / mysite.com
Краулерам это нравится!
pdo Поле
И, наконец, pdoField — это сниппет, позволяющий получить любое поле из любых ресурсов. Это замена сниппетов UltimateParent и getResourceField .
Например, нам нужно получить longtitle
ресурса с id = 15
[[pdoField?
& id = `15`
& field = `longtitle`
]]
Или если мы хотим получить pagetitle
прародителя текущего документа:
[[pdoField?
& id = `[[* id]]`
& field = `pagetitle`
& top = `2`
]]
Заключение
Я могу писать все больше и больше о pdoTools, но этого достаточно для первой статьи.В следующих двух статьях я расскажу о скорости и файле pdoParser.
Важно помнить, что все сниппеты pdoTools используют одно и то же ядро, и большинство параметров можно использовать для всех из них.
Вы можете использовать и showLog
, чтобы увидеть, как работают фрагменты, вы можете указать пустые фрагменты, чтобы увидеть доступные заполнители, и вы можете объединять таблицы на лету.
pdoTools — это библиотека, а не просто набор сниппетов. Многие дополнения MODX используют pdoTools для своих собственных сниппетов, таких как miniShop2, Tickets, BannerY, AjaxForm и другие.
Самый большой недостаток pdoTools — ограниченная документация на английском языке. Все, что у нас есть, находится здесь https://github.com/bezumkin/Docs/tree/master/en/01_Components/01_pdoTools. Если вам интересно, вы можете помочь, добавив больше страниц в документацию.
И не забывайте, что все параметры сниппетов описаны внутри них. Просто откройте сниппет в диспетчере и посмотрите вкладку «Свойства».
Сортировка содержимого страницы через Menuindex в Modx Revo
MoreGallery — это интуитивно понятная и мощная галерея изображений для MODX с поддержкой видео. Исправлено получение миниатюр видео Vimeo [S28109]; Убедитесь, что самый верхний уровень в дереве файлов включает панель инструментов [# 195]; Убедитесь, что порядок сортировки изображений обеспечивается при поддержке дополнительных функций, таких как FileSluggy, которые очищают имена файлов при загрузке [# 142].
mxSimplePrevNext обеспечивает быстрое решение для создания предыдущих и следующих ссылок на ресурсы на основе текущей позиции ресурса в индексе меню. В этом выпуске исправлена пара проблем с ранее включенными фрагментами, а также расширен @mxspnSortOrder для изменения порядка сортировки для более интуитивной связи с.
ContentBlocks — это мощный менеджер контента для MODX, позволяющий редакторам создавать Update modmore / alpacka до 1.0.0pl, чтобы убрать оставшиеся заполнители в Исправить неправильный порядок сортировки при перетаскивании элементов сортировки в компоненте на странице дерева файлов в поля изображения / галереи [# 179]; Файл jquery внутренних зависимостей.
Последнее обновление: 27 окт.2020 г. | История страницы | Улучшить эту страницу | Сообщить о проблеме Сортировка Если да, пользователь сможет отсортировать сетку по значениям в этом столбце. структура, поэтому решение до сих пор заключалось в создании контейнера Resource в сниппете, вы можете перечислить ресурсы, отсортированные по этим специальным значениям menuindex.
Продукты управляются через Extras> Commerce> Products или через. Обратите внимание, что в шаблонах MODX вы должны использовать [[+ field]], тогда как в Twig по умолчанию это включает микроданные для валюты и даты истечения срока действия цены продажи.ценообразование: сериализованная версия типов цен. Откройте меню «Фрагменты настроек системы».
Встроенные подключаемые модули прокси-сервера
Oracle WebLogic Server для маршрутизации запросов динамического содержимого к. В параметры меню Oracle Fusion Middleware Control внесены изменения. Некоторые добавляют следующий фрагмент во вновь созданный файл конфигурации в обоих местах: для сериализации доступа к кешу сеанса для предотвращения повреждения.
Наконец, вы выясните, что нужно сделать, чтобы сделать ваш сайт MODx безопасным.Вики-страницы MODx и форумы MODx содержат множество документов, разработанных сообществом. пробовали поискать в Google, но все еще не нашли решения своей проблемы? Индекс меню — это номер, присвоенный ресурсу, чтобы разрешить этот точный контроль.
[# 5002] Исправить sortBy, чтобы он оставался пустым, если не указан; [# 5459] Разрешить несколько полей сортировки в 4d556cc3b2b083396d000de1 getfeed1.0.0pl getFeed 1.0.0 1 0 0 pl pl splittingred См. Официальную документацию здесь: http://rtfm.modx.com/extras/revo/packman Как и в дереве ресурсов MODX Сам Коллекции поддерживает вложение.
Для усиления защиты любого веб-приложения, включая MODX Revolution, необходимо обратить внимание на все примеры: \ .com / manager {rewrite / manager /index.php?qdoesnotexist; } Всегда следите за обслуживанием стека серверов, включая программное обеспечение, которое позволяет замаскировать страницу входа в Manager, чтобы не было очевидным, что это ваш сайт.
Браузер не сортирует файлы по имени по умолчанию [# 7070] Не перезаписывать изменения пользователя. Добавьте index.php, чтобы минимизировать пути в шаблонах mgr. Пункты меню MODX Revolution 2.2.0rc3 [# 6099] Исправьте неправильное имя индекса для modWorkspace MODX в статическое страницу, а не атласский стек Обновите URL-адреса справки на новый базовый URL-адрес для.
Стоимость MODX Extras MODX 2.3.0pl был выпущен 6 лет назад на 20140715. Исправлена некорректная сортировка по рангу в сетке ТВ в шаблоне, элементе экрана создания / обновления и дереве файлов; Исправлено сворачивание дерева после быстрого создания элемента Fallback httphost для предотвращения проблем с кешем под HTTP / 1.0; Добавлен параметр ctx в.
Я думаю, что одна важная проблема заключается в том, будут ли элементы представлять собой ресурсы в списке продуктов, а не иметь отдельную страницу, на которую должен перейти пользователь, или нет. 51 52 113 & limit4 & includeTVs1 & processTVs1 & sortbymenuindex.
Показать все ресурсы для очистки в диспетчере мусора и изменить параметры дерева для удаленных MODX Revolution 2.7.0pl 27 ноября 2018 Исправить сортировку по столбцу доступа на вкладке Доступ к шаблону окна редактирования переменной шаблона [# 13893] Добавить возможность просмотра журнала изменений дополнительных функций перед загрузкой обновления [# 13410]. Исправить.
Как мне указать точный порядок, в котором pdoresources перечисляет результаты? Я хотел бы отобразить список с & resources936 и получить ресурсы 93 и 6 в этом порядке.Если нет, вы можете сортировать на любом телевизоре, например, можете установить индекс меню для тех https://docs.modx.com/current/en/extras/getresources/index.
ModX Revolution: сортировать по индексу меню папки, затем индексу меню элемента. 20170828 08:42 Тимур Гаффоров импортировал из Stackoverflow modx modx [[! GetResources? Но почему-то не сортирует элементы по menuindex. Как мне заставить его отсортировать все по индексу меню папок, а затем по индексу меню детей?
Каков официальный способ работы документа menuindex.Я всегда использовал Диспетчер документов для сортировки моих документов, и теперь я думаю, что это, вероятно, не лучший способ сделать это, и, возможно, значение счетчика элементов было бы лучшим решением. Присоединяйтесь к сообществу Slack http://modx.org.
Контролируемый исходный код modx для развертывания. [# 12711] Исправить сообщение об ошибке в процессоре экспорта [# 12709] Исправить стиль дерева для поля формы Ссылки в описании дополнительных функций открываются в новых вкладках. Добавлена возможность отправки для всех типов ресурсов. Исправлена сортировка в браузере MODX. Исправлено обновление ресурсов.
Система управления контентом MODX Revolution. Устранена проблема, из-за которой ресурс не публиковался, если значение pubdate равно значению. Пункт меню «Действия диспетчера» был переименован в «Журнал диспетчера» [# 14495]. Исправьте сортировку по столбцу доступа на вкладке «Доступ к шаблону» в представлении редактирования переменной шаблона [# 13893].
1 2 В этом файле показаны изменения в последних выпусках MODX. 66 Исправление фатальной ошибки в информации о системе [# 15277] 67 68 MODX Revolution 2.8.0pl 6 октября Исправление XSS в загрузке файлов и дереве файлов [# 15262] 73 Исправление отображения журнала изменений дополнительных функций на панели инструментов разбивки на страницы перед загрузкой обновления [# 13410] 456 Исправить.
Контролируемый исходный код modx для развертывания. поля и контейнеры для предотвращения нарушения контекстного меню [# 13012] Исправьте сохранение, убедитесь, что основная папка недоступна из Интернета [# 12504] Добавьте возможность сортировки при поиске, когда включена настройка автозаполнения. MODX Revolution 2.3.4pl 23 июня.
Installatron для MODx — это решение для установки и управления веб-сайтами MODx в один клик. 2.8.0пл. основная версия 16 октября 2020 г. 60MBMODX 2.8.0 содержит несколько исправлений ошибок, улучшенных Исправление XSS в загрузке файлов и дереве файлов. Удалите лишнюю точку в имени файла для вложения Content Disposition; Исправить неэкранированные.
https://forums.modx.com/thread/103273/solvedextjsproblemwhilesaving: 0parent: 0isfolder: falserichtext: truetemplate: 1menuindex: 0 уведомляет пользователя, что, хотя был возвращен успешный ответ, и он думал, что решил его, закодировав настраиваемые поля с помощью своего рода «htmlspecialchars».
Это лучшие примеры PHP из реального мира для modX :: newObject getMicroTime 1 Получить меню для данного контейнера @param string name Имя действия, выполненного с помощью order @param string entry Значение действия modx> logmodX :: LOGLEVELERROR ‘Не удалось упаковать в фрагменты.
. FULLTEXT Искать MODX | Создано YJ Tso для MODX CMS. Облачное обновление 25 июня Revolution 2.3.5 Drag and Drop Tree Menu FULLTEXT поиск в MODX с использованием полностью настраиваемого индекса поиска. Он интегрируется со списками сниппетов, таких как getResources и pdoResources для шаблонного вывода.
4 5 MODX Revolution 2.8.3pl 28 мая 2021 г. 6 [# 14494] 143 Исправлена проблема, из-за которой ресурс не публиковался, когда pubdate находится в браузерах на основе webkit [# 14553] 145 Пункт меню «Действия менеджера» для modResource.uri index 1242 [# 9846] Исправьте неверный порядок параметров, передаваемых в.
..com / questions / 152015 / netmicroframeworkonaarmcortexm3core 20120121.com/questions/369116/changedefaultxmlcommentsnippetinvisualstudio /whichsoapxmlobjectserializationlibraryforjavawouldyourecommend.com/questions/1866menitexwashhome
. / questions / 152015 / netmicroframeworkonaarmcortexm3core 20120121.com/questions/369116/changedefaultxmlcommentsnippetinvisualstudio / questions / 668257 / pythonsimpleasyncdownloadofurlcontent2012 2016 ichangethecolumnthatlinkstotheitemwithedpointliinu.
Это руководство написано как исчерпывающий пример разработки дополнительных компонентов, чтобы вы могли написать свои фрагменты подключаемых модулей и т. Д. Внутри MODX, а затем упаковать их с помощью
. вы можете вызвать этот фрагмент, используя [[helloWorld]] в шаблонах документов. Это полезно, если ваш фрагмент принимает переменные параметры, которые он обрабатывает с помощью абстракции SQL. Это означает, что вы можете написать код, который работает в формате.
Я ищу руководящие принципы, практические примеры, проработанные примеры и т. Д. По написанию заполнителя в содержимом документа и позволяю парсеру документов MODx обрабатывать заполнитель. php // пример из Ditto template.class.inc.php.
У нас периодически возникала проблема с выпадающими меню навигации. навигация как элементы подменю; Элемент навигации, не имеющий собственного содержимого. Чтобы настроить это в MODX, мы используем фрагмент pdoMenu, который является частью pdoTools.
Перейти к содержимому. Подпишитесь на раскрывающееся меню | 125417 richsnippets | 844. bpython | caliburn.micro | 7720 modxtv | 2. getview | 537. libpcap | 2020. ярлык | 6884. securityframework | 111 renameitemcmdlet | 28 javacustomserialization | 13.
О FirstChildRedirect Evo. Этот фрагмент был создан для того, чтобы папки MODx имитировали поведение традиционных папок на веб-сайте путем перенаправления на первую.
[Найдите здесь документацию.] Https://docs.modx.com/current/en/extras/firstchildredirect для получения более конкретной информации о том, как настроить этот фрагмент. [Пожалуйста.
[Найдите здесь документацию.] Https://docs.modx.com/current/en/extras/firstchildredirect для получения более конкретной информации о том, как настроить этот фрагмент.[Пожалуйста.
У меня есть обзорная страница, на которой я загружаю контент с дочерних страниц [1]. На дочерних страницах есть дети [2] aswel. Я хочу, чтобы при посещении дочерней страницы [1] я выполнял перенаправление.
snippet.firstchildredirect.php modxevolution1.1.0pl Этот фрагмент перенаправляет на первый дочерний документ папки, в которой он автоматически перенаправляется на.
Скорее, цель этого фрагмента — сортировка дочерних элементов по menuindex. Скажем, например, как и я, вы создали 73 документа в родительском элементе и не установили меню.
FirstChildRedirect обновлен для MODX 2.1 и выше. current document Используйте параметр docid для перенаправления этого фрагмента на первый дочерний документ.
Пользователь нажимает на элемент ссылки и перенаправляется к его дочернему элементу. Вот официальная документация http://rtfm.modx.com/display/ADDON/FirstChildRedirect.
FirstChildRedirect — это сниппет, который перенаправляет определенный ресурс на его первый дочерний ресурс. Есть версия как для Revolution, так и для Evolution.
Это упрощенный набор правил синтаксического анализатора и модификаторов вывода, который позволяет вам манипулировать данными на вашем уровне представления, то есть в ваших фрагментах и шаблонах.
Цель — туда, куда плагин должен перенаправить посетителя или Google Bot! к. Вы можете ввести это как фактический URL, например new / location / for / contact.html.
Ловушка перенаправления перенаправит пользователя на указанный ресурс, когда его форма завершит отправку. Для этого требуется один параметр redirectTo which.
modx не может экономить ресурсы долгое время, сохраняя ресурсы.contentsecuritypolicy symbols arduinoesp8266 gravityformsplugin angularchart othello.
11 августа 2015 г., Release Robot Robbie Дополнительные обновления за 33-ю неделю. Наш постоянный Release Robot BlogIt 1.0.0pl выпущен на 20150810 Просмотрите журнал изменений ..
поле вводного текста, также известное как сводка. Часто используется сниппетами для обобщения сообщений, например
[[интротекст]].
Использование фрагмента. После того, как вы установили сниппет, вы можете использовать его, просто поместив его теги в свой шаблон, фрагмент, телевизор или документ.
Пример ниже демонстрирует простой шаблон, в котором содержимое Результат этого фрагмента во время записи выводит значение Drizzle.
Мы помещаем это здесь, потому что часто сниппет будет использовать блоки для форматирования данных. НЕ полагайтесь слишком на логику модификатора вывода !. Что такое Output.
. фрагмент, который вы написали и хотите добавить на свои страницы CSS и / или JavaScript, но не хотите настраивать собственный шаблон.
Вы создали гибкий и мощный сниппет.Доступные заполнители зависят от того, какой массив передается в modx> getChunk; или tpl>.
Что такое плагин ?. Плагины похожи на сниппеты в том, что они представляют собой фрагменты кода PHP, которые имеют доступ к MODX API. Большая разница.
В этом документе: Создание шаблонов фрагментов В этом руководстве показано, как это сделать в фрагменте. сначала получите фрагмент шаблона в переменной tpl.
Сниппеты — это метод, с помощью которого MODX позволяет запускать динамический PHP-код на любой из ваших страниц.Они являются основным средством развития.
26 марта 2019 года мы запустили новые форумы MODX. Присоединяйтесь к нам на новых форумах сообщества MODX. Вернуться на форумы MODX.com Документация по вопросам Revo.
Затем перейдите на вкладку «Параметры ввода» и установите для параметра «Тип ввода» значение «Флажок», а в разделе «Значения параметров ввода» введите сообщение «Я нашел решение на форумах Modx».
Для некоторых написание сниппета MODX может быть их первым набегом на кодирование. Вот несколько советов как для новичков, так и для опытных разработчиков.
Как и практически все в графическом интерфейсе MODX, вы можете получить доступ к шаблонным переменным и их значениям через MODX API.Это полагается на xPDO.
Для некоторых написание сниппета MODX может быть их первым набегом на кодирование. Вот несколько советов как для новичков, так и для опытных разработчиков.
Шаблоны обычно содержат теги разметки HTML, которые определяют любые теги, включая фрагменты фрагментов переменных шаблона и другие.
Фрагменты — это ответ MODX на встроенный PHP-код. Они предоставляют настраиваемый динамический контент, такой как меню блога или поиск по спискам новостей.
MODX предлагает разработчикам Extras множество вариантов того, как вставлять пользовательские CSS / JS на свои страницы на уровне фрагментов.Однако MODX тоже.
Исправить сортировку дерева 1.0.0pl | Держите ресурсы в последовательном порядке menuindex без пробелов | Создано Майклом Сноу для MODX CMS.
Исправить сортировку дерева 1.0.0pl | Держите ресурсы в последовательном порядке menuindex без пробелов | Создано Майклом Сноу для MODX CMS.
Обзор базовой разработки MODX. Среда разработки. Написание фрагментов. Создание плагинов. Пользовательские страницы менеджера.
Как сделать визуальный редактор в modx.Дополнения (плагины, пакеты) для MODX Revolution
Предлагаю попробовать CKEditor в качестве визуального редактора кода. Версия 4.0 имеет нейтральную черно-белую тему (очень подходит для административной панели MODx) и некоторые новые функции (приветствуется вставка абзацев в «труднодоступных» местах).
Не может использоваться как интерфейсный редактор.
Ctrl + S работает, а также вставляет ссылки или встраивает ресурсы (iframe) и файлы (img, аудио, видео). Вам просто нужно выделить текст и перетащить нужный ресурс / файл в редактор.
В настройках вы можете изменить цвет интерфейса, скин, добавить свои плагины, а также изменить порядок и набор кнопок панели.
Укажите недостающие функции — попробую их реализовать.
Установка через менеджер пакетов.
В отличие от TinyMCE, он полностью совместим с
План действий:
Добавить поддержку параметров richtext TV
— Выбор кнопки на сервере в диалоговых окнах (интеграция с файловым браузером MODX)
— Настройки: extraPlugins, disableObjectResizing, формат ссылки управление, выбор скина
— Меню при перетаскивании файлов и ресурсов: Вставить объект | Вставить ссылку | Вставьте название объекта (было бы круто, если бы перетаскивание работало как через правую, так и через левую кнопку мыши (как в Windows))
— Защита тегов modx
— Новые кнопки (вставка тегов, редактирование атрибутов и т. Д.))
— Список классов из паровой таблицы стилей.
— Подбор системных настроек из редактируемого контекста (сейчас проблемы со ссылками)
— Настраиваемые сочетания клавиш.
— Плагин типографики — автокоррекция кавычек, дефисов и т. Д. На лету.
— Прозрачная загрузка изображений путем копирования / вставки и перетаскивания «n»
— Автоматическая подстановка (синтаксический анализ и вывод) тегов modx, если это возможно и насколько это возможно (поддержка виджетов, разработанная командой CKSource, может быть полезно)
— Встроенное редактирование из фронтенда.
Даже список получился большой. Надо бы фантазий уменьшить …
Инструкция по установке дополнительных плагинов:
Находим нужный плагин, например закидываем в папку / manager / assets / components / ckeditor / ckeditor / plugins / , Переходим в системные настройки, выбираем пространство имен ckeditor , регистрируем наш плагин в extra_plugins (через запятую, если их несколько), затем редактируем панель инструментов , вводя новую кнопку (если она есть).Обновляем форму редактирования ресурса — проверяем результат. Предлагаю поделиться некоторыми интересными плагинами.
Дополнительные плагины (не входят в комплект):
oEmbed — Позволяет вставлять контент (видео, фото, аудио, кадры) с разных серверов с помощью простой ссылки. Список сервисов огромен, поддерживается YouTube, Vimeo, Flickr, Instagram, GitHub, Twitter, JSFiddle и множеством других сервисов.
История изменений:
CKEditor 1.1.1
— Исправлена совместимость с AjaxManager (был косяк с перетаскиванием)
— Добавлены плагины: youtube, wordcount, автокоррекция
— Убрано меню, появляющееся при перетаскивании из дерева .Теперь ссылка просто вставляется. Если вы перетащите изображение, оно будет вставлено.
— поддержка IE8
CKEditor 1.1.0
====================================
— Интеграция с файловым браузером MODx
— Поддержка Richtext TV
— Поддержка пользовательских классов ресурсов (например, статьи)
— Улучшено перетаскивание «n». Теперь вы можете просто закинуть картинки из дерева файлов, чтобы вставить их в контент.
— Фиксированный Ctrl + S
— Опция extra_plugins (Дополнительные плагины)
— Опция скина (Смена скина)
Одним из самых популярных дополнений к MODX Revolution является визуальный редактор TinyMCE.
Понятно, что редко сайт обходится без хорошего редактора richtext для содержания.
В этой статье рассказывается об установке и настройке редактора TinyMCE.
Установка
Для установки вам необходимо скачать пакет из репозитория (http://modx.com/extras/package/TinyMCE) и установить его через раздел «Управление пакетами» вашего сайта.
После установки пакета можно сразу открыть любой ресурс для редактирования и убедиться, что редактор появился.
В него можно сразу приступить к написанию текста, однако для более комфортного использования рекомендуем настроить редактор.
Настройка TinyMCE будет включать в себя несколько шагов:
- Включая файл стиля
- Добавление кнопок для работы с таблицами
Подключаем файл со стилями к TinyMCE
Это необходимо для того, чтобы в визуальном редакторе текст выглядел однозначно, как на сайте: шрифт, размер и цвет текста, оформление картинок и внешний вид таблиц.
Откройте «Системные настройки» и выберите в фильтре «Визуальный редактор»:
В этом разделе доступно 5 настроек:
- Путь к файлу CSS (editor_css_path) — укажите путь к вашему файлу с текстовыми стилями. Обратите внимание, что вам следует использовать не полный файл css вашего сайта, а отдельный файл, в который вы можете поместить только стили, непосредственно связанные с оформлением текста (заголовки h2-h6, абзацы p, ссылки a, таблицы, таблицы и другие).Редактор будет работать быстрее и правильнее.
- Воспользуйтесь текстовым редактором (use_editor) — при необходимости вы можете выключить редактор на время, не удаляя TinyMCE.
- Редактор (which_editor) — MODX Revolution позволяет установить на сайт несколько разных редакторов, при необходимости вы можете переключаться между ними. Кстати, вы можете переопределить этот параметр для администраторов сайта, назначив тем самым другого редактора разным администраторам.
- Редактор элементов (which_element_editor) — укажите редактор для сниппетов, плагинов, чанков.Например, это может быть CodeMirror или Ace.
Добавление кнопок для работы с таблицами в TinyMCE
В
TinyMCE, который устанавливается из репозитория MODX Revolution, по какой-то причине таблицы отключены по умолчанию. Нет, вы, конечно, можете переключиться в режим HTML и написать код вручную, но зачем! Намного проще потратить 2 минуты и включить поддержку стола.
Итак, открываем настройки системы и в первом фильтре выбираем tinymce :
Откроется список доступных опций.Нас интересует 2:
- tiny.custom_plugins — список подключаемых к TinyMCS плагинов. В конце списка добавьте « table» , таким образом подключив плагин для работы с таблицами. Плагин поставляется с TinyMCE, и вам не нужно его устанавливать, вам просто нужно включить его.
- tiny.custom_buttons3 — список кнопок, отображаемых в 3-й строке. Укажите там « tablecontrols» , таким образом добавив набор кнопок для работы с таблицами.Понятно, что эти кнопки можно разместить на любой другой строчке. Если вы посмотрите на другие строки, вы увидите список предопределенных кнопок, таких как отменить, повторить, выбрать все и многие другие. Вы можете поиграть с ними, разместив кнопки в разном порядке.
Скорее всего после обновления систем mODX Evolution Текстовый редактор TinyMCE у вас не работает. Вот фотография, которая есть у меня на всех обновленных сайтах:
1. Загрузите плагин отсюда.
2.Разархивировать.
3. Залейте папку ckeditor в папку
assets / plugins /
4. Создайте плагин
ckeditor
5. Скопируйте содержимое из
ckeditor.tpl
Ставим галочки в системных событиях «OnRichTextEditorInit», «OnRichTextEditorRegister» и «OnInterfaceSettingsRender»
6. Включите CKEditor
Вы можете включить CKEditor в Tools> Configuration> Interface and Presentation , в столбце « Editor :» выберите CKEditor
7.Зайдите в любой документ и посмотрите эту картинку
8. Дружим с CKEditor с файловым менеджером KCFinder
Чтобы редактор работал правильно с файловым менеджером KCFinder, замените этот код в файле /assets/plugins/ckeditor/functions.php :
$ mcpuk_path [«base»] = MODX_BASE_URL. «менеджер / медиа / браузер / mcpuk / browser.php». $ cke_query; $ mcpuk_path [«изображение»] = $ mcpuk_path [«база»]. «& Введите = изображения»; $ mcpuk_path [«flash»] = $ mcpuk_path [«base»].»& Тип = flash»; $ mcpuk_path [«ссылка»] = $ mcpuk_path [«база»]. «& Тип = файлы»;
$ mcpuk_path [«база»] = MODX_BASE_URL. «менеджер / медиа / браузер / mcpuk / browse.php»; //. $ cke_query; $ mcpuk_path [«изображение»] = $ mcpuk_path [«база»]. «? type = images»; $ mcpuk_path [«flash»] = $ mcpuk_path [«base»]. «? type = flash»; $ mcpuk_path [«ссылка»] = $ mcpuk_path [«база»]. «? type = files»;
9. Собрал свою сборку нужных мне кнопок
В файле / assets / plugins / ckeditor / modx_config.js вы можете менять местами, удалять или добавлять кнопки. Для себя я собрал именно такую комбинацию.
Кому интересно, можно заменить строчку кода:
Config.toolbar_modx = [[«Source»], [«Bold», «Italic», «Underline», «Strike», «-«, «Subscript» , «Надстрочный индекс»], [«PasteText», «PasteFromWord»], [«Отменить», «Повторить», «-», «Найти», «-», «RemoveFormat»], «/», [«NumberedList» , «BulletedList», «-», «Outdent», «Indent», «Blockquote»], [«JustifyLeft», «JustifyCenter», «JustifyRight»], [«Link», «Unlink», «Anchor»], [«Изображение», «Flash», «Таблица», «HorizontalRule», «Смайлик», «SpecialChar»], «/», [«Формат», «Шрифт», «Размер шрифта»], [«TextColor», « BGColor «], [» Развернуть «,» ShowBlocks «,» — «,» О программе «]];
Конфиг.toolbar_simple = [[«Источник», «-», «Развернуть», «RemoveFormat»], [«PasteText», «Найти», «Заменить»], [«Ссылка», «Отменить связь»], [«Изображение» , «SpecialChar»], [«Format»], «/», [«Bold», «Italic», «Underline», «Strike», «-«, «Subscript», «Superscript»], [«TextColor» , «BGColor»], [«NumberedList», «BulletedList», «-», «Blockquote»], [«JustifyLeft», «JustifyCenter», «JustifyRight», «JustifyBlock»]];
Здесь я оставил только то, что мне нужно: исходный код, лупу (чтобы было легче писать), форматирование текста, вставка только текста, поиск и замена, ссылки, вставка изображений, символов, заголовков, атрибутов текста, текста и цвета фона. , абзацы, цитата и обоснование текста.
Установка дополнительных плагинов
В
CKeditor есть несколько интересных плагинов. Вы можете найти их в Интернете и на официальном сайте CKeditor. Все плагины устанавливаются в папку / manager / assets / components / ckeditor / ckeditor / plugins /.
Далее в «Системных настройках» выберите «ckeditor» и в поле дополнительные плагины ( extra_plugins ) вставьте название устанавливаемого плагина. А в группах кнопок ( панель инструментов ) вставьте «название плагина» в нужное место.Дополнение установлено и готово к работе.
Так как MODX Revolution изначально поставляется пустым и для того, чтобы сайт работал, могу с уверенностью 99% сказать, что вам придется установить хотя бы одно дополнение — package … В связи с этим я решил напишите небольшой список пакетов, которые будут полезны многим при создании сайтов на MODx Revolution.
(статья обновлена 11.02.2018)
Дополнения из основного репозитория modx
Ace — подсветка кода при редактировании шаблонов, чанков, сниппетов + встроенный emmet .
TinyMCE Rich Text Editor — красивый визуальный редактор для контента, может быть расширен дополнительными функциями, см. Сайт разработчика.
filetranslit — переименовывает файлы из кириллицы в латиницу при загрузке (например: загрузить картинку с именем (заголовком) modx-plugin.png (при переносе сайта такие названия изображений превратятся в мурашки и больше отображаться не будут)) файл с названием modx-plagin.png .
транслит — транслитерация псевдонимов страниц (url) — требуется для.
FormIt — работа с формами (создание контактных форм любой сложности).
Коллекции — группировка документов (ресурсов) — больше для больших сайтов, где много документов в категориях — помогает разгрузить (ускорить) админку, потому что если у вас огромное дерево ресурсов, он начнет глючить.
simpleUpdater — обновление modex в 1 клик.
SEO Pro — SEO-помощник! Проверяет длину полей — заголовок, описание, добавляет ключевое слово в фокусе (ключевые слова) и показывает, как страницы будут выглядеть в результатах поиска.
Image SEO теги alt и title — автоматически заменяет alt и title на изображения, если они не зарегистрированы. При осторожном применении на производственной площадке могут нарушиться некоторые выводы, которые проходят через CODE
Галерея — галереи изображений
migx — очень крутая штука! Отображая в контенте несколько телевизоров, можно создать слайдер, галерею например и т. Д.
SimpleSearch — организация поиска по сайту.
Tagger — теги для сообщений, облако тегов.
ClientConfig — создание настроек клиента, которые менеджеры могут редактировать позже. Те. мы вводим в него все, что часто меняется, или просто что-то, например, контакты, адрес, слоган и т. д. — чтобы заказчик мог все изменить легко и быстро.
Inherit Template — устанавливает шаблон для дочерних элементов.
VersionX — компонент для тех, кто дает сайты на доработку фрилансерам, ну может даже новичкам.Предназначен для создания локальных резервных копий всех элементов — (чанков, сниппетов, ресурсов). Вы можете просмотреть старую версию и при необходимости восстановить ее. Это также позволяет узнать, кто внес определенные изменения.
Консоль — позволяет запускать PHP-код из бэкэнда.
AjaxManager — ускорение админки.
Captcha — капча для входа в админку — дополнительная защита.
backupMODX — создавать резервные копии с рабочего сайта в 1 клик.
logPageNotFound –Журнал ошибок 404. Отлично подходит для поиска неработающих ссылок.
кэш Очистить —
позволяет удалить все из папки / core / cache / одним щелчком мыши.
Дополнения из репозитория modstore.pro
Прочтите, как подключить дополнительный репозиторий.
AjaxForm — отправка контактных форм без перезагрузки страницы через Ajax. Использует FormIt, но на самом деле вы можете указать свой собственный сниппет.
DateAgo — Хорошее форматирование даты, как в CMS LiveStreet.
autoRedirector — автоматически создает 301 редирект, вы также можете создать редирект вручную.
Билеты — создание блога, комментирование форм, обзоры и тому подобное.
Jevix — что-то вроде типографа, установленное на машине с билетами
mixedImage — смешанная загрузка файлов (замена дополнительного поля (для картинок, вложений и т. Д.))
pdoTools — целый комбайн, в который входят следующие сниппеты:
pdoRecources — предназначен в первую очередь для отображения списка ресурсов, но на самом деле с его помощью можно делать много интересного: карта сайта (для людей), фотогалереи, портфолио, кейсы с ресурсов и т.д.
pdoMenu — создание меню.
pdoPage — как и pdoRecources, он отображает список ресурсов + создает постраничную навигацию, в том числе из выборок других сниппетов.
pdoCrumbs — для приготовления панировочных сухарей
pdoUsers — вывод пользователя
pdoSitemap — создание автоматически сгенерированного файла sitemap.xml
pdoNeighbors — отображает предыдущие и следующие документы (полезно для блогов, статей и т. Д.)
pdoField — отображает любое поле указанного ресурса или его родителя, включая параметры TV.
pdoTitle — предназначен для визуального различения документов с навигацией по страницам.
pdoArchive — вывод архива документов сайта с разбивкой по дням, месяцам и годам
Parser — перехватывает обработку тегов на странице.
Это, пожалуй, самый необходимый пакет, без него нормальный сайт не собрать. Также добавлена поддержка механизма шаблонов Fenom, который быстрее встроенного.
miniShop2 — создание интернет-магазина.
BannerY — Компонент для управления баннерами (рекламой).Реализовать на нем слайдер по сути несложно.
phpThumbOn — эскизы изображений (отображение изображений нужного размера).
MinifyX — минификация и склейка скриптов и стилей в два файла (css и js) — позволяет уменьшить количество запросов и увеличить скорость загрузки страниц.
xPoller2 — Многоязычные опросы.
AdminTools — изменение цветовой схемы админ-панели, избранного, заметок, авторизации в админке по электронной почте и т. Д.
frontendManager — Редактирование страниц из внешнего интерфейса.
дБ Админ —
просмотр списка таблиц базы данных из административной панели MODx Revo. Он также позволяет экспортировать как отдельную таблицу, так и всю базу данных целиком. Он также умеет удалять и очищать таблицы (будьте осторожны при его использовании) и генерирует всевозможные запросы SQL.
modDevTools —
быстрый поиск и замена элементов в чанках, сниппетах.
debugParser —
поиск узких мест на сайте.
tagElementPlugin —
позволяет редактировать фрагменты или фрагменты, выбирая его тег и нажимая комбинации клавиш ctrl + enter.
controlErrorLog —
добавляет значок в верхнюю строку меню, информирующий о наличии записей в журнале ошибок.
Универсальные плагины
—
автоматическое сжатие изображений на любых сайтах, услуга платная, но дорогая, с самого начала отводится 10МБ — их хватит на сжатие около 500 изображений — хватит на любую визитку, еще можно получить до 200МБ бесплатно.
Evolution CMS | | — Параметры
config Загрузить пользовательскую конфигурацию «default» — пустой файл конфигурации по умолчанию.
CONFIG_NAME — другие конфигурации, установленные в папке конфигураций или в любой папке в пределах базового пути Evo через @FILE .
`default` формат даты Отформатируйте заполнитель [+ date +] в удобочитаемой форме Любой допустимый формат для функции PHP strftime $ _lang ["dateFormat"]
— Из языкового файла Ditto.По умолчанию для английского языка: `% d-% b-% y% H:% M` дата Источник Источник заполнителя [+ date +] Любая временная метка UNIX из полей Evo или TV, например createdon, pub_date или editedon `createdon` отладка Вывод отладочной информации 0 (выкл.), 1 (вкл.) `0` глубина Глубина уровней дерева документа для извлечения из положительное целое число (0 для неограниченного количества) `1` дисплей Количество документов для отображения
(на страницу, если разбивка на страницы включена) положительное целое число, `all` (все найденные документы) `все` ditto_base Расположение файлов Ditto Любое допустимое местоположение папки, содержащее исходный код Ditto с косой чертой в конце [(base_path)] assets / snippets / ditto /
документы ID документов, которые Ditto должен получить.Свойство переопределений и родителей. Разделенный запятыми список идентификаторов ресурсов для списка нет расширители Загрузите расширитель, который добавляет функциональность в Ditto Любой расширитель в папке расширителей или в любой папке в пределах базового пути Evo через @FILE. Может быть список расширителей, разделенных запятыми. нет формат Формат вывода для использования HTML, JSON, XML, атом, RSS `html` скрытые поля Разрешить Ditto получать поля, которые его анализатор шаблонов не может обработать, например вложенные заполнители и [* поля *] Любые допустимые имена полей Evo или телевизоры, разделенные запятыми нет скрытьПапки Не показывать папки в возвращаемых результатах 0 — показать папки
1 — скрыть папки `0` скрытьЧастный Не показывать документы, на просмотр которых у гостя или пользователя нет разрешения. 0 — показать личные документы
1 — скрыть личные документы `1` id Уникальный идентификатор этого экземпляра Ditto для связи с другими скриптами (например, Reflect) и уникальные параметры URL-адреса Любая комбинация символов a-z, подчеркивания и цифр 0-9 (с учетом регистра) пустой ключевые слова Разрешить выборку связанных ключевых слов для каждого документа.Может использоваться как [+ ключевые слова +] или как источник данных тега 0 (выкл.), 1 (вкл.) `0` язык язык для значений по умолчанию, отладки и сообщений об ошибках Любое имя языка с соответствующим файлом в папке & ditto_base / lang `английский` нетРезультаты Текст или фрагмент, отображаемый при отсутствии результатов Любое допустимое имя блока или текст $ _lang ['no_documents']
— Из языкового файла Ditto.По умолчанию для английского языка установлено значение ` Документов не найдено.
`
заказать по Сортировка набора результатов Любой допустимый порядок стиля MySQL `createdon DESC` родители ID контейнеров для Ditto для извлечения своих потомков на & глубину Список идентификаторов ресурсов, разделенных запятыми текущий ресурс phx Использовать форматирование PHx 0 (выкл.), 1 (вкл.) `1` queryLimit Количество документов для извлечения из базы данных, как MySQL LIMIT положительное целое число, `0` (автоматически) `0` рандомизировать Произвести случайный порядок вывода 0 (выкл.), 1 (вкл.), Любое поле Evo или имя ТВ (для взвешенного случайного числа по этому полю) `0` removeChunk Имя фрагментов, которые нужно удалить из содержимого, разделенных запятыми.Обычно используется для удаления комментариев. Любое допустимое имя блока, которое появляется в выходных данных нет экономия Сохраняет объект ditto и набор результатов в заполнители для использования другими сниппетами. 0 — выключено; возвращает вывод
1 — остаток; возвращает вывод
2 — all;
3 — все; возвращает только тел. `0` см. ThruUnpub Просматривайте неопубликованные папки, чтобы забрать их детей.Используется, когда глубина больше 1. 0 (выкл.), 1 (вкл.) `0` показатьInMenuOnly Показать только документы, видимые в меню 0 — показать все документы
1 — показать только документы с установленным флагом «показать в меню» `0` показатьPublishedOnly Показать только опубликованные документы 0 — показать только неопубликованные документы
1 — показать как опубликованные, так и неопубликованные документы `1` начало Количество документов, которые нужно пропустить в результатах положительное целое число, `0` (не пропускать) `0` всего Количество документов для извлечения положительное целое число, `all` (все найденные документы) `все` где Пользовательский оператор MySQL WHERE Действительный оператор MySQL WHERE, использующий только элементы объекта документа (без телевизоров) пустой
.