Синтаксис тегов / Основы / Система / docs.modx.pro
Теги — это основные рабочие элементы MODX для пользователя сайта.
Указывая теги на странице, вы можете вызвать какой-то кусок HTML или PHP кода, текст из словаря, или переменные документа.
Для упрощения логики работы парсера, увеличения производительности и избежания путаницы с составными тегами синтаксис тегов разных элементов сведен к одному принципу: все теги объявляются в квадратных скобках, а тип тега определяется символом перед наименованием.
Синтаксис тегов
Для элементов и полей
Элемент
В Evolution (Старый)
В Revolution (Новый)
Пример (для Revolution)
Шаблоны
Нет
Нет
Поля ресурсов
[*field*]
[[*field]]
[[*pagetitle]]
Дополнительные поля
[*templatevar*]
[[*templatevar]]
[[*tags]]
Чанки
{{chunk }}
[[$chunk]]
[[$header]]
Сниппеты
[[snippet]]
[[snippet]]
[[getResources]]
Плагины
Нет
Нет
Модули
Нет
В Revo нет модулей
Для вывода контента
Элемент
В Evolution (Старый)
В Revolution (Новый)
Пример (для Revolution)
Плейсхолдеры
[+placeholder+]
[[+placeholder]]
[[+modx. ]
Принятие такого упрощенного формата позволяет новому парсеру быть полностью рекурсивным и не зависеть от регулярных выражений.
Раньше каждый набор тегов анализировался самостоятельно в определенном порядке, по уровням вложенности, и обработка внутреннего тега откладывалось до следующего прохода. Сейчас теги обрабатываются по мере их появления, независимо от типов элементов, которые они представляют, и встроенные теги обрабатываться перед внешним тегом (то есть обработка сложных тегов идет изнутри), что позволяет прописывать гораздо более сложные составные теги.
Комментарии в тегах
Обсуждения на форумах показывают, что некоторые люди чувствуют необходимость в комментариях. По умолчанию при обнаружении тега, который представляет собой элемент, которого не существует, парсер отбрасывает весь тег. Используя это поведение, вы можете добавить комментарии в шаблоны, чанки и поля ресурсов, и этот комментарий не будет отображен во фронтенде. Однако, если тег составной, то все внутренние теги обработаются прежде чем парсер отбросит значение.
В MODX Revolution 2.2 любой тег, начинающейся с дефиса (-) игнорируются парсером, и любые теги внутри такого комментария будут отбрасываться. Это позволяет вставлять в комментарии любые составные теги, не влияя на нагрузку.
[[- Это комментарий. Он будет удален из вывода страницы. ]]
Структура тегов
Каждый тег состоит из нескольких частей. Давайте разберем тег на составляющие:
[[ // открываем тег
! // указание, что тег НЕкешируемый (необязательно)
elementToken // тип элемента $ - чанк, * - поле элемента или ТВ, + - плейсхолдер, и т. д.
elementName // имя элемента
@propertyset // можно указать набор параметров для этого элемента (необязательно)
filterName=`modifier` // один или несколько фильтров вывода (необязательно)
? // указание того, что дальше идут параметры элемента (необязательно если параметры отсутствуют)
&propertyName=`propertyValue` // любой параметр элемента, начинающийся с &
&propertyName2=`propertyValue2` // параметров может быть сколько угодно, и все начинаются с &
]] //закрываем тег
Эти теги могут прописываться в одну линию или располагаться на нескольких строках для удобства.
Все теги (а не только сниппеты) могут иметь параметры. Например, у нас есть чанк Hello:
Привет, [[+name]]!
В чанке есть плейсхолдер. Мы хотим задать значение для этого плейсхолдера. Раньше нужно было использовать сниппет, который установит это значение. Но не теперь. Просто укажите нужное значение в параметрах чанка:
[[$Hello? &name=`Сергей`]]
На выходе мы получим:
Привет, Сергей!
Кэширование
Мы можем указать, что тег нужно обрабатывать после каждого запроса страницы. Для этого нужно просто поставить восклицательный знак сразу после открывающихся квадратных скобок:
Если вам необходимо, чтобы сниппет каждый раз при запросе страницы устанавливал какой-то плейсхолдер, то плейсхолдер тоже нужно вызывать некэшируемым:
[[!Profile]]
Привет, [[!+username]].
Проверка синтаксиса
Для новичков синтаксис тегов кажется сложноватым, поэтому вы можете использовать плагин SyntaxChecker для проверки правильности написания тегов.
Также можно использовать замечательный редактор Ace, который хорошо подсвечивает синтаксив тегов MODX.
MODX синтаксис — документация на русском языке
Автор Алексей На чтение 4 мин Просмотров 2.2к. Опубликовано
Обновлено
02.07.2020
Содержание
Комментарии в дескрипторах (тегах).
Составляющие части тегов
Параметры
Кэширование
Плейсхолдеры
Проверка синтаксиса
Абсолютно для любого пользователя сайта на MODX, теги несут основополагающее значение, по причине того, что они являются основными рабочими элементами.
Указывая тот или иной тег, во время работы с сайтом, пользователь получает возможность вызвать интересующую его часть HTML, либо PHP кода, отрывок текста или какие-то переменные документы.
Различают следующие виды синтаксиса тегов MODX:
— для полей и элементов;
Элемент
Название элемента
Пример вывода
Шаблоны
—
—
Поля ресурсов
pagetitle
[[*pagetitle]]
Дополнительные поля
tags
[[*tags]]
Чанки
header
[[$header]]
Сниппеты
snippet
[[snippet]]
Плагины
—
—
— для вывода контента;
Элемент
В Revolution
Пример вывода
Плейсхолдеры
[[+placeholder]]
[[+modx.user.id]]
Ссылки
[[~link]]
[[~[[*id]]? &scheme=`full`]]
Системные настройки
[[++system_setting]]
[[++site_start]]
Языковые теги
[[%language_string_key]]
Комментарии
[[-this is a comment]]
— для системных параметров парсера;
Описание
Тэг
Выводит время потраченное на запросы к базе данных
[^qt^]
Выводит количество запросов к базе данных
[^q^]
Выводит время потраченное на работу PHP скриптов
[^p^]
Выводит общее время потраченное на генерацию страницы
[^t^]
Выводит источник содержимого (база данных или кэш)
[^s^]
Последний вид является своеобразным упрощенным форматом.
Раньше функция анализирования каждого набора тегов носила самостоятельный характер, и осуществлялась в определенном строгом порядке: переходя от одного уровня вложенности к другому. Таким образом, выполнение обработки внутреннего тега всегда переносилась до момента следующего прохода. Сейчас же процесс обработки тегов совершенно не зависит от представляющих их типов элементов, и происходит мгновенно, то есть сразу с момента их появления. Обработка встроенных тегов осуществляется перед тегом, который именуется внешним. Другими словами, сложные теги обрабатываются изнутри. Благодаря такой особенности появилась возможность прописывания гораздо более сложных составных тегов.
Комментарии в дескрипторах (тегах).
Результатом изучения обсуждений, происходящих на форумах, стало получение информации о том, что довольно значительная часть пользователей испытывает потребность в комментариях. В момент обнаружения тега, представляющего из себя элемент, который не существует, парсер, при условии настройки по умолчанию, отбрасывает весь дескриптор. Использовав такую особенность поведения, можно осуществить добавление комментариев в шаблоны, поля ресурсов и чанки. При этом отображение комментария во фронтенде происходить не будет. Стоит отметить, что если тег будет составным, то осуществление обработки внутренних тегов произойдет до того как парсер отбросит значение
В MODX Revolution версии выше 2.2+ любой вид дескриптора, который начинается дефисом будет игнорироваться парсером. Все теги, находящиеся внутри такого комментария будут отброшены. За счет этого, можно не повлияв на нагрузку, вставить абсолютно любые составные теги в структуру комментария.
[[- Это комментарий. Он будет удален из вывода страницы. ]]
Составляющие части тегов
Структура любого тега, в не зависимости от его вида, имеет несколько частей.
[[ // открываем тег
! // указание, что тег НЕкешируемый (необязательно)
elementToken // тип элемента $ - чанк, * - поле элемента или ТВ, + - плейсхолдер, и т. д.
elementName // имя элемента
@propertyset // можно указать набор параметров для этого элемента (необязательно)
filterName=`modifier` // один или несколько фильтров вывода (необязательно)
? // указание того, что дальше идут параметры элемента (необязательно если параметры отсутствуют)
&propertyName=`propertyValue` // любой параметр элемента, начинающийся с &
&propertyName2=`propertyValue2` // параметров может быть сколько угодно, и все начинаются с &
]] //закрываем тег
Они могут быть прописаны в линию, так: [[!pdoResourcesr? &parents=’5,10,11′ &limit=’7′]] или быть расположенными в столбик.
[[!pdoResources?
&parents='5,10,11'
&limit='7'
]]
Параметры
Всем тегам предоставлена гипотетическая возможность иметь параметры. К примеру, у нас есть чанк с именем zdravstvujte и со следующим содержимым внутри:
Здравствуйте, [[+name]]!
В данном чанке есть плейсхолдер ([[+name]]), и мы к примеру хотим задать ему какие нибудь значения.
Раньше, для осуществления данного действия требовалось, использование сниппета, который выполнит установку значения, и это было обязательным условием. Но теперь все существенно изменилось. Сейчас достаточно просто указать интересующее значение в параметрах чанка, пример:
[[$zdravstvujte? &name=`Василий`]]
В итоге получим следующее:
Здравствуйте, Василий!
Кэширование
В случае возникновения необходимости, можно установить обработку тега после каждой операции по запросу страницы. Просто поставьте восклицательный знак после квадратных скобок, без пробела.
Вызвав не кэшируемый плейсхолдер, можно осуществить установку сниппетом, интересующего плейсхолдера.
[[!Profile]]
Привет, [[!+username]].
Проверка синтаксиса
Проверка корректного написания тегов можно осуществить при помощи плагина SyntaxChecker.
Аналогичную функцию может выполнить редактор Ace, отличительной особенностью которого является подсветка синтаксиса тегов MODX.
Весь список тегов доступных для MODX Revolution можно найти в официальном руководстве на сайте rtfm.modx.com
Другие элементы — Создание сайта на MODX Revolution
Приведенные ниже элементы не находятся в дереве элементов в панели управления, но они служат для хранения и представления контента вашего сайта. Они включают в себя плейсхолдеры, ссылки, системные настройки, теги и поля.
Плейсхолдеры, ссылки и системные настройки
Плейсхолдеры не отображаются в дереве элементов панели управления, но они являются элементами, поскольку содержат контент и могут отображаться, используя теги ресурсов. Причина, по которой они не показаны в дереве элементов заключается в том, что их значение всегда устанавливается в сниппетах или плагинах, а не вводится в панели управления. Сниппет или плагин устанавливает плейсхолдер при помощи следующего кода PHP :
После установки плейсхолдера это значение заменит любой соответствующий тег плейсхолдера :
[[+имя плейсхолдера]]
Многие сниппеты MODX устанавливают плейсхолдеры. Вы можете отображать значения, установленные для этих плейсхолдеров при помощи тегов плейсхолдеров. Эти теги могут находиться в поле контента ресурса, в чанке, в TV-параметре или в шаблоне. Если у вас есть сниппет (давайте назовем его SetAutor), который, например, устанавливает плейсхолдер под названием autor_name в соответствии с именем автора текущего документа, вы можете поместить следующий тег сниппета в ваш шаблон : [[SetAutor]]. Данный тег сниппета не создает никакого вывода, поскольку он не печатает ничего и не возвращает никакого значения — он только устанавливает плейсхолдер, который будет заменен именем автора :
Автор данного документа : [[+autor_name]]
Отметим, что для того, чтобы работал тег [[+autor_name]], тег сниппета должен находиться в коде ранее, тогда плейсхолдер будет установлен.
MODX установит для вас пару плейсхолдеров при каждом запросе страницы, которые вы можете использовать для отображения идентификатора или имени пользователя текущего пользователя, который ввел логин и пароль (если таковые в настоящее время есть).
Идентификатор текущего пользователя :[[+modx.user.id]]
Имя текущего пользователя :[[+modx.user.username]]
Ссылки представляют собой URL страницы сайта и основаны на использовании одного из полей ресурсов — идентификатора ресурса. В большинстве случаев ссылки используются для обращения к документам. Идентификатор ресурса документа иногда называется идентификатором документа. Данный идентификатор отображается в скобках в поле ресурсов панели управления рядом с именем ресурса. Вы можете разместить ссылку используя тег ссылки :
[[~##]]
В приведенном выше коде, чтобы получить ссылку на нужный вам ресурс (документ), нужно подставить вместо ## идентификатор соответствующего ресурса. На первый взгляд это может показаться сложным, но на самом деле очень просто. Давайте посмотрим на пример. Предположим вам нужна страница «Контакты» нашего сайта, которая имеет идентификатор ресурса 8 (отображается в панели управления сайта правее имени ресурса в дереве ресурсов). Используя указанный способ создания ссылок, вы можете везде вместо http://modx4you/contacts.html указывать
[[~8]]. Имя документа может изменяться, может меняться расположение ресурса на сайте, но тег ссылки всегда будет надежно указывать на данный ресурс, поскольку номер идентификатора ресурса никогда не изменяется. При организации ссылок на страницы вашего сайта желательно всегда использовать теги ссылок.
Подобно плейсхолдерам установки не отображаются в дереве элементов, но могут отображаться, используя теги (точнее, теги установки). Установка в большинстве случаев является переменной, значение которой доступно на сайте MODX. Установки включают в себя системные настройки, контекстные настройки и пользовательские настройки (более подробно об этом далее).
Все настройки можно отображать при помощи тега настроек :
[[++имя_настройки]]
Вы можете использовать теги настроек для отображения или использования значений любых системных, контекстных или пользовательских настроек. Некоторые системные настройки очень важны для работы MODX, поэтому не изменяйте системные настройки, если вы не уверены.
Теги
Мы уже обсуждали некоторые теги MODX, а сейчас давайте рассмотрим их подробнее. Все теги MODX заменяются объектами, которые они представляют. Вот краткий список, показывающий чем будет заменен каждый тег :
Тег чанка — содержимое чанка.
Тег ресурса — значение поля ресурса или TV-параметра, которое он представляет.
Тег сниппета — возвращаемое значение кода PHP в сниппете.
Тег ссылки
— URL ресурса, на который он ссылается.
Тег плейсхолдера — значение плейсхолдера (часто устанавливаемое в сниппете или плагине).
Тег настройки — значение контекстной, пользовательской или системной настройки (переменной).
Языковой тег — определенная языковая строка из текущего лексикона.
В версиях MODX Revolution все теги начинаются с [[ и заканчиваются]]. Мы рассмотрели большинство тегов и в таблице 1-1 дается перечень новых стилей тегов, используемых в MODX Revolution, а также теги, используемые в более ранних версиях MODX :
Таблица 1-1. Старые и новые стили тегов
Тип тега
MODX Evolution (старая версия)
MODX Revolution
Ресурс
[*поле ресурса/TV параметр*]
[[*поле ресурса/TV параметр]]
Чанк
{{имя_чанка}}
[[$имя_чанка]]
Сниппет
[[имя_сниппета]]
[[имя_сниппета]]
Настройка
[(имя_настройки)]
[[++имя_настройки]]
Плейсхолдер
[+имя_плейсхолдера+]
[[+имя_плейсхолдера]]
Ссылка
[~идентификатор_ресурса~]
[[~идентификатор_ресурса]]
Язык
Тег отсутствует
[[%клавиша_языковой_строки]]
Отметим, что символы после открывающих скобок ($, +, ++, *, ~ и %) в MODX называются токенами. Они говорят MODX какой тип тега обрабатывается.
Новички в MODX не всегда понимают, что теги могут использоваться в MODX практически везде и то, что вы можете использовать вложенные теги. Тег сниппета, например, может содержать в качестве свойства чанк, а чанк может содержать теги ресурсов, которые могут содержать теги ссылок. Ниже приведен пример тега настройки, вложенного в тег ссылки. Он отобразит ссылку на домашнюю страницу сайта :
[[~[[++site_start]]]]
Давайте разберем эту конструкцию и вначале посмотрим на внешний тег, который является тегом ссылки.
[[~X]] является тегом ссылки, где элемент X обозначает идентификатор ресурса документа, на который вы хотите поставить ссылку. Этот элемент будет заменен на URL, связанный с этим документом. Другими словами, например тег [[~12]] будет заменен на URL документа, чей идентификатор ресурса 12.
В использовании домашней страницы нет ничего сложного. Системная переменная site_start может указывать на любую страницу сайта и MODX обрабатывает эту страницу подобно другим.
[[++site_start]] является тегом настройки, который будет заменен идентификатором ресурса главной страницы вашего сайта. Поэтому, если идентификатор ресурса вашей домашней страницы равен 1 (и часто так оно и есть), этот тег будет заменен числом 1.
Поэтому конструкция [[~[[++site_start]]]] будет заменена на [[~1]] и далее на что-то вида http:///ваш_сайт.ru/home.html. Для того, чтобы вам действительно установить ссылку на главную страницу, вы можете использовать следующий код (X)HTML :
<a href="[[~[[++site_start]]]]">Home</a>
При создании вложенных тегов в MODX всегда обращайте внимание на количество квадратных скобок слева и справа. Это количество должно быть одинаково и в MODX Revolution должно быть четным числом.
Назад
Вперёд
PHx — EvoDOC
Редактировать
PHx Дополнительные возможности для тегов MODX Evolution
Дополнительные возможности для отображения плейсхолдеров, тегов MODx (включая TV параметры) и теги настроек сайта.
PHx (Placeholders Xtended) добавляет новые возможности для отображения плейсхолдеров, тегов MODx (включая TV параметры) и теги настроек сайта. Рекурсивный парсер позволяет использовать вложенные теги. Возможно создавать свои модификаторы, путем создания сниппетов.
PHx поддерживает следующие теги MODx:
[+placeholder+]
[*теги содержимого*] ([*content*], [*pagetitle*], например)
[*TV параметры*]
[(теги настройки)] (например, [(base_url)], [(site_name)] и другие)
Обычный плейсхолдер вида [+placeholder+] легко превращается в плейсхолдер PHx: [+placeholder:esc+]. Тоже самое вы можете сделать с тегом содержимого:
[*createdby*]
Добавляем модификатор:
[*createdby:date=`%a %B %d, %Y at %H:%M`*]
Также можно использовать несколько модификаторов сразу. Они будут обработаны слева направо:
somevar:esc:nl2br:strip
Расширенное применение
Наличие специального плейсхолдера «phx» позволяет использовать синтаксис PHx без наличия реальной переменной.
С некоторыми модифиакторами этот плейсхолдер приобретает определенное значение. В случае с модификатором «userinfo» он возвращает соответствующее значение из информации о текущем пользователе:
[+phx:userinfo=`username`+]
Синтаксис
Хотя это и кажется логичным, но на этом стоит заострить внимание. Избегайте использования следующих конструкций в шаблоне, если они не являются частью тега MODx:
[+
[*
[(
+]
*]
)]
]]
Парсер попытается их обработать и MODx выдаст ошибку. Обычно такой проблемы не возникает. Но в случае с JavaScript у вас может быть конструкция, похожая на эту:
array[counter++]
которая спровоцирует странное поведени из-за +].
Также закрывающий тег CDATA может создать проблемы.
/ ]]> /
Помните, что вы не сможете потерять данные вашего сайта, используя неправильный синтаксис PHx. Худшее, что может случится — ваш шаблон неправильно отобразится.
Модификаторы
— Возвращает строку, приведенную к нижнему регистру.
[+string:lcase+]
— Приведет все символы строки к верхнему регистру.
[+ucase:lcase+]
— Первая буква в строке станет заглавной.
[+ucfirst:lcase+]
— Обрежет строку.
[+description:ellipsis=`150`]
— Возвратит длину строки.
[+string:len+]
— Вырежет все HTML теги из строки.
[+string:notags+]
— Удаляет html теги и разрывы строк
[+string:esc+]
— Конвертирует исходную переменную в html сущности. Аналог htmlentities() в PHP.
[+string:htmlent+]
— Конвертирует символы перевода строки в теги.
[+string:nl2br+]
— Удалит символы новой строки(\n), табуляторы(\t), идущие подряд пробелы.
[+string:strip+]
— Перевернет задом наоборот буквы.
[+string:reverse+]
— Устанавливает переносы в зависимости от кол-ва символов слова, аналогично функции php (По умолчанию: 70).
[*pagetitle:wordwrap=`10`*]
— Возвратит первые X символов от текущего значения (По умолчанию: 100).
[*pagetitle:limit=`50`*]
— Преобразует метку времени unix timestamps в соответствии с заданным форматом.
[*createdon:date=`%d.%m.%Y`*]
— Создает MD5-хэш текущего значения.
[*pagetitle:md5*]
— Возвращает запрошенные модификаторов данные о пользователе.
[+phx:userinfo=`username`+]
cachepwd : Cache password
comment : Comment
country : Страна
dob : Дата рождения в формате времени UNIX
email : Email
fax : Факс
fullname : Полное имя
gender : Пол
internalKey : User internal key
lastlogin : Last login, in UNIX time format
logincount : Number of logins
mobilephone : Мобильный телефон
password : Пароль
phone : Телефон
photo : Фотография
role : Роль
state : Статус
thislogin : This login, in UNIX time format
username : Логин
zip : Почтовый индекс
— Использовать вычисления, такие, как — * + /.
«?» символ заменяется текущим значением расширения, но вы также можете использовать вложенные теги.
[+price:math=`?*[+curs+]`+]
— Использовать «другое значение» если значение placeholder или templatevar пустое.
[*longtitle:ifempty=`[*pagetitle*]`*]
— Принимает значение, в зависимости от значений placeholder или templatevar.
[+placeholder:select=`0=OFF&1=ON&2=UNKNOWN`+]
— алиасы: eq
— алиасы: isnot, isnt
— алиасы: isgt
— алиасы: islt
lt — меньше (
— алиасы: isinrole, ir, memberof
Принимает в качестве параметра разделенный запятыми список веб-групп и возвращает значение true/false в зависимости от того, принадлежит текущий пользователь к какой-либо из этих групп или нет (заменяет собой модификатор «inrole», который необходимо было сочетать с условным оператором).
[+phx:mo=`Администраторы`:then=`Я админ`:else=`Я простой смертный`+]
— Принимает в качестве параметра переменную для сравнения. Также может быть использовано в сочетании с :or или :and.
Для начала советую прочитать официальную документацию, а дальше мы рассмотрим синтаксис применительно к MODx.
Все переменные от сниппетов передаются в чанк как есть, поэтому переписывать старые чанки на новый синтаксис — сплошное удовольствие.
Базовые различия
MODx
Fenom
[[+id]]
{$id}
[[+id:default=`test`]]
{$id ?: 'test'}
[[+id:is=``:then=`test`:else=`[[+pagetitle]]`]]
{$id == '' ? 'test' : $pagetitle}
Для использования более сложных сущностей, в pdoParser предусмотрена служебная переменная {$_modx}, которая даёт безопасный доступ к некоторым переменным и методам системы.
MODx
Fenom
[[*id]]
{$_modx->resource.id}
[[*tv_param]]
{$_modx->resource.tv_param}
[[%lexicon]]
{$_modx->lexicon('lexicon')}
[[~15]]
{$_modx->makeUrl(15)}
[[~[[*id]]]]
{$_modx->makeUrl($_modx->resource. id)}
[[++system_setting]]
{$_modx->config.system_setting}
Подборка синтаксиса Fenom
Список написания возможных вариаций тегов MODx на шаблонизаторе Fenom:
За вывод записей отвечает отдельная функция {$_modx->lexicon ()}.
Плейсхолдеры с точкой или тире
Во многих местах MODx используются плейсхолдеры, которые нельзя указывать в Fenom, так как они не соотвествуют правилам наименования переменных PHP. Например, плейсхолдеры с точкой (MODx обычно выставляет так данные массивов) или с тире (ТВ параметры).
Для доступа к этим плейсхолдерам (например в чанках), нужно использовать вторую служебную переменную — {$_pls}, если нужно получить доступ к TV в шаблонах или чанках, так же можно воспользоваться переменной {$_modx}. Название TV с точкой или тире, берется в квадратные скобки.
/* Вывод сразу (в чанках) */
{$_pls['tag.subtag']}
/* Вывод сразу (в шаблонах) */
{$_modx->resource['tv-name']}
/* Вывод через переменную */
{var $tv_name = $_pls['tv-name']}
{$tv_name}
Если плейсхолдер был выставлен в глобальный массив modX::placeholders, то его нужно получать вот так:
При указании неправильных переменных ваш шаблон не будет скомпилирован и вы получите запись об этом в системном журнале.
Заполнение плейсхолдеров
Fenom работает за один проход, то есть, не является рекурсивным, как родной парсер MODx.
Выполнение всей шаблонизации за один раз даёт очень высокую скорость, но также следует учитывать, что плейсхолдеры будут доступны только после отработки соответствующего сниппета.
Например: необходимо получить значение плейсхолдера {$mse2_query} (Поисковой запрос) в форме, но форму поиска отобразить над результатами. Для этого необходимо выполнить сниппет mSearch3 и передать результаты плейсхолдеру, например searchResults:
Так как объекта с пользователем в {$_modx} нет, методы проверки авторизации и прав доступа вынесены непосредственно в класс:
{$_modx->isAuthenticated()} // Возвращает TRUE, если пользователь авторизован в текущем контексте или в контексте, указанном в качестве аргумента
{$_modx->hasSessionContext('web')}
{$_modx->hasPermission('load')}
{$_modx->user. id > 0} // У гостей значение user id всегда будет 0
Проверка администратора
Вот два простых, но железных способа проверить пользователя на авторизацию. В первом случае проверка на значение id, во втором авторизация в контексте mgr, ну и соответствие группе администраторов.
{if $_modx->user.id > 0 && $_modx->isMember('Administrator')}
Контент только для администратора
{/if}
{if $_modx->isAuthenticated('mgr') && $_modx->isMember('Administrator')}
Контент только для администратора
{/if}
Вывод информации о скорости работы
С версии 2.1.4 вы можете использовать метод {$_modx->getInfo(string, bool, string)} для получения данных о скорости работы системы в данный момент. У него три параметра:
string — вывести определённый ключ из массива данных (пусто, по умолчанию)
bool — вывести все данные как строку, а не массив (true, по умолчанию)
string — оформить строки в чанк, можно использовать любые типа чанков pdoTools (@INLINE {$key}: ${value})
Вывод по умолчанию (строка со всеми данными):
{$_modx->getInfo()}
// queries: 39
// totalTime: 0. 1067 s
// queryTime: 0.0069 s
// phpTime: 0.0998 s
// source: database
Вывод конкретного значения:
{$_modx->getInfo('totalTime')}
// 0.1067 s
{$_modx->getInfo('source')}
// database
Оформление строк в свой чанк:
{$_modx->getInfo('', true, '@INLINE {$key} => {$value}')}
// queries => 39
// totalTime => 0.1155 s
// queryTime => 0.0091 s
// phpTime => 0.1064 s
// source => database
Вы можете даже добавить строки в лексикон pdoTools (или любой другой) и выводить ключи через него:
Переодически в класс добавляются новые методы, так что смотрите их в самом файле.
Время работы: 0,1382 s Время запросов: 0,1382 s Количество запросов: 27 Источник: cache
Фильтры-модификаторы PHx в Modx revo
Фильтры PHx (Placeholders Xtended) добавляют новые возможности для отображения плейсхолдеров, тегов MODx (включая TV параметры) и теги настроек сайта. Фильтры модификаторы phx позволяют манипулировать значением тегов, непосредственно внутри шаблона.
Все довольно просто, модификаторы phx значительно облегчают жизнь разработчику сайта. Например есть сайт и необходимо только на главной странице показывать слайдер, ну или любой другой банер. В шаблоне сайта достаточно прописать
[[*id:is=`1`:then=`[[$slider]]`]]
где 1 — это id главной страницы, а $slider — чанк с html кодом слайдера… и т.д. и т.п. Только чайники создают новый шаблон и копируют туда весь html-код страницы, ради пары строчек слайдера/банера. Но не печальтесь, все мы такими были, поэтому просвещайтесь и пользуйтесь в будущем фильтрами модификаторами phx.
[[*id:is=`1`:then=`[[$slider]]`]]
Дано:
[[*id]]
— выводит id текущей страницы;
:is=`1`:then= - проверяет равно ли *id == 1
? и если ДА, то выводит содержимое then;
[[$slider]]
— выводит чанк в котором находится верстка и вывод слайдера.
Вместо
[[*id]]
, использовано может быть любое другое поле, например
[[*template]]
— выведет текущий используемый шаблон. Или можно проверять не пусто ли TV-поле
[[*slider]]
или как там его?
Примеры использования PHx фильтра в MODx
Пример 1:
Хорошим тоном считается когда клик по логотипу компании отправляет на главную страницу сайта. Но ссылка должна быть неактивна, если пользователь находится как раз на главной.
Т.к. в MODX чаще всего вы используете шаблоны страниц, в данном случае вам бы потребовалось создать два шаблона.
Один для главной без ссылки:
<img src="logo.svg">
Второй для внутренних страниц со ссылкой:
<a href="[[~1]]"><img src="logo.svg"></a>
Это неудобно. С помощью PHx модификатора is (равенство) вы можете сделать так:
Если id страницы равен 1, вернуть логотип без ссылки, а если id не равен 1, вернуть логотип со ссылкой. Тем самым вы избавляетесь от создания двух практически идентичных шаблонов и обходитесь одним, но с модификатором вывода.
Пример 2:
Нам требуется вывести разные названия страницы в зависимости от шаблона.
— выводит «0», значит выводим «ВЫКЛ», если тот же тег равен «1» выводим «ВКЛ», если «2» выводим «ХЗ», если тег не подходит нашей выборке, то выводим «Ошибка».
in
Работает аналогично php in_array, если тег совпадет с одним из элементов модификатора (разделяются они запятыми), то выводим then, если не совпало else
(текущий шаблон) — равен «3» или «4», значит выводим
[[$myChank]]
, если не равен, выводим else.
Модификаторы строки
cat
Добавляет к тегу строку.
[[+num:cat=` раз`]]
— выведет к примеру «10 раз»
lcase, lowercase, strtolower
Переведет значение тега в нижний регистр, аналогично функции php strtolower.
[[*pagetitle:lcase]]
ucase, uppercase, strtoupper
Переведет текст в верхний регистр, аналогично функции php strtoupper.
[[*pagetitle:ucase]]
ucwords
Переведет каждую первую букву, каждого слова в верхний регистр, аналогично функции php ucwords.
[[*pagetitle:ucwords]]
ucfirst
Переведет только первую букву строки в верхний регистр, аналогично функции php ucfirst.
[[*pagetitle:ucfirst]]
htmlent, htmlentities
Преобразует все символы в соответствющие HTML сущности (для тех символов, для которых HTML сущности существуют), аналогично функции php htmlentities. Использует текущие настройки системы «modx_charset» с флагом «ENT_QUOTES».
[[*pagetitle:htmlentities]]
esc,escape
Экранирует разные «плохие символы», так же экранирует
[, ] и `
.
[[*content:esc]]
strip
Заменяет все переносы строк, табуляции и множественные пробелы с на один пробел.
[[*content:strip]]
stripString
Вырезает из строки заданную строку.
[[*pagetitle:stripString=`писька`]]
replace
Обычная замена.
[[*pagetitle:replace=`писька==конфетка`]]
striptags, stripTags,notags,strip_tags
Вырезает все теги, кроме разрешенных, аналогично функции php strip_tags
[[*longtitle:strip_tags=``]]
len,length, strlen
Возвращает длину строки, аналогично функции php strlen
[[*longtitle:strlen]]
reverse, strrev
Переворачивает строку, аналогично функции php strrev
[[*longtitle:reverse]]
wordwrap
Устанавливает переносы в зависимости от кол-ва символов слова, аналогично функции php wordwrap
[[*pagetitle:wordwrap=`10`]]
limit
Устанавливает лимит на длинну строки и обрезает ее.
[[*pagetitle:limit=`10`]]
ellipsis
Устанавливает лимит на длинну строки и обрезает ее, добавляя три точки в конце
[[*pagetitle:ellipsis=`10`]]
tag
Экранирование. Отображает элемент так как он есть, без :tag. Для использования в документации
[[+showThis:tag]]
add, increment, incr
(, значение + модификатор (по умолчанию +1).
[[+num:incr]]
или
[[+num:add=`97`]]
subtract, decrement, decr
Вернет, значение — модификатор (по умолчанию -1).
[[+num:decr]]
или
[[+num:decr=`97`]]
multiply, mpy
Вернет, значение * модификатор (по умолчанию *2).
[[+num:mpy]]
или
[[+num:mpy=`5`]]
divide, div
Вернет, значение / модификатор (по умолчанию /2).
[[+num:div]]
или
[[+num:div=`5`]]
modulus, mod
Вернет, целочисленный остаток от деления значения на модификатор (по умолчанию % 2. Вернет 1 или 0.)
[[+num:mod]]
или
[[+num:mod=`5`]]
ifempty, default, empty, isempty
Вернет, указанный модификатор, если значение пусто.
[[*pagetitle:empty=`Пусто`]]
notempty, !empty, ifnotempty, isnotempty
Вернет, указанный модификатор, если значение не пусто.
[[*pagetitle:!empty=`Не пусто!`]]
nl2br
Вернет строку с «<br />» или «<br>» вставленные перед всеми (\r\n, \n\r, \n и \r)…, аналогично функции php nl2br
[[*pagetitle:nl2br]]
[[*pagetitle:nl2br]]
date
Аналогично функции PHP strftime. Значение — отформатировано.
[[+birthyear:date=`%Y`]]
strtotime
Аналогично функции PHP strtotime. Вернет дату.
[[*createdon:strtotime]]
— вернет типа «2017-03-15 08:02:08»
fuzzydate
Вернет дату. Типа вчера, сегодня….
[[*createdon:fuzzydate]]
— вернет типа «Mar 15»
ago
Вернет дату в прошедших секундах, минутах, неделях или месяцах.
[[*createdon:ago]]
— вернет типа «4 гг., 2 мес. назад»
md5
Аналогично функции php md5.
[[+password:md5]]
cdata
Вставляет строку в оболочку «CDATA» тегов.
[[*pagetitle:cdata]]
userinfo
Возвращает запрошенные модификаторов данные о пользователе. Значение должно быть id-пользователя (modUser).
[[+modx.user.id:userinfo=`username`]]
isloggedin
Возвращает true, если пользователь авторизирован в этом контексте.
[[+modx.user.id:isloggedin]]
isnotloggedin
Возвращает true, если пользователь не авторизирован в этом контексте.
[[+modx.user.id:isnotloggedin]]
toPlaceholder
Помещает результат вывода тега в плейсхолдер, причем там где был помещен — ничего не выводится, а телепортируется в указанный плейсхолдер. До этого модификатора можно использовать любые другие модификаторы.
[[+number:toPlaceholder=`итого`]]
помещает содержимое
[[+number]]
в плейсхолдер
[[+итого]]
Можно усложнять запись добавляя в левую часть выражения любые другие модификаторы:
[[+number:is=`10`:then=`ровно 10`:else=`точно не 10!`:toPlaceholder=`итого`]]
если
[[+number]]
= 10, тогда выводим в плейсхолдер
[[+итого]]
: «ровно 10», если же нет «точно не 10!».
cssToHead
Прописывает файл CSS в <link> элемент перед закрывающим тегом </head>, где значение тега модификатора вписывается в аттрибут «href». Используется modX.regClientCSS.
возвращает ID вошедшего в систему пользователя. Вы, конечно, можете заменить, его на
[[*createdby]]
или другое поле ресурса или любой плейсхолдер, который возвращает числовое представление ID пользователя.
Обратите внимание, что ID пользователя и его логин уже доступны по умолчанию в MODX, так что вам не нужно использовать модификатор User Info:
[[!+modx.user.id]]
— Выведет ID пользователя
[[!+modx. user.username]]
— Выведет логин пользователя
Особое внимание обращаем на восклицательный знак !
[[!+modx.user.id]]
Он позволяет НЕ кэшировать содержимое вывода. Лучше всего эти плейсхолдеры вызывать некешируемыми, чтобы избежать неожиданных результатов. Почему нужно не кешировать…
Представим это так: на сайте 5 пользователей. Первый пользователь зашел на страницу с вызовом:
Добро пожаловать, [[!+modx.user.id:userinfo=`username`]]!
По задумке на этой странице, выводится приветственное сообщение пользователю. Так вот, если результат будет кешироваться, то при первом входе на эту страницу — сохранится имя пользователя который только что зашел — и всем остальным будет показываться не их имя, а имя того пользователя который вошел на эту страницу первым. Чтобы этого избежать — просто не кэшируем этот тэг, с помощью восклицательного знака перед вызовом !+modx…
Также фильтры можно использовать несколькими способами (что уменьшает время их выполнения)
P. S: Не забываем включить кэширование тегов, где нужно. Чтобы это сделать — нужно ИЗБАВЛЯТЬСЯ от восклицательных знаков (!). Результаты большинства сниппетов вплоне себе могут работать из кэша.
Спасибо источникам информации: http://modx.ws и https://gaserge.ru
Руководство по кэшированию
для MODX Revolution :: Mark Hamstra
23.10.2011
Эта статья также переведена на русский язык. Знаете другие переводы? Дай мне знать!
MODX имеет очень детальные возможности кэширования. В то время как Evo ограничивает кеширование только фрагментами и имеет другие ограничения с точки зрения встраивания тегов в теги, MODX Revolution таких ограничений не имеет.
В MODX Revolution вы можете кэшировать/декэшировать любой тег, который вы можете использовать. Это включает в себя фрагменты, а также настройку тегов, заполнителей, фрагментов и даже строк лексикона. Эта статья расскажет вам о некоторых причинах , когда вызывать то, что кэшировано в MODX Revolution (но это сэкономит вам большую часть внутренней работы).
Важно понимать, что если вы не выполняете действительно сложные действия и не переопределили основное кэширование, кеш будет очищен, когда вы: сохраните ресурс, элемент и в некоторой степени настройки. Таким образом, в основном, всякий раз, когда изменяется ваш контент или структура — ваш кеш будет обновляться, чтобы отразить это .
Как указать MODX (не) кэшировать определенный тег?
Просто добавьте восклицательный знак (!) перед токеном. Токен представляет собой знак доллара ($) для фрагментов, знак плюса (+) для заполнителей, знак процента (%) для словарей и звездочку (*) для полей ресурсов и переменных шаблона. Фрагменты не имеют токена.
Примеры из кэша:
[[Wayfinder]]
[[$chunkname]]
Пример из кэша:
[[!Wayfinder]]
[[!$chunkname]]
018
Кэшируйте все, что можете . В общем случае вы захотите кэшировать как можно больше — зачем MODX извлекать контент из базы данных при каждом запросе, если он не изменился? Хотя это может показаться логичным (и редко возникает вопрос, следует ли использовать кэшированные поля ресурсов или нет), то же самое относится и к другим тегам. Если вывод сниппета не меняется при каждом запросе, зачем MODX анализировать сниппет при каждом запросе? Это не должно.
Пользовательский вывод должен быть некэширован. Все, что выводит информацию о пользователе, должно быть удалено из кэша. Простой — любой запрос может быть сделан разными пользователями, поэтому нет смысла загружать специфичную для пользователя информацию из кеша. Это относится к сниппетам, которые взаимодействуют с пользовательской системой (пакет Login, компонент Wishlist, а также Quip для комментирования), а также к несколько менее известному заполнителю [[!+modx.user.id]].
Содержимое, связанное с параметрами URL или данными POST, необходимо удалить из кэша. Если вы используете форму, которая отображает информацию о том, что было опубликовано, вы не хотите, чтобы это было исправлено и кэшировано. Так что назовите это некешированным. Если ваш вывод отличается в зависимости от (не id/q) параметров URL (например, страницы результатов поиска), вы должны убедиться, что связанный фрагмент не кэшируется.
При необходимости используйте пользовательское кэширование. Если данные (во фрагменте) изменяются до того, как кэш был очищен, например, если данные извлекаются из внешнего источника XML, который изменяется независимо от вашего контента MODX, вам может потребоваться использовать собственный метод кэширования, такой как фрагмент getCache. или написать собственное кэширование в коде сниппета.
Исключения
Конечно, есть исключения… на самом деле, я пока смог придумать только одно: ( Обновлено 26 октября , придумал еще одно!)
site_url, http_host и связанная система настройки можно назвать некэшированными. Если у вас есть определенная настройка, в которой одна комбинация ресурсов и шаблонов может обслуживать несколько URL-адресов, вам нужно убедиться, что соответствующие системные настройки вызываются без кэширования. Одним из распространенных приложений для этого является ваш тег для удобных URL-адресов: вы должны быть уверены, что ваши ресурсы обслуживаются из того же домена, что и пользователь, который посетил. Вопрос о том, следует ли принудительно использовать www/no www через htaccess, — это совсем другое обсуждение, но оно очень сильно связано с этим и является общей причиной проблем.
Фрагменты, которые (могут) перенаправлять или пересылать в другое место, обычно должны быть не кэшированы, поскольку результат может быть пустым, но обработка фрагмента выполняет работу по перенаправлению пользователя.
Распространенные ошибки
Вызов фрагмента «if» без кэширования, когда предметом является поле ресурса. Скорее всего, из-за того, что в документации есть некэшированные примеры, многие люди неправильно используют сниппет If, не кэшируя его, когда тема статична в течение времени жизни кеша.
Вызов фрагмента «Wayfinder» без кэширования. Пожалуйста, не надо! Wayfinder особенно сильно повлияет на производительность вашего веб-сайта с большими меню. Единственная веская причина, по которой я могу вызвать Wayfinder без кэширования, — это когда вывод зависит от пользователя (например, область только для членов).
Декэширование заполнителей в чанках, которые используются в качестве шаблонов в сниппетах. Некэшированные заполнители обрабатываются в последний возможный момент, и вызов их некэшированными в шаблоне оставит их в неприкосновенности, и они не будут заменены фрагментом, а вместо этого будут заменены основным синтаксическим анализатором спустя долгое время после того, как фрагмент будет сделан. (Это поведение претерпело некоторые изменения/ошибки в выпусках 2.1.x, так что может быть, что в последнем выпуске все по-другому — на самом деле я недавно не проверял подробно.)
Какие ошибки вы заметили в приведенных выше списках? Или у вас есть другие тактики кэширования или вопросы? Поделитесь ниже!
На основе комментария Марка Хинса было написано дополнение к этому сообщению, в котором обсуждается, как работает вложенное кэширование в MODX Revolution.
Аналогичные статьи
Поделиться статьей
pdoMenu / Фрагменты / pdoTools / docs.
modx.pro
Фрагмент генератора меню. Он может заменить Wayfinder и обеспечивает большую гибкость при указании свойств.
Например, может строить меню из нескольких родителей, показывая их как вместе, так и отдельными ветками.
Обеспечивает существенное увеличение скорости, хотя и только при просмотре первой страницы, если меню Wayfinder кэшировано.
Если вы никогда раньше не использовали Wayfinder, рекомендуется прочитать документацию Wayfinder, поскольку в pdoMenu повторно используются многие концепции и настройки Wayfinder. Вы можете найти документы здесь или скачать отличную (но 184-страничную) электронную книгу Wayfinder из этой ветки.
Свойства
.
Имя
По умолчанию
Описание
&родители
Текущий ресурс
Разделенный запятыми список родителей для поиска результатов. Если установлено значение 0, будут использоваться все ресурсы верхнего уровня. Если идентификатор родителя начинается с дефиса, он и его дочерние элементы исключаются из результата.
& уровень
0 (без ограничений)
Уровень(глубина) сгенерированного меню.
&ресурсы
Разделенный запятыми список ресурсов для добавления в результаты. Если идентификатор ресурса начинается с тире, этот ресурс исключается из результатов.
&шаблоны
Разделенный запятыми список шаблонов для фильтрации результатов. Если идентификатор шаблона начинается с тире, ресурсы, использующие его, исключаются из результатов.
&где
Массив дополнительных параметров в формате JSON.
&displayStart
0
Включить отображение родительского узла. Это полезно, когда вы указываете более одного «родителя».
&контекст
Указание контекста ресурсов для построения меню.
Показать Скрытый
0
Показать ресурсы, помеченные как скрытые в меню.
&showНеопубликованное
0
Показать всем неопубликованные ресурсы.
&Предварительный просмотрНеопубликованное
0
Показывать неопубликованные ресурсы только для вошедших в систему пользователей Manager с разрешением на просмотр неопубликованных ресурсов.
&hideSubMenus
0
Скрыть неактивные ветки подменю.
&выберите
Разделенный запятыми список полей для извлечения. Вы можете указать массив строк JSON, например {«modResource»:»id,pagetitle,content»}. По умолчанию выбраны все поля объекта modResource. Вам не нужна эта опция, если вы хотите использовать такие поля, как [[+introtext]] , потому что они уже доступны. Эту опцию следует использовать, если вы не хотите получать все поля, а только те, которые вы укажете.
&сортировать по
индекс меню
Любое поле ресурса для сортировки, в том числе опция TV установлено свойство &includeTVs . Строка JSON может быть указана с массивом из нескольких полей, например {«tvname»:»ASC», «pagetitle»:»DESC»} . Для случайного выбора сортировки используйте «СЛУЧАЙ()».
&сортировка
АСЦ
Направление сортировки: по возрастанию или по убыванию. Если параметры &sortby и &sortdir будут пустыми, сортировка будет производиться в порядке ресурсов в параметре &resources.
&предел
0
Ограничить количество результатов. Можно установить на «0» для безлимитного использования.
и смещение
0
Результаты пропускаются с самого начала. Его следует использовать с &limit
&checkPermissions
Укажите права пользователей, которые следует проверять при выводе списка ресурсов. Если разрешения не указаны, разрешения вообще не будут проверяться. Например, &checkPermissions=`список`
&countДети
0
Подсчет количества дочерних элементов каждого родительского ресурса и вывод его в заполнитель [[+children]] . Он делает дополнительные запросы к базе данных, поэтому по умолчанию равен 0.
&setTotal
0
Включить вычисление всех строк, что также приведет к установке заполнителя «totalVar».
&toPlaceholder
Если не пусто, фрагмент сохранит вывод в заполнитель с тем же именем вместо возврата сгенерированного меню.
&plPrefix
вф.
Префикс для заполнителей, используемых в фрагментах шаблона
&showLog
0
Показать сведения об отладке обработки фрагмента. Отображается только для вошедших в систему пользователей Manager.
&fastMode
0
Быстрый режим обработки чанков. Все необработанные теги (модификаторы вывода, фрагменты и т. д.) удаляются.
&кэш
0
Кэширование результатов сниппета.
&Время кэша
3600
Продолжительность кэша в секундах.
&схема
-1 (относительно site_url)
Способ создания URL-адреса на основе значений, допустимых для API modX::makeUrl().
&useWeblinkUrl
1
Если установлено значение 1, URL-адрес, указанный в ресурсе веб-ссылки, будет выводиться в заполнитель «[[+link]]» вместо ссылки на сам ресурс веб-ссылки.
&rowIdPrefix
Если установлено, этот параметр создает уникальный идентификатор для каждого элемента. Значение будет rowIdPrefix + docId.
&здесь
Определите текущий идентификатор для фрагмента. Используйте значение [[*id]] , если шаблон, указанный параметрами &tplHere и &tplParentRowActive , неправильно применяется к элементу меню.
и телевизоры
Определите список телевизоров, разделенных запятыми, для включения. Например, «действие, время» будет заполнено заполнителями [[+действие]], и 9.0232 [[+время]]
&Подготовка телевизоров
«1», подготавливает все телевизоры, указанные в &includeTVs
Разделенный запятыми список значений TV, зависящих от медиа-источника, которые должны быть подготовлены перед выводом.
&процессорные телевизоры
Разделенный запятыми список TV, которые должны быть обработаны в соответствии с их параметрами вывода. Если установлено значение «1», будут обработаны все ТВ, перечисленные в &includeTVs .
&tvPrefix
Префикс ТВ свойства.
Свойства шаблона
Эти свойства определяют фрагменты, содержащие шаблоны для форматирования частей сгенерированных меню.
Как указано выше, если вы никогда раньше не использовали Wayfinder, хотя бы бегло просмотрите документацию Wayfinder, прежде чем использовать свои собственные фрагменты, даже несмотря на то, что pdoMenu использует немного другую иерархию фрагментов.
Даже если вы не читаете документы, обязательно включите [[+wrapper]] в ваших чанках. Вопреки своему названию, это заполнитель для содержимого оболочки (он похож на [[*content]] в ваших ресурсах). Он будет заменен содержимым меню более низкого уровня. Если вы опустите его, части вашего меню или все меню исчезнут без каких-либо сообщений об ошибках.
Имя
Описание
&tplOuter
Фрагмент для переноса всего блока меню. по умолчанию: @INLINE
&tpl
Чанк для обработки каждого ресурса. Если не указано, содержимое полей ресурса будет напечатано на экране. По умолчанию: @INLINE
[[+wrapper]]< /li>
&tplParentRow
Кусок контейнера с детьми.
&tplParentRowHere
Чанк для текущего элемента контейнера.
&tplЗдесь
Чанк для текущего ресурса
&tplInner
Оболочка чанка для разделов подменю. Если пусто, будет использоваться &tplOuter
&tplInnerRow
Чанк для строк подменю.
&tplInnerHere
Чанк для текущего пункта подменю.
&tplParentRowActive
Чанк для активной категории.
&tplCategoryFolder
Специальный блок для ресурсов категории. Ресурсы категории имеют isfolder = 1 и «(пустой)» шаблон или атрибут «rel = category». Полезно для создания элементов меню верхнего уровня, которые сами по себе не являются активными ссылками.
&tplStart
Чанк для родительского ресурса при условии, что также используется &displayStart . По умолчанию: @INLINE
[[+menutitle]][[+wrapper]]
Свойства классов CSS
Эти свойства определяют значение заполнителя [[+classes]] и [[+classnames]] для различных частей меню.
Имя
Описание
&первый класс
Класс для первого пункта меню. По умолчанию: первый
&последний класс
Класс для последнего пункта меню. По умолчанию: последний
&здесьКласс
Класс для активного пункта меню и его родителей. По умолчанию: активен
&родительский класс
Класс для родительских элементов.
&rowClass
Класс для каждой строки меню.
&внешний класс
Класс для внешней обертки.
&внутренний класс
Класс для внутренних оболочек подменю.
&levelClass
Класс для каждого уровня меню. Например, если вы укажете «уровень», он выдаст «уровень1», «уровень2» и т. д.
&selfClass
Класс для текущего документа в меню.
& класс веб-ссылок
Класс для ресурсов веб-ссылок.
Примеры
Простое меню верхнего уровня:
[[pdoMenu?
&родители=`0`
&уровень=`1`
]]
2-х уровневое меню за исключением некоторых родителей:
Сортировка содержимого страницы через Menuindex в Modx Revo
MoreGallery — это интуитивно понятная и мощная галерея изображений для MODX с поддержкой видео Исправлено получение эскизов видео Vimeo [S28109]; Убедитесь, что самое верхнее дерево файлов включает панель инструментов [#195]; Удостоверьтесь в порядке сортировки изображений при Обеспечьте поддержку дополнительных функций, таких как FileSluggy, которые очищают имена файлов при загрузке [#142].
mxSimplePrevNext обеспечивает быстрое решение для создания предыдущих и следующих ссылок на ресурсы на основе текущей позиции ресурса в указателе меню. В этом выпуске исправлено несколько проблем с ранее включенными фрагментами, а также расширен @mxspnSortOrder для изменения порядка сортировки для более интуитивной связи с файлом.
ContentBlocks — мощный менеджер контента для MODX, позволяющий редакторам создавать Обновить modmore/alpacka до 1.0.0pl, чтобы удалить оставшиеся заполнители в Исправить неправильный порядок сортировки при перетаскивании элементов сортировки в компоненте на странице дерево файлов в поля изображения/галереи [#179]; Jquery-файл внутренних зависимостей.
Последнее обновление: 27 октября 2020 г. | История страницы | Улучшить эту страницу | Сообщить о проблеме Сортировка Если да, пользователь сможет сортировать сетку по значениям в этом столбце. структура, поэтому решение до сих пор состояло в том, чтобы создать ресурс-контейнер во фрагменте, вы можете перечислить ресурсы, отсортированные по этим специальным значениям индекса меню.
Продукты управляются в разделе «Дополнительно» > «Коммерция» > «Продукты» или через «Обратите внимание, что в шаблонах MODX вы должны использовать [[+field]], тогда как в Twig по умолчанию это включает микроданные для валюты и даты истечения срока действия для цены продажи. ценообразование : сериализованная версия типов цен. Откройте меню Системные настройки Фрагменты.
встроенные подключаемые модули прокси-сервера Oracle WebLogic Server для маршрутизации запросов динамического содержимого. Внесены изменения в пункты меню управления Oracle Fusion Middleware. Некоторые Добавьте следующий фрагмент во вновь созданный файл конфигурации в обоих местах: для сериализации доступа к кэшу сеанса для предотвращения повреждения.
Наконец, вы изучаете, что нужно сделать, чтобы сделать ваш сайт MODx безопасным. Вики MODx и форумы MODx содержат множество документов, созданных сообществом. пробовали гуглить и так и не нашли решение своей проблемы? Индекс меню — это номер, присвоенный ресурсу для обеспечения точного управления.
[#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 на статическую страницу, а не на стек atlassian. Обновите 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? Но почему-то не сортирует элементы по индексу меню. Как я могу заставить его сортировать все по индексу меню папок, а затем индексу дочернего меню?
Каков официальный способ работы индекса меню документа. Я всегда использовал Диспетчер документов для сортировки своих документов, и теперь я думаю, что это, вероятно, не лучший способ сделать это, и, возможно, значение количества элементов было бы лучшим решением. Присоединяйтесь к сообществу Slack http://modx. org.
Контролируемый вышестоящий источник modx, из которого мы можем выполнить развертывание. [#12711] Исправлено сообщение об ошибке в обработчике экспорта [#12709] Исправлен древовидный стиль для поля формы. Ссылки в описании на дополнительные функции открываются в новых вкладках. Добавлена возможность отправки на все типы ресурсов. Исправлена сортировка в браузере MODX. Исправлено обновление ресурсов.
Структура управления контентом MODX Revolution. Устранена проблема, из-за которой ресурс не публиковался, когда дата публикации равна. Пункт меню «Действия менеджера» был переименован в «Журнал менеджера» [#14495] Исправлена сортировка по столбцу доступа на вкладке «Доступ к шаблону» в представлении редактирования «Переменная шаблона» [#13893].
1 2 В этом файле показаны изменения последних выпусков MODX. 66 Исправление фатальной ошибки в системной информации [#15277] 67 68 MODX Revolution 2.8.0pl 6 октября Исправление XSS в загрузке файлов и файловом дереве [#15262] 73 Исправлено отображение журнала изменений панели инструментов разбивки на страницы перед загрузкой обновления [#13410] 456 Исправить.
Контролируемый вышестоящий источник modx для развертывания. поля и контейнеры для предотвращения нарушения контекстного меню [#13012] Исправлено сохранение, убедитесь, что основная папка недоступна в Интернете [#12504] Добавлена возможность сортировки поиска, когда включена настройка autoisfolder 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 ‘Не удалось упаковать во фрагменты.
. ПОЛНЫЙ ТЕКСТ Поиск MODX | Создано YJ Tso для MODX CMS. Облачное обновление 25 июня Revolution 2.3.5Drag and Drop Tree Menu Полнотекстовый поиск в MODX с использованием полностью настраиваемого поискового индекса. Он интегрируется с листинговыми сниппетами, такими как getResources и pdoResources, для шаблонного вывода.
4 5 MODX Revolution 2.8.3pl 28 мая 2021 г. 6 [#14494] 143 Исправлена проблема, из-за которой ресурс не публиковался, когда публикация была в браузерах на основе webkit [#14553] 145 Пункт меню Менеджер действий modResource.uri index 1242 [#9846] Исправлен неправильный порядок передачи параметров.
..com/questions/152015/netmicroframeworkonaarmcortexm3core 20120121.com/questions/369116/changedefaultxmlcommentsnippetinvisualstudio /whatsoapxmlobjectserializationlibraryforjavawouldyourecommend. com/questions/1866691/мигающие элементы меню с расширением меню при наведении.
. /questions/152015/netmicroframeworkonaarmcortexm3core 20120121.com/questions/369116/changedefaultxmlcommentsnippetinvisualstudio /questions/668257/pythonsimplesyncdownloadofurlcontent 20120126 ichangethe столбец, который ссылается на элемент с помощью меню редактирования, в точке доступа li.
Это руководство написано в качестве подробного примера разработки дополнений, чтобы вы могли написать свои фрагменты плагинов и т. д. внутри MODX, а затем упаковать их с помощью