Плейсхолдеры modx revo: Методы работы с плейсхолдерами MODX

Содержание

Синтаксис тегов / Основы / Система / 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`     // параметров может быть сколько угодно, и все начинаются с &
]]                                      //закрываем тег

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

Оба варианта однозначны:

[[!getResources? &parents=`123` &limit=`5`]]
[[!getResources?
    &parents=`123`
    &limit=`5`
]]

Параметры

Все теги (а не только сниппеты) могут иметь параметры. Например, у нас есть чанк Hello:

Привет, [[+name]]!

В чанке есть плейсхолдер. Мы хотим задать значение для этого плейсхолдера. Раньше нужно было использовать сниппет, который установит это значение. Но не теперь. Просто укажите нужное значение в параметрах чанка:

[[$Hello? &name=`Сергей`]]

На выходе мы получим:

Привет, Сергей!

Кэширование

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

[[!snippet]]
[[!$chunk]]
[[!+placeholder]]
[[!*template_var]]

и т. д.

Плейсхолдеры

Если вам необходимо, чтобы сниппет каждый раз при запросе страницы устанавливал какой-то плейсхолдер, то плейсхолдер тоже нужно вызывать некэшируемым:

[[!Profile]]
Привет, [[!+username]]. 

Проверка синтаксиса

Для новичков синтаксис тегов кажется сложноватым, поэтому вы можете использовать плагин SyntaxChecker для проверки правильности написания тегов.

Также можно использовать замечательный редактор Ace, который хорошо подсвечивает синтаксив тегов MODX.

MODX синтаксис — документация на русском языке

Автор Алексей На чтение 4 мин Просмотров 2.2к. Опубликовано Обновлено

02.07.2020

Содержание

  1. Комментарии в дескрипторах (тегах).
  2. Составляющие части тегов
  3. Параметры
  4. Кэширование
  5. Плейсхолдеры
  6. Проверка синтаксиса

Абсолютно для любого пользователя сайта на 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=`Василий`]]

В итоге получим следующее:

Здравствуйте, Василий!

Кэширование

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

[[!+placeholder]]
[[!$chunk]]
[[!*template_var]]
[[!snippet]]

Плейсхолдеры

Вызвав не кэшируемый плейсхолдер, можно осуществить установку сниппетом, интересующего плейсхолдера.

[[!Profile]]
Привет, [[!+username]].
Проверка синтаксиса

Проверка корректного написания тегов можно осуществить при помощи плагина SyntaxChecker.

Аналогичную функцию может выполнить редактор Ace, отличительной особенностью которого является подсветка синтаксиса тегов MODX.

Весь список тегов доступных для MODX Revolution можно найти в официальном руководстве на сайте rtfm.modx.com

Другие элементы — Создание сайта на MODX Revolution

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

Плейсхолдеры, ссылки и системные настройки

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

$modx->setPlaceholder('имя плейсхолдера','значение')

После установки плейсхолдера это значение заменит любой соответствующий тег плейсхолдера :

[[+имя плейсхолдера]]

Многие сниппеты 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 без наличия реальной переменной.

[+phx:if=`[+this+]`:is=`[+that+]`:then=`do this`:else=`do that`+]

С некоторыми модифиакторами этот плейсхолдер приобретает определенное значение. В случае с модификатором «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.

[+phx:if=`[+price+]`:gt=`0`:then=`Цена: [+price+]`+]

— Логическое ИЛИ (проверяется, верно ли первое или второе условие).

[+phx:if=`[*id*]`:is=`2`:or:is=`3`:then=`{{Chunk}}`:else=`{{OtherChunk}}`+]

— Логическое И (проверяется, верны ли оба условия).

[+phx:if=`[!UltimateParent!]`:is=`1`:and:isnot=`[*id*]`:then=`{{ChildChunk}}`:else=`{{ParentChunk}}`+]

— Значение template отображается, когда все условия верны. Здесь можно указать вызов {{чанка}}, [[сниппета]] или же чистый HTML.

— Значение template отображается, когда все условия не верны. Здесь можно указать вызов {{чанка}}, [[сниппета]] или же чистый HTML.

— Используется подобно then, но в качестве шаблона для вывода используется исходное значение. Выполняется, если условия верны.

[+myplaceholder:len:gt=`3`:show+]

Примеры

[+myplaceholder:is=`myvalue`:then=`Правильно`:else=`Неправильно`+]
[+myplaceholder:isnot=`myvalue`:then=`Правильно`:else=`Неправильно`+]
[+myplaceholder:is=`othervalue`:then=`Правильно`:else=`Неправильно`+]
[+myplaceholder:is=`2`:then=``:else=``+]
[+myplaceholder:gt=`1`:then=`Yes`:else=`No`+]
[+myplaceholder:lt=`3`:and:gt=`1`:then=`Yes`:else=`No`+]
[+myplaceholder:lt=`[+someplaceholder+]`:then=`Yes`:else=`No`+]
[+myplaceholder:islt=`2`:then=`Yes`:else=`No`+]
[+myplaceholder:isnot=`2`:or:lt=`3`:then=`Yes`:else=`No`+]
[+myplaceholder:isnot=`2`:then=`Yes`:else=`No`+]
[+myplaceholder:gt=`[+someplaceholder+]`:then=`Yes`:else=`No`+]
[+myplaceholder:lt=`2`:then=`Yes`:else=`No`+]
[+myplaceholder:gt=`2`:then=`Yes`:else=`No`+]
[+myplaceholder:lt=`1`:then=`Yes`:else=`No`+]

Синтаксис Fenom

Оглавление

  • Плейсхолдеры с точкой или тире
  • Заполнение плейсхолдеров
  • Вывод сниппетов и чанков
  • Управление кэшированием
  • Проверка авторизации
    • Проверка администратора
  • Вывод информации о скорости работы
  • Регистрация стилей и скриптов
  • Редирект на другой сайт
  • Установка и получение значения плейсхолдера
  • Поиск id ресурса по URL
  • Для начала советую прочитать официальную документацию, а дальше мы рассмотрим синтаксис применительно к MODx.

    Все переменные от сниппетов передаются в чанк как есть, поэтому переписывать старые чанки на новый синтаксис — сплошное удовольствие.

    Базовые различия

    MODxFenom
    [[+id]]{$id}
    [[+id:default=`test`]]{$id ?: 'test'}
    [[+id:is=``:then=`test`:else=`[[+pagetitle]]`]]{$id == '' ? 'test' : $pagetitle}

    Для использования более сложных сущностей, в pdoParser предусмотрена служебная переменная {$_modx}, которая даёт безопасный доступ к некоторым переменным и методам системы.

    MODxFenom
    [[*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:

    MODxFenom
    [[~[[*id]]]]{$_modx->resource.id | url}
    [[~[[+id]]]]{$id | url}
    [[~[[!+some.placeholder]]]]

    {var $plcholder= $_modx->getPlaceholder('some.placeholder')}

    {$plcholder | url}

    [[~9]]{9 | url}
    [[#9.pagetitle]]{9 | resource : 'pagetitle'}
    [[*parent]]{$_modx->resource.parent}
    [[+parent]]{$parent}
    [[#[[!+some. placeholder]].parent]]{$_modx->getPlaceholder('some.placeholder') | resource : 'parent'}
    [[!#get]]{$.get | print_r}

    Переменные MODx

    Помимо этого, для работы вам доступны следующие переменные:

    Работа с системными настройками

    {$_modx->config} — системные настройки

    {$_modx->config.site_name}
    {$_modx->config.emailsender}
    {$_modx->config['site_url']}
    {$_modx->config['any_system_setting']}

    Работа с текущим пользователем

    {$_modx->user} — массив текущего пользователя. Если он авторизован, то добавляются и данные из профиля:

    {if $_modx->user.id > 0}
        Привет, {$_modx->user.fullname}!
    {else}
        Вам нужно авторизоваться.
    {/if}

    Работа с текущим контекстом:

    {$_modx->context} — массив с текущим контекстом

    Вы находитесь в контексте {$_modx->context. key}

    Работа с текущим ресурсом:

    {$_modx->resource} — массив с текущим ресурсом, это вы уже видели в примерах выше

    {$_modx->resource.id}
    {$_modx->resource.pagetitle}
    {$_modx->makeUrl($_modx->resource.id)}

    Работа с объектом modLexicon

    {$_modx->lexicon} — объект (не массив!) modLexicon, который можно использовать для загрузки произвольных словарей:

    {$_modx->lexicon->load('ms2gallery:default')}
    Проверка словарей ms2Gallery: {$_modx->lexicon('ms2gallery_err_gallery_exists')}

    За вывод записей отвечает отдельная функция {$_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, то его нужно получать вот так:

    {var $tag_sub_tag = $_modx->getPlaceholder('tag.sub_tag')}
    {$tag_sub_tag}
    {$_modx->getPlaceholder('tv_name')}

    При указании неправильных переменных ваш шаблон не будет скомпилирован и вы получите запись об этом в системном журнале.

    Заполнение плейсхолдеров

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

    Выполнение всей шаблонизации за один раз даёт очень высокую скорость, но также следует учитывать, что плейсхолдеры будут доступны только после отработки соответствующего сниппета.

    Например: необходимо получить значение плейсхолдера {$mse2_query} (Поисковой запрос) в форме, но форму поиска отобразить над результатами. Для этого необходимо выполнить сниппет mSearch3 и передать результаты плейсхолдеру, например searchResults:

    {'!pdoPage' | snippet : [
        'element' => 'mSearch3',
        'toPlaceholder' => 'searchResults'
    ]}

    Далее вызвать сниппет формы поиска, где парсер Fenom подставит значение плейсхолдера {$mse2_query}:

    {'!mSearchForm' | snippet}

    После чего вывести результаты работы сниппета mSearch3:

    {'searchResults' | placeholder}

    Если сниппет не умеет сохранять результаты своей работы с плейсхолдер, вы можете присваивать их переменной Fenom:

    {var $date = 'dateAgo' | snippet : ['input' => '2016-09-10 12:55:35']}
    ...
    Ваша дата: {$date}.

    Очень похоже на логику работы обычного скрипта.

    Вывод сниппетов и чанков

    Переменная {$_modx} на самом деле представляет собой простой и безопасный класс microMODX.

    Поэтому сниппеты и чанки вызываются так:

    {$_modx->runSnippet('!pdoPage@PropertySet', [
        'parents' => 0,
        'element' => 'pdoResources',
        'where' => ['isfolder' => 1],
        'showLog' => 1,
    ])}
    {$_modx->getPlaceholder('page. total')}
    {$_modx->getPlaceholder('page.nav')}

    Как видите, синтаксис практически полностью повторяет PHP, что открывает новые возможности. Например, можно указывать массивы, вместо JSON строк.

    По умолчанию все сниппеты вызываются кэшированными, но вы можете добавить ! перед именем — как в тегах MODX.

    Если для вызова сниппета используется родной метод MODX, то для вывода чанков запускается pdoTools, и вы можете использовать все его возможности:

    {$_modx->getChunk('MyChunk@PropertySet')}
    {$_modx->parseChunk('MyChunk', [
        'pl1' => 'placeholder1',
        'pl2' => 'placeholder2',
    ])}
    {$_modx->getChunk('@TEMPLATE Base Template')}
    {$_modx->getChunk('@INLINE
        Имя сайта: {$_modx->config.site_name}
    ')}
    {$_modx->getChunk(
        '@INLINE Передача перемнной в чанк: {$var}',
        ['var' => 'Тест']
    )}
    {$_modx->getChunk('
        @INLINE Передача переменной в вызов сниппета:
        {$_modx->runSnippet("pdoResources", [
            "parents" => $parents
        ])}
        Всего результатов: {$_modx->getPlaceholder("total")}
        ',
        ['parents' => 0]
    )}

    Примеры выше немного безумные, но вполне себе работают.

    Управление кэшированием

    В объекте {$_modx} доступен сервиc modX::cacheManager, который позволяет вам устанавливать произвольное время кэширование вызываемых сниппетов:

    {if !$snippet = $_modx->cacheManager->get('cache_key')}
        {set $snippet = $_modx->runSnippet('!pdoResources', [
            'parents' => 0,
            'tpl' => '@INLINE {$id} - {$pagetitle}',
            'showLog' => 1,
        ])}
        {set $null = $_modx->cacheManager->set('cache_key', $snippet, 1800)}
    {/if}
    {$snippet}

    Посмотреть этот кэш можно в /core/cache/default/, в примере он сохраняется на 30 минут (1800 секунд).

    set $null = ... нужен, чтобы cacheManager->set не вывел 1 (т.е. true) на страницу.

    А еще вы можете запускать системные процессоры (если прав хватит):

    {$_modx->runProcessor('resource/update', [
        'id' => 10,
        'alias' => 'test',
        'context_key' => 'web',
    ])}

    Проверка авторизации

    Так как объекта с пользователем в {$_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 (или любой другой) и выводить ключи через него:

    {$_modx->lexicon->load('pdotools:default')}
    {$_modx->getInfo('', true, '@INLINE {$_modx->lexicon("pdotools_" ~ $key)} => {$value}')}

    Или оформить без лексиконов, произвольно. Просто присваиваем переменной массив данных и выводим его ключи:

    {set $info = $_modx->getInfo('', false)}
    Время работы: {$info.totalTime}
    Время запросов: {$info.totalTime}
    Количество запросов: {$info.queries}
    Источник: {$info.source}

    Вывод информации только пользователям, которые авторизованы в менеджере:

    {if $_modx->hasSessionContext('mgr')}
        {$_modx->getInfo()}
    {/if}

    Регистрация стилей и скриптов

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

    {$_modx->regClientCss('/assets/css/style.css')}
    {$_modx->regClientScript('/assets/css/script.js')}

    Редирект на другой сайт

    {$_modx->sendRedirect('http://yandex.ru')}

    Установка и получение значения плейсхолдера

    {$_modx->setPlaceholder('key', 'value')}
    {$_modx->getPlaceholder('key')}

    Поиск id ресурса по URL

    С помощью метода findResource, можно найти id ресурса по URL:

    {if $res = $_modx->findResource('url-path-here')}
        {$res}
    {/if}
    // Редирект на найденную страницу
    {if $res = $_modx->findResource('url-path-here')}
        {$_modx->sendRedirect( $_modx->makeUrl($res) )}
    {/if}

    Переодически в класс добавляются новые методы, так что смотрите их в самом файле.

    Время работы: 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:is=`1`:then=`<img src="logo. svg">`:else=`<a href="[[~1]]"><img src="logo.svg"></a>`]]

    Если id страницы равен 1, вернуть логотип без ссылки, а если id не равен 1, вернуть логотип со ссылкой. Тем самым вы избавляетесь от создания двух практически идентичных шаблонов и обходитесь одним, но с модификатором вывода.

    Пример 2:

    Нам требуется вывести разные названия страницы в зависимости от шаблона.

    [[*template:is=`1`:or:is=`2`:then=`[[*pagetitle]]`:else=`[[*longtitle]]`]]

    Если шаблон страницы равен 1 или равен 2, вернуть

    [[*pagetitle]]

    ,
    иначе вернуть

    [[*longtitle]]

    Как видите, можно использовать несколько модификаторов в одной цепочке. Хотя, правильнее было бы написать так:

    [[[[*template:is=`1`:or:is=`2`:then=`*pagetitle`:else=`*longtitle`]]]]

    В следующих таблицах перечислены некоторые модификаторы PHx, которые могут быть использованы для любого тега MODx Revolution.

    Модификаторы условия

    МодификаторОписаниеПример
    if,inputif — задает дополнительное условие
    input — добавляет в тег обратываемые данные
    [[+phx:input=`/assets/img/photo.gif`]]
    — добавляем в тег phx входное значение, следующим модификатором, например, можно обработать изображение.
    Или
    [[+phx:input=`/assets/img/photo.gif`:contains=`photo.gif`:then=`da`:else=`net`]]
    проверить есть ли в пути определенная последовательность символов.
    [[*id:is=`1`:and:if=`[[*id]]`:ne=`2`:then=`da`:else=`net`]]
    — если id-ресурса = 1 и не равно 2, выводим «da», или же «net»
    or,andor — условие «ИЛИ»
    and — условие «И»
    [[*id:is=`1`:or:if=`[[*id]]`:is=`2`:then=`da`:else=`net`]]
    — если id-ресурса = 1 или = 2, выводим «da», или же «net».
    [[*id:is=`1`:and:if=`[[*id]]`:ne=`2`:then=`da`:else=`net`]]
    — если id-ресурса = 1 и не равно 2, выводим «da», или же «net»
    isequalto, isequal, equalto, equals, is, eqЕсли тег равен модификатору, используется с «then» и «else.»
    [[*id:is=`1`:then=`da`:else=`net`]]
    — если id-ресурса = 1, выводим «da», или же «net»
    notequalto, notequals, isnt, isnot, neq, neЕсли тег не равен модификатору, используется с «then» и «else».
    [[*id:ne=`1`:then=`da`:else=`net`]]
    — если id-ресурса не равно 1, выводим «da», или же «net»
    greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gteЕсли тег больше или равен модификатору, используется с «then» и «else».
    [[*id:ge=`1`:then=`da`:else=`net`]]
    — если id-ресурса больше или равен 1, выводим «da», или же «net»
    isgreaterthan, greaterthan, isgt, gtЕсли тег больше модификатора, используется с «then» и «else».
    [[*id:gt=`1`:then=`da`:else=`net`]]
    — если id-ресурса больше 1, выводим «da», или же «net»
    equaltoorlessthan, lessthanorequalto, el, le, islte, lteЕсли тег меньше или равен модификатору, используется с «then» и «else».
    [[*id:el=`10`:then=`da`:else=`net`]]
    — если id-ресурса меньше или равно 10, выводим «da», или же «net»
    islowerthan, islessthan, lowerthan, lessthan, islt, ltЕсли тег меньше модификатора, используется с «then» и «else».
    [[*id:lt=`10`:then=`da`:else=`net`]]
    — если id-ресурса меньше 10, выводим «da», или же «net»
    containsЕсли тег содержит модификатор, используется с «then» и «else».
    [[+author:contains=`Сэ́мюэл Кле́менс`:then=`Марк Твен`]]
    — если в теге содержится фраза «Сэ́мюэл Кле́менс» выводим «Марк Твен»
    containsnotЕсли тег не содержит модификатор, используется с «then» и «else».
    [[+author:containsnot=`Сэ́мюэл Кле́менс`:then=`Кто-нибудь еще`]]
    — если в теге не содержится фраза «Сэ́мюэл Кле́менс» выводим «Кто-нибудь еще»
    hideЕсли предыдущий модификатор возвращает положительное значение («then»), то не выводим обработанный тег.
    [[*id:is=`10`:hide]]
    — если id-ресурса = 10, ничего не выводим
    showЕсли предыдущий модификатор возвращает положительное значение («then»), то выводим обработанный тег.
    [[*id:is=`10`:show]]
    — если id-ресурса = 10, выводим.
    thenУсловие, если тег соответствует модификатору, выводим сообщение, иначе ничего не выводим
    [[*id:is=`10`:then=`ept`]]
    — если id-ресурса = 10, выводим «ept».
    elseУсловие, если тег не соответствует модификатору, выводим сообщение. Используется только в связке с «then»
    [[*id:is=`10`:then=`ept`:else=`nooo`]]
    — если id-ресурса = 10, выводим «ept» иначе «nooo».
    selectУстановить свое значение, в зависимости от модификатора и вывода тега. Так же можно использовать «else», например если значение
    [[+controls]]
    — не подходит под шаблон select
    [[+controls:select=`0=ВЫКЛ&1=ВКЛ&2=ХЗ`:else=`Ошибка`]]
    — если тег
    [[+controls]]
    — выводит «0», значит выводим «ВЫКЛ», если тот же тег равен «1» выводим «ВКЛ», если «2» выводим «ХЗ», если тег не подходит нашей выборке, то выводим «Ошибка».
    inРаботает аналогично php in_array, если тег совпадет с одним из элементов модификатора (разделяются они запятыми), то выводим then, если не совпало else
    [[*template:in=`3,4`:then=`[[$myChank]]`:else=`пробел`]]
    — если тег
    [[*template]]
    (текущий шаблон) — равен «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.
    [[+cssTV:cssToHead]]
    перед закрывающим тегом </head> регистрирует CSS, например: <link rel=»stylesheet» href=»значение +cssTv» type=»text/css» />
    htmlToHeadВписывает значение тега перед закрывающим тегом </head>. Используется modX.regClientStartupHTMLBlock.
    [[+htmlTV:htmlToHead ]]
    перед закрывающим тегом </head>, регистрирует значение тега
    [[+htmlTV]]
    в HTML код.
    htmlToBottomВписывает значение тега перед закрывающим тегом </body>. Используется
    modX.regClientHTMLBlock
    [[+htmlTV:htmlToBottom]]
    перед закрывающим тегом </body> регистрирует значение тега
    [[+htmlTV]]
    в HTML код.
    jsToHeadПрописывает файл JS в <link> элемент перед закрывающим тегом </head>. Используется
    modX.regClientStartupScript
    [[+jsTV:jsToHead]]
    перед закрывающим тегом </head>, регистрирует JS, например: <script type=»text/javascript» src=»значение +jsTv»></script>
    jsToBottomПрописывает файл JS в <link> элемент перед закрывающим тегом </body>. Используется
    modX.regClientScript
    [[+jsTV:jsToBottom]]
    перед закрывающим тегом </body>, регистрирует JS, например: <script type=»text/javascript» src=»значение +jsTv»></script>
    urldecodeАналогично функции php urldecode
    [[+stringi:urldecode]]

    Внутренний ключ пользователя:

    [[!+modx.user.id:userinfo=`internalKey`]]

    Логин:

    [[!+modx. user.id:userinfo=`username`]]

    Полное имя:

    [[!+modx.user.id:userinfo=`fullname`]]

    Роль:

    [[!+modx.user.id:userinfo=`role`]]

    E-mail:

    [[!+modx.user.id:userinfo=`email`]]

    Телефон:

    [[!+modx.user.id:userinfo=`phone`]]

    Мобильный телефон:

    [[!+modx.user.id:userinfo=`mobilephone`]]

    Факс:

    [[!+modx.user.id:userinfo=`fax`]]

    День рождения:

    [[!+modx.user.id:userinfo=`dob`:date=`%Y-%m-%d`]]

    Пол:

    [[!+modx.user.id:userinfo=`gender`]]

    Страна:

    [[!+modx.user.id:userinfo=`country`]]

    Штат:

    [[!+modx.user.id:userinfo=`state`]]

    Zip код:

    [[!+modx. user.id:userinfo=`zip`]]

    Фото:

    [[!+modx.user.id:userinfo=`photo`]]

    Комментарий:

    [[!+modx.user.id:userinfo=`comment`]]

    Дата последнего входа:

    [[!+modx.user.id:userinfo=`lastlogin`:date=`%Y-%m-%d`]]

    Количество входов:

    [[!+modx.user.id:userinfo=`logincount`]]
    [[!+modx.user.id]]

    возвращает ID вошедшего в систему пользователя. Вы, конечно, можете заменить, его на

    [[*createdby]]

    или другое поле ресурса или любой плейсхолдер, который возвращает числовое представление ID пользователя.

    Обратите внимание, что ID пользователя и его логин уже доступны по умолчанию в MODX, так что вам не нужно использовать модификатор User Info:

    [[!+modx.user.id]]

    — Выведет ID пользователя

    [[!+modx. user.username]]

    — Выведет логин пользователя

    Особое внимание обращаем на восклицательный знак !

    [[!+modx.user.id]]

    Он позволяет НЕ кэшировать содержимое вывода. Лучше всего эти плейсхолдеры вызывать некешируемыми, чтобы избежать неожиданных результатов. Почему нужно не кешировать…

    Представим это так: на сайте 5 пользователей. Первый пользователь зашел на страницу с вызовом:

    Добро пожаловать, [[!+modx.user.id:userinfo=`username`]]!

    По задумке на этой странице, выводится приветственное сообщение пользователю. Так вот, если результат будет кешироваться, то при первом входе на эту страницу — сохранится имя пользователя который только что зашел — и всем остальным будет показываться не их имя, а имя того пользователя который вошел на эту страницу первым. Чтобы этого избежать — просто не кэшируем этот тэг, с помощью восклицательного знака перед вызовом !+modx…

    Также фильтры можно использовать несколькими способами (что уменьшает время их выполнения)

    Используем модификатор:

    [[+title:lcase]]
    [[+something:notempty=`Hello[[+name]]`]]

    Используем сниппет:

    [[lcase? &subject=`title`]]
    [[notempty? &subject=`something` &then=`Hello[[+name]]`]]

    Используем общий сниппет фильтра:

    [[Filter? &subject=`title` &operator=`lcase`]]
    [[Filter? &subject=`something` &operator=`notempty` &meter=`Hello [[+name]]`]]

    P. S: Не забываем включить кэширование тегов, где нужно. Чтобы это сделать — нужно ИЗБАВЛЯТЬСЯ от восклицательных знаков (!). Результаты большинства сниппетов вплоне себе могут работать из кэша.

    Спасибо источникам информации: http://modx.ws и https://gaserge.ru

    Руководство по кэшированию

    для MODX Revolution :: Mark Hamstra

    Эта статья также переведена на русский язык. Знаете другие переводы? Дай мне знать!

    MODX имеет очень детальные возможности кэширования. В то время как Evo ограничивает кеширование только фрагментами и имеет другие ограничения с точки зрения встраивания тегов в теги, MODX Revolution таких ограничений не имеет.

    В MODX Revolution вы можете кэшировать/декэшировать любой тег, который вы можете использовать. Это включает в себя фрагменты, а также настройку тегов, заполнителей, фрагментов и даже строк лексикона. Эта статья расскажет вам о некоторых причинах , когда вызывать то, что кэшировано в MODX Revolution (но это сэкономит вам большую часть внутренней работы).

    Важно понимать, что если вы не выполняете действительно сложные действия и не переопределили основное кэширование, кеш будет очищен, когда вы: сохраните ресурс, элемент и в некоторой степени настройки. Таким образом, в основном, всякий раз, когда изменяется ваш контент или структура — ваш кеш будет обновляться, чтобы отразить это .

    Как указать MODX (не) кэшировать определенный тег?

    Просто добавьте восклицательный знак (!) перед токеном. Токен представляет собой знак доллара ($) для фрагментов, знак плюса (+) для заполнителей, знак процента (%) для словарей и звездочку (*) для полей ресурсов и переменных шаблона. Фрагменты не имеют токена.

    Примеры из кэша:

     [[Wayfinder]] 
     [[$chunkname]] 

    Пример из кэша:

     [[!Wayfinder]] 
     [[!$chunkname]] 
    018
    1. Кэшируйте все, что можете .
      В общем случае вы захотите кэшировать как можно больше — зачем MODX извлекать контент из базы данных при каждом запросе, если он не изменился? Хотя это может показаться логичным (и редко возникает вопрос, следует ли использовать кэшированные поля ресурсов или нет), то же самое относится и к другим тегам. Если вывод сниппета не меняется при каждом запросе, зачем MODX анализировать сниппет при каждом запросе? Это не должно.
    2. Пользовательский вывод должен быть некэширован.
      Все, что выводит информацию о пользователе, должно быть удалено из кэша. Простой — любой запрос может быть сделан разными пользователями, поэтому нет смысла загружать специфичную для пользователя информацию из кеша. Это относится к сниппетам, которые взаимодействуют с пользовательской системой (пакет Login, компонент Wishlist, а также Quip для комментирования), а также к несколько менее известному заполнителю [[!+modx.user.id]].
    3. Содержимое, связанное с параметрами URL или данными POST, необходимо удалить из кэша.
      Если вы используете форму, которая отображает информацию о том, что было опубликовано, вы не хотите, чтобы это было исправлено и кэшировано. Так что назовите это некешированным. Если ваш вывод отличается в зависимости от (не id/q) параметров URL (например, страницы результатов поиска), вы должны убедиться, что связанный фрагмент не кэшируется.
    4. При необходимости используйте пользовательское кэширование.
      Если данные (во фрагменте) изменяются до того, как кэш был очищен, например, если данные извлекаются из внешнего источника XML, который изменяется независимо от вашего контента MODX, вам может потребоваться использовать собственный метод кэширования, такой как фрагмент getCache. или написать собственное кэширование в коде сниппета.

    Исключения

    Конечно, есть исключения… на самом деле, я пока смог придумать только одно: ( Обновлено 26 октября , придумал еще одно!)

    • site_url, http_host и связанная система настройки можно назвать некэшированными. Если у вас есть определенная настройка, в которой одна комбинация ресурсов и шаблонов может обслуживать несколько URL-адресов, вам нужно убедиться, что соответствующие системные настройки вызываются без кэширования. Одним из распространенных приложений для этого является ваш тег для удобных URL-адресов: вы должны быть уверены, что ваши ресурсы обслуживаются из того же домена, что и пользователь, который посетил. Вопрос о том, следует ли принудительно использовать www/no www через htaccess, — это совсем другое обсуждение, но оно очень сильно связано с этим и является общей причиной проблем.
    • Фрагменты, которые (могут) перенаправлять или пересылать в другое место, обычно должны быть не кэшированы, поскольку результат может быть пустым, но обработка фрагмента выполняет работу по перенаправлению пользователя.

    Распространенные ошибки

    1. Вызов фрагмента «if» без кэширования, когда предметом является поле ресурса. Скорее всего, из-за того, что в документации есть некэшированные примеры, многие люди неправильно используют сниппет If, не кэшируя его, когда тема статична в течение времени жизни кеша.
    2. Вызов фрагмента «Wayfinder» без кэширования. Пожалуйста, не надо! Wayfinder особенно сильно повлияет на производительность вашего веб-сайта с большими меню. Единственная веская причина, по которой я могу вызвать Wayfinder без кэширования, — это когда вывод зависит от пользователя (например, область только для членов).
    3. Декэширование заполнителей в чанках, которые используются в качестве шаблонов в сниппетах. Некэшированные заполнители обрабатываются в последний возможный момент, и вызов их некэшированными в шаблоне оставит их в неприкосновенности, и они не будут заменены фрагментом, а вместо этого будут заменены основным синтаксическим анализатором спустя долгое время после того, как фрагмент будет сделан. (Это поведение претерпело некоторые изменения/ошибки в выпусках 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-х уровневое меню за исключением некоторых родителей:

     [[pdoMenu?
        &parents=`-10,-15`
        &уровень=`2`
        &checkPermissions=`загрузить,список,просмотр`
    ]] 

    Меню, сгенерированное из двух родителей, с указанием родителей:

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

    Список всех ресурсов за один шаг:

     [[pdoMenu?
        &родители=`0`
        &уровень=`2`
        &tplInner=`@INLINE [[+wrapper]]`
        &tplParentRow=`@INLINE  ([[+children]] )[[+обертка]]`
        &countChildren=`1`
    ]] 

    Сортировка содержимого страницы через 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, а затем упаковать их с помощью .

    . вы можете вызвать этот фрагмент, используя [[helloWorld]] в своих шаблонах документов. Это полезно, если ваш фрагмент принимает переменные параметры, он обрабатывает абстракцию SQL. Это означает, что вы можете написать код, который работает в формате .

    Я ищу руководящие принципы, учебные пособия, рабочие примеры и т. д. по написанию заполнителя в содержимом документа и позволяю анализатору документов MODx обрабатывать заполнитель.

    У нас была повторяющаяся проблема с выпадающими меню навигации. навигация в виде пунктов подменю; Навигационный элемент, не имеющий собственного содержания. Чтобы настроить его в MODX, мы используем фрагмент кода pdoMenu, который является частью pdoTools.

    Перейти к содержимому. Зарегистрироваться выпадающее меню|125417 расширенных сниппетов|844. бпитон| caliburn.micro|7720 modxtv|2. получить вид | 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]. Что я хочу, так это то, что когда я посещаю дочернюю страницу [1], я перенаправляюсь.

    snippet.firstchildredirect.php modxevolution1.1.0pl Этот фрагмент перенаправляет на первый дочерний документ папки, в которой это автоматически перенаправляет на.

    Скорее цель этого фрагмента — сортировка по индексу меню дочерних элементов. Скажем, например, как и я, вы создали 73 документа в родительском документе и не установили меню.

    FirstChildRedirect обновлен для MODX 2.1 и выше. текущий документ Используйте параметр docid, чтобы этот фрагмент перенаправлялся на первый дочерний документ документа.

    Пользователь щелкает элемент ссылки и перенаправляется к его дочернему элементу. Вот официальная документация http://rtfm. modx.com/display/ADDON/FirstChildRedirect.

    FirstChildRedirect — это фрагмент, который перенаправляет определенный ресурс на его первый дочерний ресурс. Есть версия как для Revolution, так и для Evolution.

    Это упрощенный набор правил синтаксического анализатора и модификаций вывода, который позволяет вам манипулировать данными на уровне вашего представления, то есть в ваших фрагментах и ​​шаблонах.

    Цель — это место, куда плагин должен перенаправить посетителя или робота Google! к. Вы можете ввести это как фактический URL-адрес, например, new/location/for/contact.html.

    Ловушка перенаправления перенаправит пользователя на указанный ресурс, когда его форма завершит отправку. Требуется один параметр redirectTo который.

    modx не может долго экономить ресурсы долго экономит ресурсы. ContentSecurityPolicy Symbols arduinoesp8266gravityformsплагин angularchartотелло.

    11 августа 2015 г. Выпуск дополнительных обновлений Robot Robbie для недели 33. Наш верный Release Robot BlogIt 1.0.0pl выпущен в 20150810 Просмотр журнала изменений..

    поле вводного текста, также известное как сводка. Часто используется Snippets для обобщения сообщений, например.

    [[вводный текст]]
    .

    Использование сниппета. После того, как вы установили сниппет, вы можете использовать его, просто поместив его теги в свой шаблон, фрагмент, ТВ или документ.

    В приведенном ниже примере демонстрируется простой шаблон, в котором content Результат этого фрагмента на момент написания выводит значение Drizzle.

    Мы поместили это здесь, потому что часто сниппет использует чанки для форматирования данных. НЕ чрезмерно полагайтесь на логику модификатора вывода!. Что такое вывод.

    . Фрагмент, который вы написали и хотите добавить CSS и/или JavaScript на свои страницы, но не хотите настраивать собственный шаблон.

    Теперь вы создали гибкий мощный фрагмент. Доступные заполнители зависят от того, какой массив передается в modx>getChunk; или тпл>.

    Что такое плагин?. Плагины похожи на сниппеты в том, что они представляют собой фрагменты PHP-кода, которые имеют доступ к API MODX. Большая разница.

    В этом документе: Шаблоны фрагментов В этом руководстве показано, как это сделать во фрагменте. сначала получите кусок шаблона в переменной tpl.

    Фрагменты — это метод, с помощью которого MODX позволяет запускать динамический PHP-код на любой из ваших страниц. Они являются основным двигателем развития.

    26 марта 2019 года мы запустили новые форумы MODX. Присоединяйтесь к нам на новых форумах сообщества MODX. Вернуться к форумам MODX.com Документы Revo Issues.

    Затем перейдите на вкладку «Параметры ввода» и установите для параметра «Тип ввода» значение «Флажок», а в разделе «Значения параметров ввода» введите «Я нашел решение на форумах Modx».

    Для некоторых написание фрагмента кода MODX может стать их первым набегом на программирование. Вот несколько советов как для новичков, так и для опытных разработчиков.

    Как и почти все в графическом интерфейсе MODX, вы можете получить доступ к переменным шаблона и их значениям через API MODX. Это зависит от xPDO.

    Для некоторых написание фрагмента кода MODX может стать их первым набегом на программирование. Вот несколько советов как для новичков, так и для опытных разработчиков.

    Шаблоны обычно содержат теги разметки HTML, которые определяют любые теги, включая фрагменты фрагментов переменных шаблона и другие.

    Сниппеты — это ответ MODX на встроенный PHP-код. Они предоставляют настраиваемый динамический контент, такой как меню блога или поиск в списках новостей.

    MODX предлагает разработчикам дополнений множество вариантов того, как вставлять пользовательские CSS/JS на свои страницы на уровне сниппета. Однако MODX также.

    Fix Tree Sorting 1.0.0pl | Держите свои ресурсы в последовательном порядке indexindex без пропусков | Создан Майклом Сноу для MODX CMS.

    Fix Tree Sorting 1.0.0pl | Держите свои ресурсы в последовательном порядке indexindex без пропусков | Создан Майклом Сноу для MODX CMS.

    Обзор разработки MODX Базовая разработка. Среда разработки Написание фрагментов Написание плагинов Пользовательские страницы менеджера.

    Часто используемые теги в Modx

    Автор Arnel Custodio

    Просмотров: 1 187

    Опубликовано: 29 января 2013 г.

    Комментарии: 0 CMS. Есть много тегов, которые можно использовать с Modx Revolution, но вы обнаружите, что некоторые типы тегов будут использоваться чаще, чем другие. В следующей статье определяются типы тегов и перечислены некоторые из наиболее распространенных тегов в Modx.

    Modx Revolution имеет две основные группы тегов: Элементы контента и Теги контента. Теги элементов контента — это теги, которые непосредственно представляют элементы на веб-странице, генерируемые Modx. Они соответствуют элементам, которые может использовать Modx. Теги содержимого представляют собой значения и настройки, которые можно изменить в Modx. Вот несколько таблиц, показывающих основные типы используемых тегов:

    Теги элементов контента

    .
    Переменные шаблона [[* шаблонная переменная ]] Пользовательское поле, используемое Modx
    Кусочки [[$имя блока]] Текст, который можно повторно использовать на сайте (например, контактная информация)
    Фрагменты [[фрагмент]] В соответствии с определением Modx Revolution сниппеты – это короткие повторно используемые фрагменты компьютерного кода
    Поля ресурсов [[*поле]] Может представлять различные поля в ресурсе. Например:  [[*pagetitle]]


    Теги содержимого

    Это наиболее часто используемые 5 основных типов тегов содержимого. В следующей таблице перечислены различные теги, формат тега и краткое описание каждого типа тега:

    Тег.
    Заполнители [[+заполнитель]] Заполнители — это, как правило, текстовые маркеры, которые указывают, где текст будет вставлен в тег на странице или в шаблоне
    Звенья [[~ссылка]] Теги ссылок используются для представления веб-ссылок на страницу. Пример:  Главная
    Системные настройки [[++настройка_системы]] позволяет добавлять специальные настройки Modx System. Например, вы можете определить системные настройки электронной почты, которые изменяют существующую системную настройку Modx
    Язык [[%language_string_key]] Позволяет указать язык на странице или в шаблоне
    Комментарий [[-текст комментария]] Тег, используемый для размещения комментария на странице или в шаблоне

     

    Часто используемые теги

    Следующая таблица тегов взята прямо из документации Modx Revolution, но не содержит ВСЕ доступные теги. Это просто сводный список часто используемых тегов, чтобы четко перечислить типы тегов и предоставить сводную справку по этим часто используемым тегам.

    Теги поля содержимого ресурса по умолчанию

    Тег идентификатора ресурса [[*id]] Идентификатор ресурса — это номер, назначаемый Modx при создании ресурса. Пример использования: Отметить эту страницу
    Бирка заголовка [[*название страницы]] Название создаваемого ресурса. Пример:[[*pagetitle]]
    Тег длинного заголовка [[*длинное название]] Длинное название ресурса. Пример кода:

    [[*longtitle]]

    Псевдоним [[*псевдоним]] Псевдоним страницы. Используется при формировании URL-адреса страницы с дружественными URL-адресами. Пример: http://thewebsite.com/smootheasyURL (smootheasyURL будет псевдонимом URL)
    Описание [[*описание]] Описание страницы. Пример: />
    Интротекст [[*интротекст]] Вводный текст страницы. Пример:
    [[*introtext]]
    Родительский [[*родительский]] ID родительской страницы (Modx устанавливает это значение)
    Заголовок меню [[*название меню]] Заголовок, используемый страницей в том виде, в каком он отображается в системе меню
    Содержание [[*контент]] Содержание страницы. Пример:[[*content]]

     

    Общие системные теги

    URL сайта [[++сайт_url]] Системный тег, содержащий URL-адрес веб-сайта. Пример:
    Название объекта [[++имя_сайта]] Содержит имя сайта. Пример:[[++site_name]]
    Стартовая страница веб-сайта [[++сайт_старт]] Определяет домашнюю страницу вашего веб-сайта. Пример: Главная

    Формат, используемый системными тегами в Modx Revolution, всегда будет начинаться с «[[++» . Каждую из этих настроек можно найти в внутреннем интерфейсе Modx в разделе System>System Settings .

    Modx использует множество других тегов. По мере того, как вы приобретете опыт использования Modx, ваши знания о доступных тегах будут расти. Использование этих тегов в среде Modx поможет создать гораздо более надежный и гибкий веб-сайт. Если вы хотите увидеть пример тега, используемого на веб-сайте Modx, перейдите по ссылке:  Как использовать тег фрагмента в Modx .

     

    Разработка • ContentBlocks • modmore.com

    ContentBlocks — это мощный менеджер контента для MODX, позволяющий редакторам создавать модульный многоколоночный контент.

    Купи сейчас или попробовать бесплатно


    Последние выпуски

    Выпущено 01.07.2022

    Выпущено 01.07.2022

    • Исправлен z-индекс для выбора и множественного выбора, когда они открываются вверх, а не вниз. [#659]
    • Исправление несоответствия строгих проверок типов в MODX3 [S32003]; разрешает ссылки на ресурсы/чанки/парсеры/источники мультимедиа, которые больше не разрешаются в cbGetFieldContent, cbHasField, входных данных чанков, загрузках изображений
    • Исправлен неправильный индекс массива при упаковке события ContentBlocks_RenderContent. [#673]
    • Добавить MODX\Revolution\modDocument, Articles\Model\Article and Collections\Model\CollectionContainer в системную настройку contentblocks.accepted_resource_types. [#669]
    • Убедитесь, что новые области настройки формы не удаляются при рендеринге холста в MODX3. [#672]

    Дата выпуска: 28 января 2022 г.

    Дата выпуска: 28 января 2022 г. [#656]

  • Исправлено отсутствие выходных данных для настройки поля с множественным выбором. [#655]
  • Исправлено поле холста в MODX 3 при позиционировании в виде блока и добавление отступов в построитель шаблонов. [#654]
  • Исправлена ​​ошибка, из-за которой построитель шаблонов ломался, когда для contentblocks.canvas_position установлено значение block, tab1 или tab2. [#657]
  • Исправлены некоторые значки, которые не отображались в MODX 3 из-за перехода на FontAwesome 5. [#658]
  • Дата выпуска: 07 января 2022 г.

    Дата выпуска: 07 января 2022 г. [#645]

    Исправление ошибок:

    • Исправление неправильной загрузки раскрывающихся полей в шаблонах [47497be]
    • Исправление некорректной загрузки полей множественного выбора в шаблонах [54dede5]
    • Исправлена ​​проблема с z-индексом для раскрывающихся полей с включенным поиском в модальных окнах при редактировании шаблонов [b4bdff4]

    Дата выпуска: 16 декабря 2021 г.

    Дата выпуска: 16 декабря 2021 г.

  • Добавьте режим ввода для стандартных раскрывающихся полей и выберите настройки. [#642]
  • Исправление ошибок:

    • Исправьте новые поля описания, которые не обновлялись для настроек. [#637]
    • Исправлено неправильное изменение размера сетки на странице менеджера. [#640]
    • Исправлена ​​​​ошибка, из-за которой настройки множественного выбора не отображались правильно в модальных окнах [# 636]
    • Исправлена ​​​​ошибка, из-за которой множественный выбор отображался как настройки, отображающие только последний, если используется более одного макета одного типа [# 638]
    • Исправление с «Использовать ContentBlocks?» комбо для MODX 3. x [#633]
    • Исправить ширину текстового поля ошибки «нет макета по умолчанию» [# 633]
    • Исправлено отображение «неопределенного» в поле шаблона при создании нового типа ввода [# 634]
    • Исправлена ​​ошибка при использовании runProcessor при обновлении настроек макета в MODX 3.x [#635]
    • Исправить неверный URL-адрес для ошибки «Макет запрошен, но не существует»
    • Исправлена ​​ошибка, из-за которой на странице менеджера можно было щелкнуть скрытую вкладку-разделитель. [#641]
    • Исправлена ​​ошибка, при которой обработка загрузки изображения не сохраняла анимацию. [#639]

    Выпущено 19 ноября 2021 г.

    Выпущено 18 ноября 2021 г.

    • Исправление неправильно связанного CSS для множественного выбора ввода
    • Устранение проблем с предварительным просмотром ресурсов с помощью MagicPreview, которые не используют ContentBlocks

    Выпущено 17 ноября 2021 г.

    Выпущено 17 ноября 2021 г.

  • Добавьте описание содержимого в поля, которые можно использовать для предоставления дополнительной информации или инструкций редакторам на холсте [#340]
  • Разрешить перестроение контента для одного конкретного контекста [#604]
  • Добавить простой тип ввода флажка, особенно полезный для повторителей [#577]
  • Добавить ввод и тип настройки Color Picker для удобного выбора пользовательских цветов [# 460]
  • Добавить вход с множественным выбором и тип настройки [#327]
  • Улучшения:

    • Немного расширить модальные окна в компоненте для упрощения редактирования шаблона [#597]
    • Показывать клавиши и ширину подполей при редактировании повторителей [#617]
    • Ключ контекста передается вместе с запросом ajax для раскрывающегося списка [# 563]

    Исправление ошибок:

    • Исправить TinyMCE-RTE 2.x, не работающий после перетаскивания [# 614]
    • Fix TinyMCE-RTE 2.x загружается только в первый раз при открытии в качестве модального параметра [# 614]
    • Исправить проблему z-индекса TinyMCE-RTE 2. x как с диалоговым окном ссылок, так и с раскрывающимися меню [# 614]
    • Исправить обрезку изображения, не находящую исходный файл, если источник изображения был изменен по умолчанию при выборе [# 631]

    Выпущено 27 октября 2021 г.

    Выпущено 27 октября 2021 г.

    Выпущено 22 мая 2021 г.

    Выпущено 22 мая 2021 г.

    • Сохранить прозрачность загружаемых изображений [S26789,S27919]
    • Сохранять прозрачность отображаемого изображения, когда в поле изображения установлен «Размер эскиза менеджера» [#533]
    • Использовать клетчатый фон в кадраторе для изображений с прозрачностью
    • Отключите кнопки импорта/экспорта в группах повторителей, так как они не будут правильно импортированы в другие места
    • Дублирование повторителя теперь также будет дублировать его подполя [S27932]
    • Переопределить механизм хранения базы данных по умолчанию как InnoDB
    • Исправьте область ввода изображения, чтобы настройки открытого изображения не влияли на поле родительского изображения [# 569]

    Выпущено 04 марта 2021 г.

    Выпущено 05 марта 2021 г.

    • Рефакторинг экспорта и импорта для поддержки вложенных полей (повторителей), а также для включения категорий. Синтаксис XML был изменен для поддержки этого, и для успешного импорта повторителей потребуется воссоздать старые экспорты. [#350]
    • Поддержка привязки @FILE для всех шаблонов [#501]
    • Экспорт полей и макетов теперь учитывает фильтр категорий, поэтому вы можете экспортировать только элементы в определенной категории
    • Компонент теперь показывает установленную версию ContentBlocks в нижнем колонтитуле
    • Исправить отсутствующий текст в окне подтверждения экспорта шаблонов
    • Исправление статических фрагментов в cbGetFieldContent, которые не обновляются [#584]
    • Запретить изменение цветовой палитры при загрузке изображений [S26789]

    Дата выпуска: 19 февраля 2021 г.

    Дата выпуска: 19 февраля 2021 г.

  • Обновите Ace, чтобы исправить проблему с вводом кода, которая начала появляться в версии 1. 9.0 [#596]
  • Заменить библиотеку, используемую для автоматического увеличения текстовых областей и ввода цитат, чтобы обеспечить лучший пользовательский интерфейс и более надежное автоматическое изменение размера. Для совместимости со сторонними производителями старая библиотека по-прежнему поставляется как часть ContentBlocks. [# 594]
  • Предотвращение отображения литерала «NULL» в раскрывающемся списке ссылок на ресурсы, если для вступительного текста установлено значение NULL в базе данных [#588]
  • Разрешить включение/отключение для каждого шаблона с помощью свойств шаблона: https://docs.modmore.com/en/ContentBlocks/v1.x/Configuration.html#page_Enable%2FDisable+by+template [#559]
  • Выпущено 09 февраля 2021 г.

    Выпущено 09 февраля 2021 г.

    Новые возможности:6x4096px) и удалить встроенные метаданные (по умолчанию отключено)

  • Загруженные изображения теперь автоматически поворачиваются при необходимости
  • Добавьте редактор в contentblocks. defaults_allowed_inputs, чтобы типы ввода Redactor 3 распознавались как форматированный текст. Это применимо только к новым установкам, поэтому при обновлении вам нужно будет добавить это в настройку вручную. [#576]
  • Уменьшите требуемую версию PHP до 7.2+, продолжая проверять рекомендуемые версии
  • Поддержка основных заполнителей в тегах шаблона @CHUNK, например. @CHUNK SomeChunk-[[+value]] [#593]
  • Добавлено несколько новых иконок (спасибо, Яна!) [#364]
  • Исправление ошибок, улучшения:

    • Установка исправления на MODX3 [F2065]
    • Улучшена обработка всплывающих подсказок при добавлении содержимого или макетов [S24342]
    • Предотвращение фатальных ошибок во фрагментах и ​​подключаемом модуле в случае сбоя удаления [S25384]
    • Исправлено сохранение параметров доступности при создании нового поля [#575]
    • Предотвратить блокировку сеанса при использовании сеансов PHP из-за зависания консоли содержимого перестроения [# 574/F1991]
    • Обновите Imagine до версии 1. 2.4 и добавьте служебный метод getImagine() в класс обслуживания ContentBlocks
    • .
    • Переместить каталог поставщиков на одну папку вверх

    Выпущено 07 февраля 2020 г.

    Выпущено 07 февраля 2020 г.

    • Теперь совместимо с MODX3 (alpha2)
    • Исправлено отсутствие нумерации страниц при выборе фрагмента при редактировании поля фрагмента, в котором выбран фрагмент [S21664]
    • Небольшие исправления проверки лицензии
    • Исправлены размеры столбцов сетки в MODX3
    • Исправлено отсутствие создания экземпляра в MODX3 из-за измененных имен классов
    • Запретить установку, если требования к серверу не выполняются

    Дата выпуска: 15 ноября 2019 г.

    Дата выпуска: 15 ноября 2019 г.

    Выпущено 11 ноября 2019 г.

    Выпущено 2019 г.-11-11

    • Предотвращение запуска удаления изображения из галереи [S21323]
    • Предотвращение влияния стилей текстовой области на представление кода в Redactor 3
    • Убедитесь, что все активы для типов ввода всегда загружены, чтобы устранить проблемы с созданием новых полей из сторонних типов ввода
    • Убедитесь, что выбранный фрагмент отображается, если он не входит в первый набор из 20 фрагментов [S20691]

    Выпущено 08. 08.2019

    Выпущено 2019 г.-08-08

    • Обновить файл обрезки, если он уже существует [S20407]
    • Убедитесь, что ошибки обрезки видны [S20651]
    • Установите переменную JavaScript, чтобы указать, что ContentBlocks будет отображать поле содержимого; таким образом редакторы форматированного текста могут принять решение не отображать содержимое в фоновом режиме. Это повышает производительность менеджера и предотвращает появление ошибок в консоли разработчика (с Redactor 2.3.7).
    • Добавить отсутствующее событие ContentBlocks_RenderContent в пакет
    • Убедитесь, что выходные данные события, вызванного рендерингом контента (например, выборка ТВ-путей или событий рендеринга), не просачиваются из ContentBlocks::generateHtml [S20522]
    • Обновите обработчик загрузки, чтобы перехватывать переименованные файлы в MODX 3 (примечание: MODX 3 пока официально не поддерживается) [#558]

    Выпущено 02 июля 2019 г.

    Выпущено 02 июля 2019 г.

    • Исправить исключения при синтаксическом анализе ресурсов, которые не обрабатываются при перестроении содержимого
    • Исправить неправильное использование переменной, вызывающее ошибку в исключении парсера
    • Исправление вставки ссылок в настройках форматированного текста Redactor из-за проблем с z-индексом [S20388]
    • Исправить потенциальные ошибки чтения для getimagesize() во входных данных галереи

    Выпущено 21.06.2019

    Выпущено 21.06.2019

    • Добавлено 3 новых значка (layout_img_left, layout_img_right, layout_img_top) в стандартный набор, благодаря Ralph1 de Groot.
    • Исправлено отображение кнопок «Удалить изображение» за предварительным просмотром изображения в настройках [S20293, S20228, F1854]
    • Исправлена ​​ошибка, из-за которой в полях ссылок не отображалась метка поля при выборе ресурса [F1850]

    Выпущено 27 мая 2019 г.

    Выпущено 27 мая 2019 г.

    • Удалить всегда видимую полосу прокрутки из предварительного просмотра изображений [S20151]
    • Разрешить нормальное отображение длинных меток в текстовых/раскрывающихся полях [S20099]
    • Ограничение x/y позиций обрезки изображения положительными целыми числами [#549]

    Выпущено 11 марта 2019 г.

    Выпущено 11 марта 2019 г.

    • Также добавьте [[+layout_title]] в поля [S19368]
    • Предотвратить исключение при использовании cbGetFieldContent для загрузки поля макета [#441]

    Дата выпуска: 08 февраля 2019 г.

    Дата выпуска: 08 февраля 2019 г.

  • Исправлена ​​​​ошибка, из-за которой заголовок макета не устанавливался с версии 1.8.6 [S19368]
  • Исправлены проблемы с невидимостью шаблонов при установленном Ace и включенном ace.grow [S19331]
  • Исправлено нажатие ввода в списке, приводившее к удалению элементов галереи [#546]
  • Интеграция новых проверок минимальных требований в соответствии с https://www.modmore.com/blog/2019/minimum-php-requirements/
  • Выпущено 23 января 2019 г.

    Выпущено 23 января 2019 г.

    • Заголовок встроенного макета (щелкните имя макета на холсте) теперь доступен как в [[+title]], так [[+layout_title]] заполнители
    • Если у вас есть параметр макета с ключом «заголовок», ваш параметр макета теперь переопределяет встроенный заголовок макета [S19264]
    • Исправление обрезки, которая не сбрасывалась при удалении изображения из ввода изображения [# 542]

    Дата выпуска: 08 января 2019 г.

    Дата выпуска: 08 января 2019 г.

  • Исправлена ​​ошибка, из-за которой значения массива (например, кадрирование изображения) не были доступны в шаблонах @CHUNK [#531]
  • Добавить предупреждение к типу настройки форматированного текста о том, что он работает только при отображении в модальном окне
  • Выпущено 28 декабря 2018 г.

    Выпущено 28 декабря 2018 г.

    • Снова исправить установку на MODX3 [S19048]

    Выпущено 04.12.2018

    Выпущено 04.12.2018

    • Исправление перетаскивания настроек, которые больше не работают [S18381]
    • Исправить кнопки изображения, которые не отображаются, когда параметр изображения добавляется в поле изображения [# 539]
    • Исправление ссылок на справку в компоненте ContentBlocks [#536]
    • Измените длинные метки настроек, чтобы они выглядели красивее [#535]
    • При восстановлении контента убедитесь, что [[+unique_idx]] сброшен между ресурсами [#532]
    • Добавить настройки макета в шаблоны полей как [[+layout_setting. SETTING_KEY]] [#529]
    • Ускорьте перестроение содержимого, приостановив работу только между обработанными ресурсами, что позволит быстрее перемещать пропущенные ресурсы
    • Удалить неиспользуемую библиотеку phpthumb
    • Обновить шифрование пакета до шифрованного транспортного средства 2.0
    • Установка пакета теперь проверяет требования к серверу только один раз перед остальной частью установки

    Дата выпуска: 05.10.2018

    Дата выпуска: 05.10.2018

  • Исправление отсутствующих шаблонов для обрезки, когда используется только ввод «Изображение с заголовком», а не «Изображение» [S17718]
  • Выпущено 17 августа 2018 г.

    Выпущено 17 августа 2018 г.

    • Предотвратить неопределенный ресурс индекса E_NOTICE в cbHasField [S17468]
    • Исправлено отсутствие предварительного просмотра изображения для настроек изображения [S17485,17456]
    • Исправлена ​​ошибка, из-за которой предварительный просмотр изображения не отображался для изображения с типом ввода заголовка [S17455]
    • Удалить ненужный файл console. log в файле image.js, связанный с конфигурацией обрезки
    • Исправлено автоматическое открытие обрезки, даже если оно отключено [S17455]
    • Исправить заголовок на изображении с типом ввода заголовка, который не сохраняется [S17461]

    Выпущено 10 августа 2018 г.

    Выпущено 10 августа 2018 г.

    • Поддержка нескольких полей в cbHasField путем предоставления списка, разделенного запятыми, для свойства &field [S16875]
    • Исправление отступов и дрожания прокрутки, вызванных очисткой оболочки содержимого блоков
    • Исправлена ​​ошибка, из-за которой сборщик шаблонов не инициализировался
    • Сделать [[+total]] доступным в шаблонах строк повторителей [S17261]
    • Если для изображения настроена только одна обрезка, автоматически закрывать обрезку после сохранения [#522]
    • Добавить свойство в поля изображения, чтобы автоматически открывать обрезку при добавлении изображения [#520]
    • Добавить свойство в поля изображения, чтобы заменить миниатюру менеджера определенной обрезкой, если установлено [# 521]
    • Автоматически фокусировать поля поиска при открытии модального окна добавления поля/макета [#518]
    • Добавить отсутствующий заголовок к значку представления сжатого списка [#512]
    • Запретить пользователям перетаскивать/вставлять больше настроенных изображений, чем максимальное количество, в поле галереи [#506]
    • Исправлена ​​​​ошибка, из-за которой обрезка изображения не открывалась при нажатии на предварительный просмотр изображения (вместо image_with_title), тип ввода
    • Не показывать предварительный просмотр культур для культур, которые были удалены из конфигурации изображения [#524]

    Выпущено 10 июля 2018 г. (канал предварительной версии)

    Выпущено 11 июля 2018 г.

  • Исправлена ​​​​ошибка, из-за которой изображения предварительного просмотра и обрезки не загружались в обрезку, когда файл зависел от того, где он находится в файловой системе (или удаленно)
  • Исправлены проблемы с созданием кадров на стороне сервера, связанные с настройками источника мультимедиа, теперь должны поддерживаться S3 и другие типы источников
  • Исправлена ​​​​ошибка, из-за которой кнопка сохранения не возвращалась к «Сохранить» при возникновении ошибки
  • Выпущено 10 июля 2018 г. (Канал предварительных выпусков)

    Выпущено 11 июля 2018 г. повторители, где каждая запись сжата в одну строку

  • Добавьте параметр canvas_position, чтобы определить, куда перемещается содержимое: наследовать (по умолчанию, как и раньше), блокировать, tab1 или tab2; в первую очередь предназначен для MODX3.
  • Добавить обрезку изображения к изображению и изображению с полями заголовка [#259]
  • Добавить тип настройки форматированного текстового поля/макета, в настоящее время поддерживается только при добавлении в модальное окно настроек
  • Улучшения:

    • Убедитесь, что при каждом импорте создается резервная копия экспорта в core/export/
    • Заставьте построитель шаблонов использовать больше размера экрана
    • Измените верхнее меню с действий в стиле 2. 2 на маршрутизацию контроллера на основе пространства имен
    • Используйте правильную семантическую кнопку для элементов галереи
    • Модальное окно настроек увеличено

    Исправление ошибок:

    • Исправлена ​​ошибка, из-за которой поля выбора в некоторых случаях имели неправильную высоту
    • Исправлена ​​установка в MODX3.
    • Исправление проверки расширения файла с учетом регистра при загрузке, предотвращающей возврат ширины/высоты во входные данные изображения [S17074]
    • Исправить неправильный значок в поле «Ссылка» в базовом наборе, созданном во время установки [#510]
    • Исправьте отсутствующий словарь для process_tags, настройку remove_content_dom, описания шаблонов для типов ввода textarea и snippet [#509, #508, #511]
    • Исправлено свойство столбцов менеджера на повторителе, влияющее на вложенные повторители [S17076]

    Выпущено 14 марта 2018 г.

    • Исправлен неправильный значок по умолчанию для типа ввода списка [S16160]
    • Добавить настройку tinyrte_lazy_init. Когда включено, экземпляры tinyrte создаются только при фокусировании ввода, экономя память, если у вас много полей
    • Обновления перевода [S16211]

    Выпущено 06 февраля 2018 г.

    • Проверка лицензии выполняется ежедневно, а не еженедельно

    Выпущено 22 января 2018 г.

    • Обновите modmore/alpacka до 1.0.0-pl, чтобы удалить оставшиеся заполнители в путях загрузки (например, [[+псевдоним]], если ресурс еще не создан) [# 469]
    • Убедитесь, что ресурс $modx-> доступен, прежде чем использовать его в cbGetFieldContent/cbHasField [#502]

    Выпущено 18 декабря 2017 г.

    • Исправлена ​​ошибка, из-за которой миниатюры изображений не работали, когда первый источник мультимедиа не указывает на корень сайта [S15704]

    Выпущено 12 сентября 2017 г.

    • Убедитесь, что сохранение ресурса перед загрузкой параметров раскрывающегося списка не сбрасывает значение по умолчанию [S14646]
    • Исправлена ​​​​ошибка, из-за которой браузер modx был недоступен при выборе изображения для настроек изображения, настроенных для отображения в модальном режиме [# 495]

    Выпущено 04 сентября 2017 г.

    • Добавлена ​​поддержка словаря для свойств блока
    • Исправлено странное позиционирование элементов списков, если включена функция tinyrte [#493]

    Выпущено 07 августа 2017 г. (Канал предварительных выпусков)

    • Исправлена ​​ошибка из-за отсутствия контекста по умолчанию в построителе шаблонов

    Выпущено 03 августа 2017 г. (Канал предварительных выпусков)

    Новые функции:

    • Добавить переключатель макета, чтобы изменить макет на другой тип при сохранении содержимого [#355]
    • Добавить крошки в поиск ресурсов, чтобы получить больше информации о конкретном ресурсе
    • Заголовки пользовательских макетов теперь доступны с [[+title]] в шаблонах макетов [S12252]
    • Настройки изображения на поле и макетах! [#89]
    • Добавить поиск для добавления модальных полей/макетов [#329]
    • Добавлено 2 новых режима просмотра для модальных полей/макетов: один с отображением описаний и еще один сжатый (по умолчанию настраивается через системные настройки)
    • Шаблоны полей/макетов теперь поддерживают @CHUNK для создания тегов блоков со всеми доступными свойствами [#461]
    • Теперь включен по умолчанию для пользовательского типа ресурсов LocationResources
    • Повторяющиеся элементы теперь могут отображаться в виде столбцов, а не только строк

    Улучшения:

    • Добавить курсор в раскрывающийся список ссылок, чтобы указать, что по нему можно щелкнуть
    • Кнопка «Выбрать» в полях изображения, галереи и файла открывается для правильного пути в указанном источнике мультимедиа

    Исправления ошибок:

    • (Скрытые) элементы содержимого DOM теперь будут удаляться после инициализации ContentBlocks. Это может помочь предотвратить

    Проблемы с разметкой конфликтуют с менеджером. Отключите параметр contentblocks.remove_content_dom, чтобы остановить это.

    Выпущено 13 июня 2017 г.

    • Исправлена ​​невозможность свернуть вновь созданные строки повторителей [#477]
    • Исправлена ​​неправильная многострочная компоновка в повторителях при использовании tinyrte в подполях [#476]
    • Исправлена ​​ошибка, из-за которой TinyMCE/TinyMCE RTE/CKEditor ломался при перетаскивании строк повторителя [#473]
    • Исправить нелатинские символы, препятствующие распознаванию адреса электронной почты при вводе/настройке ссылки [#471]
    • Исправлена ​​невозможность удаления строк повторителя внутри повторителя фиксированного размера [#470]
    • Исправлен неправильный порядок сортировки при перетаскивании элементов сортировки в компоненте на странице 2 и далее [#456]
    • Добавить отсутствующую сортировку перетаскиванием в шаблоны
    • Исправить пользовательские заголовки, которые не сохраняются для вложенных макетов [# 458]

    Выпущено 31 марта 2017 г.

    • Принимать пустые значения свойств в качестве заполненных значений [S11382]
    • Исправление отсутствующих полей ключа/ширины при дублировании подполя в повторителе [S11386]
    • Исправлена ​​совместимость с PHP 5.3 в обработчике выпадающего списка [S11400]
    • Используйте [[+value]] вместо [[+tag]] в полях блоков для согласованности [S11424]
    • Исправлена ​​ошибка, из-за которой экземпляры TinyMCE RTE [#378] и CKEditor [#267] ломались при перетаскивании полей или изменении порядка макетов

    Выпущено 07 марта 2017 г.

    • Исправлена ​​ошибка, из-за которой название выбранного ресурса не отображалось в типах ввода ссылок [#363]
    • Исправить назначение шаблона по умолчанию в зависимости от контекста [#449]
    • Исправление проблемы с развертыванием/свертыванием повторителя (элементов) внутри повторителя [S10341]
    • Исправлена ​​ошибка при открытии построителя шаблонов [S11314]
    • Исправить недопустимые имена файлов экспорта в Windows из-за: символа
    • Сделать выравнивание компонентов совместимым с остальной частью MODX [#454]

    Выпущено 08 февраля 2017 г.

    • Устранена проблема с повторным открытием медиабраузера для типа ввода файла [S11088]
    • Убедитесь, что $modx->resource доступен для раскрывающегося фрагмента кода [#445]

    Выпущено 31 января 2017 г.

    • Исправление 401 несанкционированного доступа к предварительной выборке типа ссылки [#447]
    • Исправлена ​​ошибка, из-за которой при перестроении контента не проверялась контекстно-зависимая настройка use_contentblocks [#11060]
    • Восстановить совместимость с PHP 5.3
    • Исправлена ​​ошибка, из-за которой повторители неограниченного количества элементов (maxItems == 0) не могли быть отсортированы

    Выпущено 19 января 2017 г.

    • Удалить ошибочный оператор console.log
    • Обновить Alpacka до версии 0.4.0

    Выпущено 02 января 2017 г. (канал предварительных выпусков)

    Исправление ошибок:

    • Исправлена ​​ошибка, из-за которой подполя повторителя не были найдены
    • Исправлена ​​ошибка с getLayoutFields, из-за которой возвращались неправильные поля, если макет содержал вложенное поле макета
    • Относится к исправлению ошибки getLayoutFields: проверьте, находимся ли мы в событии «повторить макет» при добавлении полей макета; если да, то не показывать модальное окно «добавить макет»

    Выпущено 22 декабря 2016 г. (канал предварительных выпусков)

    Новые функции и улучшения:

    • Добавить возможность вставки изображений, указав URL-адрес; изображения загружаются на сервер [#351]
    • Скрыть кнопку «Удалить элемент» на повторителях с фиксированным количеством элементов [F392]
    • Если для повторителей задано фиксированное количество элементов 1, кнопка свертывания элемента также скрыта [F392]
    • Добавить клетчатый фон для прозрачных изображений [S9968]
    • Добавлена ​​поддержка типа ввода галереи в свойстве &innerLimit фрагмента кода cbGetFieldContent [S9985]
    • Ctrl/Cmd Щелчок по результату поиска видео откроет его в новой вкладке
    • Попытка удалить макет или поле по умолчанию покажет ошибку [#436]
    • Возможность перетаскивания файлов из дерева файлов в поля изображения/галереи [#179]
    • Внутренние зависимости (jquery, загрузка файлов, библиотеки typeahead) обновлены [#433]
    • Добавить параметр defaults_allowed_inputs для управления тем, какие типы ввода доступны в качестве целевых полей в шаблонах по умолчанию [S10491]
    • Добавьте параметр show_resource_option, отключите его, чтобы скрыть параметр «Использовать ContentBlocks» для ресурсов [#280]
    • Показать четкое предупреждение, когда макеты не могут быть найдены при создании содержимого, чтобы предотвратить неработающие страницы [#405]

    Улучшения, связанные с доступностью и удобством использования:

    • Исправление отсутствующих стилей фокуса при выборе, вводе текста и переключателях/флажках [#429]
    • Скрыть «x» от средств чтения с экрана, если он сопровождается текстовой меткой, например «удалить» [#425]
    • Добавить заголовок/метку арии для закрытия модальной кнопки [#425]
    • Добавить более контрастную индикацию наведения/фокуса для кнопки «Добавить содержимое сюда» [#426]
    • Добавить заголовок/метку арии для перемещения кнопок вверх/вниз макета [#424]
    • Добавить заголовок/ярлык к кнопке «Добавить содержимое сюда» [#420]
    • Изменить стили наведения/фокуса кнопки, чтобы обеспечить достаточную контрастность [#427]
    • Стили наведения/фокуса кнопки для деструктивных действий теперь отображаются красным цветом
    • Очистить форматирование в модальном окне Tinyrte Link
    • Очистить стиль в модальном окне добавления содержимого/макета
    • Результаты поиска видео теперь можно перемещать с помощью клавиатуры [#390]

    Исправление ошибок:

    • Исправить возможный разрыв холста, вызванный полем textarea
    • Исправить положение маски загрузки на полях
    • Предотвратить E_NOTICE для удаленных подэлементов повторителя [S10493]
    • Исправить разделенные запятыми значения параметров выбора/радио, предварительно выбрав неправильные параметры [S9748]
    • Добавить отсутствующий параметр contentblocks. file.upload_path [S10614]
    • Исправлена ​​ошибка синтаксического анализа в cbGetFieldContent, из-за которой вложенные элементы не обрабатывались первыми
    • Исправить очистку пасты в IE11
    • Исправить источники мультимедиа по умолчанию, работающие в многоконтекстных настройках [# 434]

    Выпущено 08 декабря 2016 г.

    • Исправлена ​​ошибка, из-за которой пустые настройки по умолчанию не отображались должным образом («=По умолчанию»)

    Выпущено 23 сентября 2016 г.

    • Исправлено скрытие кнопки «Добавить содержимое сюда» в макетах в ретрансляторе

    Выпущено 14 сентября 2016 г.

    • Исправить ввод фрагментов в построителе шаблонов

    Выпущено 04 сентября 2016 г. (Канал предварительных выпусков)

    • Запретить изображениям/обычным объектам занимать более 100 % ширины в предварительном просмотре динамического фрагмента [#412]
    • Сохранить данные вложенных полей в переменной $linear, чтобы cbHasField / cbGetFieldContent могли получить доступ к данным вложенных полей
    • Исправить очистку фильтра макета/шаблона, сбросив сетку для отображения полей [S9791]
    • Добавить пустой атрибут alt для ввода изображения по умолчанию и фильтр htmlent для изображения с вводом заголовка [#418]

    Выпущено 02 августа 2016 г. (Канал предварительных выпусков)

    Новые функции:

    • Полный контроль над тем, что пользователи могут делать в компоненте ContentBlocks с новой политикой доступа с 35 разрешениями [#389]
    • Добавьте свойство add_first_item к повторителям, чтобы контролировать, должен ли автоматически добавляться пустой первый элемент [#386]
    • Добавлено свойство для включения TinyRTE для текстового поля, текстового поля и типов ввода кавычек [#347]
    • Добавлена ​​возможность дублировать настройку поля/макета
    • Добавить новый тип ввода раскрывающегося списка [# 217]

    Улучшения:

    • Настройки выбора, радио и флажков теперь поддерживают формат «значение == отображаемое значение» поверх «отображаемое значение = значение»
    • Обнаружение, когда оповещения были отклонены в браузере, чтобы по-прежнему разрешать удаление полей/макетов

    Исправления:

    • Исправить неверную проверку strpos, из-за которой анализатор вызывался чаще, чем необходимо [#399]
    • Исправлена ​​ошибка, из-за которой «доступные шаблоны» в полях макета не учитывались при добавлении макета между существующими макетами [#398]
    • Предотвращение ошибки js при создании холста на существующем ресурсе без форматированного текста
    • Исправьте открытые настройки радио / флажков, использующие тот же атрибут имени [# 406]

    Устаревшие:

    • Формат «Отображаемое значение = значение» для настроек поля и макета, а также новый раскрывающийся ввод будут удалены в версии 2. 0. Вместо этого рекомендуется использовать новое значение «value==Displayed Value».

    Выпущено 18 мая 2016 г.

    • Обновление ace до сборки 18.02.16 (src-min-noconflict) для разрешения конфликтов с пакетом MODX Ace в компоненте

    Выпущено 16 мая 2016 г.

    • Загружать переводы из словаря перед рендерингом, чтобы убедиться, что они всегда применяются [#394]
    • Исправлена ​​проблема с выводом пустых элементов списка [#333]
    • Исправить html в настройке значений по умолчанию, анализируемых в сетке [#325]
    • Запретить перемещение элементов списка в несвязанные сортируемые объекты [#334]
    • Исправлена ​​подсветка синтаксиса при вводе кода, когда пакет Ace установлен и активен

    Выпущено 25 апреля 2016 г.

    • Исправлен ввод видео, нарушающий работу MODX Media Manager и выпадающих телевизоров из-за Google JS API [#387]
    • Исправлена ​​проблема с выбором полей доступности на определенных языках из-за параметра максимальной длины [#388]

    Выпущено 11 апреля 2016 г.

    • Исправить ошибку MySQL, вызванную раскрывающимся списком шаблонов «Целевое поле» [S8482]
    • Исправлен просмотр макетов и шаблонов в полях макетов, когда для «разрешенных шаблонов» или «разрешенных макетов» установлено значение -1. [S8356]

    Выпущено 05 апреля 2016 г.

    • Скрывать только кнопку удаления в полях повторителя [#380]
    • Исправление E_NOTICE, вызванное файлами лексикона
    • Исправлена ​​ошибка, из-за которой построитель шаблонов не работал с версии 1.4 [#385]
    • Скрыть параметры фильтра в сетках подполей [#383]
    • Исправить конфликты идентификаторов в сетках подполей при редактировании повторителя

    Выпущено 22 марта 2016 г.

    Новые возможности:

    • Категории! Теперь вы можете упорядочивать поля, макеты и шаблоны по аккуратным категориям.
    • Фильтры и поиск в компоненте полей, макетов и шаблонов
    • Новая система лицензий! Мы включили поддержку нашей новой системы лицензирования, которая включает бесплатные лицензии на разработку

    Улучшения:

    • Все индексированные поля varchar теперь ограничены 190 символами для учета индексов в строгом режиме MySQL [#379]

    Выпущено 15 марта 2016 г.

    • Исправить ссылки на типы ввода галереи [S8247]
    • Исправление значений параметров настройки с использованием словарей [#375]
    • Исправлен крайний случай, когда целочисленные значения параметров могли нарушить холст
    • Исправлено появление кнопок действий в подполях там, где они не должны появляться в повторителях

    Выпущено 07 марта 2016 г.

    • Убедитесь, что ключ и ширина подполей повторителя обязательны [S8028]
    • Исправить фатальную ошибку, если в подполе повторителя не было ключа [S8028]
    • Добавить значок «fontawesome» (Спасибо, Себастьян!) [#370]
    • Запретить стирание всех полей при импорте подполей [#369]
    • Исправление имен переменных в событии RenderContent [#373]

    Выпущено 16 февраля 2016 г.

    • Исправлена ​​ошибка, из-за которой телевизионные теги не обрабатывались должным образом (обновление до Alpacka v0.2.1, #366)
    • Исправлена ​​ошибка, из-за которой при очистке входных данных с поддержкой TinyRTE всегда сохранялся последний символ (#279, S7934)
    • Исправьте некоторые измененные ссылки, чтобы предотвратить перенаправление

    Выпущено 10 февраля 2016 г.

    • Исправление некорректного кэширования ресурсов в процессоре reboot_content

    Выпущено 04 февраля 2016 г.

    • Предотвращение фатальной ошибки при попытке редактирования несуществующего ресурса (Спасибо, Йохан!)
    • Исправлена ​​ошибка при запуске reboot_content в качестве задачи планировщика

    Выпущено 01 февраля 2016 г.

    • Исправлена ​​ошибка изображения с заголовком, из-за которой холст никогда не отображался
    • Устранена проблема с неправильным изменением размера нескольких 100% столбцов
    • Исправьте сломанный холст, если свойство thumbnail_size не установлено в галерее
    • Установите нижнюю границу для пустых столбцов для большей согласованности в макетах

    Дата выпуска: 28 января 2016 г.

  • Удалить повторяющееся свойство «Показать поле ссылки» в полях галереи
  • Предотвращение различных ошибок E_NOTICE и E_WARN (неопределенные индексы: ссылка, теги процесса, непроверенные вызовы getimagesize())
  • Исправлена ​​​​ошибка, из-за которой высота столбцов не сбрасывалась при удалении строки повторителя (# 360)
  • Переместить кнопку «Добавить макет» на полосу полной ширины (#359)
  • Обновление до Alpacka 0. 2.0 (исправляет контекстно-зависимые настройки в js на стороне менеджера)
  • Выпущено 19 января 2016 г. (Канал предварительных выпусков)

    • Исправление некорректного создания эскизов (представлено в rc5)
    • Fix Repeaters, не отображающий сохраненный контент (представлено в rc5)
    • Добавить отсутствующий параметр contentblocks.base_url_mode, необходимый для управления генерацией URL-адреса изображения на многоконтекстных сайтах
    • Исправлена ​​ошибка, из-за которой шаблоны всегда вставлялись снизу
    • Обновление до Alpacka 0.1.2 (исправляет переменную пути [[+resource]])

    Выпущено 18 января 2016 г. (канал предварительных выпусков)

    • Устранение проблемы на многоконтекстных сайтах, из-за которой изображения могут не отображаться [S7665]
    • Исправление непредвиденных результатов во вводе чанка, когда пустые значения не передаются тегу [S7659]
    • Удалить кнопку «Добавить макет», накладывающую параметры удаления/поля на поля макета [#356]
    • Исправить положение кнопки «Добавить макет» в полях макета
    • Исправлен контроль над порядком сортировки подполей в повторителе [S7719]
    • Исправлена ​​загрузка RTE для построителя шаблонов в компоненте
    • Устранить проблему с доступом к процессору изменения размера изображения в серверных средах с учетом регистра

    Выпущено 13 января 2016 г. (Канал предварительных выпусков)

    • Улучшена совместимость с FileSluggy (и аналогичными дополнительными функциями), которые очищают и переименовывают файлы при загрузке

    Выпущено 05 января 2016 г. (Канал предварительных выпусков)

    • Добавить схемы по умолчанию для значков, чтобы строгий mysql не переставал создавать подполя повторителей
    • Исправлено некорректное отображение сеток доступности и настроек
    • Добавить курсор-указатель к меткам радио и флажков

    Выпущено 03 января 2016 г. (канал предварительных выпусков)

    • Запретить отображение подполей повторителя в модальном окне «Добавить содержимое» [S7545]

    Выпущено 22 декабря 2015 г. (Канал предварительных выпусков)

    Новые функции:

    • Новая кнопка «Добавить макет» для вставки макетов в любую точку холста (#103)
    • Разрешить более одной строки столбцов в макете (#310)
    • Щелкните заголовок макета на холсте, чтобы присвоить ему другой заголовок в этой конкретной строке (#272)
    • Добавить заполнители [[+width]] и [[+height]] для изображений и галереи (#274)
    • Ввод повторителя теперь также имеет кнопку «Добавить элемент» вверху для вставки новых элементов перед существующими (#242)
    • Добавьте методы ExpandAllLayouts и CollarAllLayouts в класс js
    • Анализ тегов ресурсов (например, [[*pagetitle]]) при сохранении и перестроении (#252)
    • Сделать все настройки контекстно-зависимыми для контекстно-зависимых переопределений
    • Заполнители путей загрузки теперь включают все поля ресурсов, телевизоры (с префиксом tv. ), некоторые настройки и (окончательный) родительский идентификатор и псевдоним (#196, к. 247)
    • Разрешить рост свойств шаблона для всех типов ввода
    • Добавить типы флажков и переключателей для полей и макетов
    • Поля изображений теперь могут автоматически создавать эскизы для повышения производительности серверной части (#257)
    • Поля изображения и галереи теперь будут хранить URL-адреса как относительные URL-адреса, когда это возможно, что повышает переносимость (# 286)
    • Добавить системные события ContentBlocks_RebuildContent, AfterRebuildContent и RenderContent (#132, #243, #283)
    • Добавить параметр для установки минимального количества элементов повторителя (#308)
    • Добавить экспорт одного поля, одного макета и одного шаблона (#255)
    • Добавить класс .contentblocks-field-richtext в шаблон оболочки поля RichText

    Улучшения:

    • Улучшенный доступ к клавиатуре благодаря дополнительным стилям фокуса
    • Убедитесь, что поле значения по умолчанию для настроек является текстовой областью, а не текстовым полем (#256)
    • Сделать приблизительную оценку времени восстановления немного более точной
    • Добавлена ​​возможность устанавливать количество знаков после запятой в cbFileFormatSize [#320]
    • Добавлена ​​возможность установки внутреннего ограничения и/или смещения для повторителей в cbGetFieldContent (#330, спасибо Томасу Якоби!)
    • Отфильтровать версии из Extras. io Preview/Workflow Extras во входной ссылке [#317]
    • Autogrow TinyRTE, чтобы убедиться, что он отображает весь контент без полос прокрутки [#341]
    • Используйте пакет композитора modmore/Alpacka для стандартной общей функциональности.
    • Убедитесь, что все панели vtab могут прокручиваться, если их содержимое слишком велико для размещения

    Исправлено:

    • Исправлена ​​загрузка свойств поля в группе повторителей [#315]
    • Исправлено использование [[+idx]] в cbGetFieldContent
    • Исправлена ​​ошибка, из-за которой вход в таблицу сходил с ума с более чем 10 строками (спасибо, Люк!) [#277]
    • Исправить контекстное меню таблицы, скрывающееся за другими элементами [#339]
    • Исправлен конфликт CSS с SimpleCart, вызывающий проблемы с прокруткой в ​​vtabs

    Выпущено 23 июля 2015 г.

    • Усиленная безопасность XHR для предотвращения междоменной утечки идентификаторов сеансов (#304)
    • Исправление жестко заданных модальных заголовков «Вставить содержимое» и «Вставить макет» (#313)
    • Исправлен скачок в позиционировании параметров макета с помощью скрытых кнопок вверх/вниз для заказа макетов (#311)
    • Исправлена ​​ошибка, из-за которой вложенные поля макета вызывали восстановление обычного синтаксического анализатора, который затем анализировал последующие теги, которые следует оставить нетронутыми во время сохранения (#302)
    • Центрировать кнопку «Добавить элемент» на повторителях, чтобы она была более согласованной с другими действиями (#293)

    Выпущено 09 июня 2015 г.

    • Устранена проблема, из-за которой удаление макетов не влияло на расчет количества макетов на странице
    • Исправить окончательный выбор шаблона по умолчанию на основе родительского элемента (# 291)
    • Исправить отсутствующий стиль и панель кнопок TinyRTE в Windows/Firefox (#287)
    • Добавить несколько отсутствующих индексов в таблицы базы данных (#290)
    • Убедитесь, что опция выбора распознает пустую строку как значение (#288)
    • Исправлена ​​загрузка в медиа-источники с полным URL-адресом в виде baseUrl
    • .
    • Установите для параметра Ace minLines значение 1 для ввода кода меньшего размера

    Выпущено 15 мая 2015 г.

    • Убедитесь, что Ace расширяется до бесконечности для лучшей прокрутки
    • Исправление нескольких проблем с базой данных со строгими режимами SQL
    • Исправлена ​​ошибка, из-за которой при дублировании поля терялись некоторые его значения (доступность, шаблон) (#278)
    • Убедитесь, что порядок сортировки автоматически установлен на правильный номер при создании нового поля/макета
    • Исправлена ​​ошибка, из-за которой вложенные повторители могли не работать (#281)
    • Исправлен неправильный шаблон в поле ссылки по умолчанию
    • Улучшение отчетов об ошибках, когда не удается загрузить шаблон для холста

    Выпущено 30 марта 2015 г.

    • Исправлена ​​ошибка обработки входных данных таблицы только с одной строкой (#268)
    • Убедитесь, что темы лексикона всегда загружаются для пользовательских типов ввода
    • Убедитесь, что ресурс установлен при перестроении содержимого
    • Исправление значений каталога загрузки по умолчанию, не наследуемых от системной настройки contentblocks.image.upload_path
    • Исправить переопределение источника, не применяемое во входном файле
    • Предотвратить ошибку E_NOTICE при синтаксическом анализе настроек

    Выпущено 17 февраля 2015 г.

    • Исправление отсутствия индикатора загрузки при вводе файла
    • Разрешить указывать категории по имени в селекторе фрагментов
    • Разрешить использование «/» в полях загрузки для размещения файлов в корне источника мультимедиа
    • Добавить заполнитель для инструкций для связывания полей
    • Исправлена ​​ошибка, из-за которой вложенные повторители создавали строки в своих родительских повторителях
    • Скрыть кнопку «Добавить элемент» на повторителе, когда лимит достигнут
    • Разрешить код в качестве целевого типа поля для значений по умолчанию

    Выпущено 29 января 2015 г.

    • Исправление отсутствия кнопки «Добавить содержимое сюда» между полями во вложенных макетах, если вложенный макет является последним полем в строке
    • Исправлена ​​неопределенная ошибка при достижении максимального количества файлов во входном файле
    • Исправлен странный прыжок при редактировании ввода кода (#146)
    • Включить мягкий перенос при вводе кода для улучшения общего опыта редактирования

    Выпущено 16 января 2015 г.

    • При вводе изображения с заголовком исправлено дублирование поля заголовка при добавлении изображения
    • Исправлены некоторые ошибки E_NOTICE при обработке
    • Исправлена ​​проблема с редактированием поля после его дублирования
    • Устранена проблема с загрузкой изображений/файлов в медиа-источник Amazon S3
    • Добавить свертываемость к полям и элементам повторителя
    • Устранить проблему с настройками шаблона: сделать копии полей, макетов и шаблонов перед работой с ними, а не рассматривать их как ссылки

    Выпущено 26 ноября 2014 г.

    • Исправление значков в полях по умолчанию, добавленных в rc2
    • Исправление проблемы с отображением нескольких настроек ссылок (отсутствует четкая фиксация, некоторые дополнительные отступы, более чистые результаты ввода)
    • Исправлена ​​ошибка, из-за которой для значения [[+link]] устанавливалось значение [[~]] вместо того, чтобы быть пустым, когда ссылка не добавлялась
    • Исправление проблемы с сохранением данных поля, отредактированных на лету, в группе повторителей
    • Сделать окна, которые потенциально могут быть очень высокими, открытыми в верхней части экрана
    • Исправлена ​​проблема со ссылками, из-за которой некоторые ссылки стирались при перезагрузке страницы
    • Исправлена ​​проблема с загрузкой файлов/изображений в MODX 2.2.x
    • Улучшен стиль кнопки удаления ввода файла (спасибо, Люк!)
    • Улучшение обработки значков для ввода файла

    Выпущено 10 ноября 2014 г. (канал предварительных выпусков)

    • Устранена проблема с неправильной работой шаблонов по умолчанию из-за события плагина
    • Улучшите стиль полей вложенных повторителей, чтобы лучше различать каждый экземпляр
    • Исправлена ​​ошибка, из-за которой поле заголовка не получало высоту при включенном TinyRTE
    • Убедитесь, что вкладка ввода списка сохраняет правильный фокус при использовании TinyRTE
    • Добавьте несколько новых типов ввода в поля по умолчанию, предлагаемые во время установки
    • Исправлено модальное позиционирование в старых браузерах webkit (спасибо, Люк!)
    • Добавить заполнитель [[+parent_field_id]] во вложенные поля макета

    Выпущено 27 октября 2014 г. (канал предварительных выпусков)

    Новые возможности:

    • Новая функция шаблонов по умолчанию, которая позволяет точно контролировать холст по умолчанию для новых ресурсов
    • Новый тип ввода «файл» для добавления списка файлов, аналогичный вводу галереи
    • Новый тип ввода «повторитель», который показывает сгруппированные поля, которые могут повторяться вместе
    • Новый ввод «ссылка», который включает поиск ссылок на ресурсы, а также поддержку URL-адресов и адресов электронной почты
    • Новый тип настройки «ссылка» для добавления настроек поля/макета, которые должны где-то быть связаны
    • Новое необязательное поле ссылки на элементы галереи
    • В TinyRTE добавлена ​​новая кнопка ссылки для использования новой функции ввода ссылки
    • Новый заполнитель [[+unique_idx]] для макетов и полей с действительно уникальным idx
    • Новый фрагмент cbGetFieldContent, который позволяет получить доступ к определенным полям из холста ContentBlocks
    • Новые настройки для указания пользовательского URL-адреса значка за пределами каталога ContentBlocks
    • Новый метод cbBaseInput->getDependantInputs, поэтому составные типы ввода могут объявлять зависимые типы ввода

    Улучшения:

    • Обновления стиля и функциональности модальных окон (теперь Esc закрывает их!)
    • Убедитесь, что теги настройки, такие как [[++site_name]], не анализируются преждевременно синтаксическим анализатором ContentBlocks, что обеспечивает лучшее использование нескольких контекстов
    • Убедитесь, что нажатие клавиш Ctrl/CMD+S в поле с поддержкой TinyRTE правильно запускает сохранение ресурса
    • Включите транспортную библиотеку iframe для лучшей поддержки загрузки в браузере
    • Включить исходные карты CSS и JS в пакет, чтобы предотвратить ошибку 404 при открытии консоли
    • Предоставить ContentBlocks->ресурс для использования при обработке типа ввода
    • Если типы ввода отсутствуют, вежливо откажитесь с сообщением об ошибке вместо фатальной ошибки js
    • Убедитесь, что параметр contentblocks. debug также применяется к загружаемым ресурсам типа ввода
    • При перемещении макетов холст теперь красиво прокручивается до новой позиции макета, поэтому вы сохраняете свою позицию
    • Элементы списка теперь можно перетаскивать для сортировки
    • Улучшите процесс сортировки, установив правильную высоту заполнителя

    Исправление ошибок:

    • Исправьте TinyRTE, чтобы ссылки сохранялись более надежно
    • Исправлена ​​ошибка, из-за которой многие свойства могли вывести кнопки сохранения за пределы экрана при редактировании поля
    • Исправлена ​​ошибка, из-за которой вкладка свойств не создавалась последовательно
    • Исправить отсутствующую метку в полях макета
    • Исправить снятие флажка «Разрешить только вложенный макет» в «Макет» > «Доступность»
    • Устранение проблемы с вложенными макетами, повторителями и дублированием содержимого

    Выпущено 20 октября 2014 г.

    • Изменить сообщения об ошибках, чтобы использовать оповещения в стиле ExtJS, а не в стиле браузера
    • Исправить неопределенный шаблон по умолчанию для ввода чанка
    • Сделайте модальное видео более удобным для пользователя, всегда держа поиск в поле зрения, без двойных полос прокрутки
    • Установка максимального количества изображений в поле галереи на 0 теперь означает отсутствие ограничений
    • Исправлена ​​ошибка, из-за которой настройки вложенных полей макета копировались в их дочерние элементы

    Выпущено 16 сентября 2014 г.

    • Устранение спорадической проблемы со вставкой вложенных макетов на сложные страницы
    • Исправлен шаблон ввода кода по умолчанию; не должен был иметь модификатор вывода htmlent
    • Исправлена ​​ошибка, из-за которой предварительный просмотр видео не отображался на https
    • .
    • Добавить заполнитель [[+layout_idx]] в поля
    • Исправить заполнители для ввода таблицы в предустановленном наборе полей
    • Исправить раздражающее всплывающее окно при вставке шаблона, содержащего вложенные макеты
    • Устранена проблема, из-за которой ширина ввода таблицы не была правильно установлена ​​при первой загрузке холста

    Выпущено 16 сентября 2014 г.

    • Исправление спорадической проблемы со вставкой вложенных макетов на сложные страницы
    • Исправлен шаблон ввода кода по умолчанию; не должен был иметь модификатор вывода htmlent
    • Исправлена ​​ошибка, из-за которой предварительный просмотр видео не отображался на https
    • .
    • Добавить заполнитель [[+layout_idx]] в поля
    • Исправить заполнители для ввода таблицы в предустановленном наборе полей
    • Исправить раздражающее всплывающее окно при вставке шаблона, содержащего вложенные макеты
    • Устранена проблема, из-за которой ширина ввода таблицы не была правильно установлена ​​при первой загрузке холста

    Выпущено 01 августа 2014 г.

    • Исправить откат макета по умолчанию, когда запрошенный макет не найден
    • Исправление проблем с проверкой при создании шаблона из-за отсутствия значка путем установки значения по умолчанию
    • Исправлена ​​проблема с созданием экземпляров ввода кода, если пакет Ace установлен, но не используется
    • Исправить бесконечный цикл, когда сохраненный фрагмент или фрагмент больше недоступен, но все равно выбран
    • Исправить открытие браузера MODX для вставки изображений в галереи
    • Решите некоторые дополнительные проблемы с перестроением контента в 2. 3 и загрузкой вывода консоли
    • Исправить блокировку ввода, отказывающуюся загружать в 2.3
    • Исправлена ​​проблема, из-за которой Firefox бесконечно регенерировал экземпляры TinyRTE
    • Вернуть значение в плагин, чтобы убедиться, что он не регистрирует 1 в 2.3.0
    • Исправлена ​​проблема с повторяющимися значениями ввода списка
    • Устранена проблема сборки, влияющая на фрагменты кода, из-за которой во время обновления отображались ошибки
    • Исправлена ​​ошибка, из-за которой открытые настройки переопределяли поля ресурсов с тем же именем при сохранении
    • Исправлена ​​ошибка, из-за которой настройки макета не обрабатывались для тегов, даже если флажок был установлен.
    • Исправлена ​​ошибка, из-за которой несколько настроек приводили к тому, что построитель шаблонов не отображал ни одну из них
    • Исправлена ​​случайная проблема, из-за которой синтаксический анализатор не загружался в getObjectsForCanvas, поэтому построитель шаблонов не загружался должным образом
    • Добавить несколько новых значков

    Выпущено 18 июля 2014 г.

    • Исправлена ​​ошибка, из-за которой «Использовать ContentBlocks?» параметр ресурса не изменился на «Нет»
    • Опционально добавить возможность обработки тегов шаблона в настройках
    • Исправление проблемы с ContentBlocksExtraSelectors и 3PCs
    • Исправить перестроение контента в версии 2.3. Также требуется MODX 2.3.1.
    • Исправлена ​​ошибка, из-за которой «Использовать ContentBlocks?» настройка ресурса обновляла страницу при создании новых документов
    • Дальнейшие изменения дизайна для версии 2.3 и тип ввода макета
    • Автоматический выбор фрагмента/фрагмента, если есть только один результат
    • Обновите значение accept_resource_types по умолчанию, чтобы включить все сторонние пользовательские ресурсы, которые, как известно, поддерживаются
    • Предотвращение создания временных макетов, вызывающих проблемы с синтаксическим анализом

    Выпущено 7 июля 2014 г. (Канал предварительных выпусков)

    • Исправлена ​​ошибка редактирования полей и макетов в компоненте при установленном пакете Ace
    • Исправлена ​​ошибка, из-за которой программа установки не создавала таблицу шаблонов

    Выпущено 06 июля 2014 г. (Канал предварительных выпусков)

    Новые функции

    • Добавлена ​​возможность вставки нового содержимого между существующими блоками с помощью новых кнопок «+»
    • Добавить необязательное поле описания к вводу галереи
    • Добавить новый тип ввода Chunk Selector (позволяет редактору выбирать из списка фрагментов и добавлять свойства)
    • Добавить желтый текст, вдохновленный крошечным RTE для списка, заголовка и изображения с типами ввода заголовка
    • Улучшите совместимость со сторонними пользовательскими типами ресурсов, разрешив определение класса .contentblocks_replacement в качестве целевого и установив класс в оболочке с ключом класса для целевых настроек стиля и класс .contentblocks_loaded в теле для настроек стиля контейнера.
    • Добавить кнопку для повтора макета для быстрого дублирования.
    • Возможность отображать настройки поля и макета, чтобы они отображались прямо на холсте, а не скрывались за модальным окном
    • Вложенные макеты с новым типом ввода «Макет»
    • Поля, макеты и настройки теперь можно переводить через лексиконы
    • Шаблоны, комбинация макетов и полей для быстрой вставки, теперь доступны

    Улучшения:

    • Добавлены переводы на немецкий (спасибо Christian Bartels!), шведский (спасибо Joakim Nyman!) и голландский (спасибо Bert Oost!)
    • Исправлено несколько экземпляров жестко запрограммированного текста, теперь используются строки лексикона, как и должно быть.
    • Предотвратить создание страницы для пометки формы ресурса как грязной
    • Убедитесь, что предупреждения о недопустимом содержимом в процессе перестроения содержимого отображаются как ошибка
    • .
    • Улучшение синтаксического анализатора (поиск и замена заполнителей для скорости и вложенных заполнителей перед использованием синтаксического анализатора)
    • Добавить [[+value]] в качестве псевдонима для заполнителя [[+tag]] для шаблонов фрагментов и фрагментов.
    • Добавьте стиль 2.3, чтобы соответствовать новому дизайну
    • Передать настройки поля вызову чанка или сниппета во входных данных чанка и сниппета
    • Очистить кеш после восстановления содержимого
    • Добавить заголовки и описания в лексикон для системных настроек
    • Улучшена производительность JavaScript (особенно на больших страницах) благодаря делегированию обработки событий и отложенному созданию холста
    • Улучшена очистка имен загружаемых файлов с поддержкой транслитерации и новым механизмом предотвращения перезаписи существующих файлов.
    • Пропустить [[+layout_id]] и [[+layout_column]] во все шаблоны полей
    • Передать [[+chunk_name]] и [[+snippet_name]] в шаблон во входных данных блока, селектора блока и фрагмента
    • Добавить новый метод getLexiconTopics() во входные данные, чтобы разрешить загрузку тем лексикона, специфичных для входных данных
    • Сделать окна локальной сетки открытыми как модальные, чтобы предотвратить преждевременное закрытие родительского окна
    • Добавить сортировку перетаскиванием к сеткам в компоненте (поля, макеты, настройки и т. д.)
    • Добавлен новый JS-метод ввода confirmBeforeDelete и встроенная проверка данных для предотвращения ненужных запросов на подтверждение при удалении полей
    • Добавьте анимацию к движущимся макетам, чтобы четко передать происходящее
    • Автоматически обновлять страницу после изменения параметра use_contentblocks

    Исправления:

    • Исправлена ​​ошибка, из-за которой изображения при вводе изображений не отображались должным образом.
    • Исправить ошибку при установке макета начальной загрузки по умолчанию
    • Исправить наследование ввода «изображение с заголовком» от ввода «изображение»
    • Исправлено неверное значение по умолчанию для свойства ввода кода кодирования объектов
    • Исправить значок по умолчанию при вводе текстового поля
    • Исправлена ​​ошибка, из-за которой значение поля «макеты» не загружалось при редактировании поля
    • Исправлена ​​обработка логических свойств с помощью нового метода ContentBlocks.toBoolean
    • Предотвращение ошибки JS при попытке добавить параметр «Использовать ContentBlocks» для пользовательских ресурсов
    • Разрешить «сохранение и закрытие» только для существующих полей/макетов, чтобы предотвратить дублирование добавлений при последующем сохранении
    • Исправлено использование настроек поля в шаблоне оболочки ввода списка
    • Не допускать пробелов в ключах настроек
    • Отключить загрузку путем вставки на входах изображения/галереи
    • Исправлена ​​проблема в определенных средах, когда последующие загрузки завершались сбоем из-за заголовка проверки активности
    • Исправлена ​​проблема с CRC, из-за которой вновь созданные ресурсы не регистрировались должным образом с помощью ContentBlocks
    • Изменить уровень заголовка по умолчанию из установленного набора полей с h6 на h3
    • Исправлена ​​ошибка, из-за которой удаление последнего макета не отменяло последнее содержимое
    • Убедитесь, что комбинация Media Source работает в версиях 2. 2 и 2.3
    • Исправлена ​​ошибка, из-за которой шестеренка Unicode не всегда отображалась, заменив ее на SVG и Font Awesome в версии 2.3
    • Исправление поломки TinyMCE при сортировке изображений

    Выпущено 05 мая 2014 г.

    • Исправлено непреднамеренное отключение CB при использовании быстрого создания/обновления ресурса
    • Добавить кнопку «Перестроить содержимое» в CMP для перестроения всех ресурсов на сайте
    • Исправить ошибку E_NOTICE, связанную с функцией ContentBlocks.summarizeContent
    • Небольшие изменения в линейной сводке содержимого для упрощения использования
    • Исправлено отображение панели предварительного просмотра видео, когда она не должна (занимает много места)
    • Устранена проблема с загрузкой ресурсов при включении Compress_js
    • Исправлена ​​ошибка, из-за которой заполнители параметров полей не устанавливались в шаблонах для фрагментов, галерей, списков, фрагментов и входных данных таблиц
    • Исправлена ​​ошибка, из-за которой настройки полей не загружались после обновления страницы (x2)


    Открытые вопросы

    Ниже вы увидите подмножество известных проблем в ContentBlocks. Если у вас есть какие-либо отчеты об ошибках или пожелания, сообщите нам об этом.

    #486

    Ввод чисел с опциями мин/макс/шаг

    Создано 12 июля 2017 г. • Последнее обновление: 16 января 2019 г.

    #401

    Добавить предварительный просмотр динамического фрагмента в поле выбора фрагмента

    Создано 9 июня 2016 г. • Последнее обновление: 11 июля 2018 г.

    #294

    FR: вырезать/копировать и вставить блоки

    Создано 07.06.2015 • Последнее обновление: 28 апреля 2021 г.

    #265

    Добавить описание в настройки

    Создано 19 февраля 2015 г. • Последнее обновление: 02 июля 2015 г.

    #222

    Установить шаблон по умолчанию с помощью параметра GET

    Создано 23 октября 2014 г. • Последнее обновление: 11 июля 2018 г.

    #213

    Добавить тип ввода оглавления

    Создано 13 октября 2014 г. • Последнее обновление: 14 ноября 2014 г.

    #156

    Рефакторинг ограничений, позволяющий полям/макетам/шаблонам проходить ограничения

    Создано 10 июля 2014 г. • Последнее обновление: 21 ноября 2018 г.

    #88

    Добавить возможность выбора набора свойств при вводе фрагмента

    Создано 5 мая 2014 г. • Последнее обновление: 2018–09.-25

    #71

    Скрыть настройки макета для редакторов контента (ACL/опция?)

    Создано 10 апреля 2014 г. • Последнее обновление: 23 июля 2015 г.

    #56

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

    Создано 01.04.2014 • Последнее обновление: 23 июля 2015 г.

    #23

    Блокировка содержимого для предотвращения редактирования редакторами

    Создано 10 февраля 2014 г. • Последнее обновление: 2019 г.-03-22

    #4

    [Тип ввода] Twitter

    Создано 05.12.2013 • Последнее обновление: 20 января 2016 г.

    Отказ от ответственности: просмотр цен не в евро

    В настоящее время вы просматриваете цены в валюте, отличной от евро. Обратите внимание, что эти цены являются оценочными , основанными на данных Open Exchange Rates.

    Хотя мы предлагаем этот конвертер валют, надеясь, что наши пользователи сочтут его удобным, все покупки осуществляются в евро, а окончательная взимаемая сумма может варьироваться в зависимости от платежной системы, дня, времени суток и ряда других факторов, не зависящих от мода и . Нет никаких гарантий на точность и мод больше , ни Open Exchange Rates не могут нести ответственность за ошибки.

    ×

    NetworkIt — Фрагмент социальной сети для MODx Revolution

    Обратите внимание: я переключил свое внимание на Python/Linux/разработку встраиваемых систем и больше не принимаю проекты MODX или PHP. Для работы с MODX я рекомендую Grey Sky Media.

    Обратите внимание: проект Networkit заброшен. Пожалуйста, не используйте его, кроме как для справки, при разработке собственных компонентов.

    Источник, документы и ошибки:

    • NetworkIt и UserUrls в настоящее время находятся на gitHub (имя пользователя yoleg)
    • Документация: см. вики gitHub для обоих проектов.
    • Отчеты об ошибках: используйте средство отслеживания ошибок gitHub для обоих проектов.

    21.05.2011: Вот текущий статус проекта:

    • Я разделяю проект на два компонента: UserUrls (компонент дружественного URL) и NetworkIt (обмен сообщениями и соединения). NetworkIt будет поставляться с возможностью мгновенной интеграции UserUrl, хотя, надеюсь, он будет совместим с любой дружественной настройкой URL.
    • UserUrls отправлены в репозиторий MODx. Однако структура URL не очень гибкая (что не очень похоже на MODx), и будущие версии могут значительно изменить функциональность. URL-адреса в настоящее время установлены на site.com/username и site.com/username/custom-action.
    • Пока NetworkIt не выйдет, вы можете использовать UserUrls с выходными фильтрами: [[!uuId:userinfo=`fullname`]], Quip, Profile (пакет входа), FormIt, Peoples, Gravatar и другие.

    Инструкции для пакета Forum

    Примечание. Относится к NetworkIt 0.2. Загрузите новую версию на форуме.

    Цель: Каждый пользователь на вашем сайте получит свою собственную общедоступную страницу профиля с удобным URL-адресом, общедоступной стеной сообщений и возможностями личных сообщений. Под «общественным» я подразумеваю доступность для кого-то, кроме них самих. Вы по-прежнему сможете устанавливать разрешения группы ресурсов на страницах «шаблонов» и контролировать, кто может просматривать профили и стены сообщений.

    Вот как будут выглядеть URL-адреса:

    1. site.com/john (где john — имя пользователя)
    2. site.com/john/messages (где сообщения — это действие)
    3. site.com/mary/some-custom-action
    4. и т.д…

    1. Создайте свой шаблон

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

    1. Удалите ваши канонические, хлебные крошки или что-то еще, что создает ссылки с использованием этого идентификатора страницы, поскольку URL-адреса будут используйте имена пользователей вместо псевдонимов.
    2. Поместите в шаблон следующий код: [[!NetworkIt]]

    2. Создайте свои страницы

    Создайте две страницы, используя только что созданный шаблон профиля пользователя. Желательно, чтобы они были скрыты из меню и недоступны для поиска.

    Первая страница будет страницей профиля пользователя по умолчанию (в данном примере это будет идентификатор страницы 122). Доступ к нему можно получить, перейдя на site.com/username. Поместите на страницу следующее, чтобы протестировать функциональность общедоступной стены сообщений (стиль Twitter/Facebook/MySpace):

    [[$publicWall]]

    Вторая страница будет примером «подстраницы» (или «действия»). Давайте назовем действие «сообщения», и допустим, что это идентификатор страницы 123 для этого примера. Доступ к нему можно получить, перейдя на site.com/username/messages. Разместите на странице следующий код, который продемонстрирует функциональность личных сообщений:

    [[$privateWall]]

    3. Настройте параметры сайта

    Создайте следующие параметры и значения сайта:

    1. ключ: wall_start  
      значение:  122
      (замените 122 идентификатором ресурса страницы вашего профиля пользователя по умолчанию)
    2. Ключ
    3. wall_actions
      значение:  123:messages
      (замените 123 любым идентификатором страницы сообщений. Чтобы добавить дополнительные действия, просто разделите их запятой. Например: 123:messages,124:favorite-colors ,127:pets ,и т. д…. Цифры — это идентификатор страницы, которая будет использоваться в качестве шаблона, а строки — это действие URL, следующее за именем пользователя.)

    Кроме того, убедитесь, что ваши FURL включены и работают, что у вас есть специальная страница 404, и что все остальное на вашем сайте работает должным образом.

    4. Добавить разрешения — необязательно

    В демонстрационных фрагментах для &minimumPermissions установлено значение «загрузка» для фрагмента кода formit2messages, поэтому этот шаг можно пропустить. Однако по умолчанию для публикации сообщений требуется специальное разрешение. Наконец, настройте следующие настраиваемые разрешения и убедитесь, что они есть у вошедших в систему пользователей:  wall.post_messages и wall.view_messages . Лучший способ сделать это — перейти в «Безопасность» -> «Контроль доступа» -> «Политики доступа» -> «Добавить». Создайте политику NetworkIt и отредактируйте ее. Перейдите на вкладки «Разрешения» и нажмите кнопку «Новое разрешение», чтобы добавить новые разрешения. Затем назначьте политику NetworkIt своей группе «Зарегистрированные пользователи» (или любой другой группе, которую вы хотите использовать). По умолчанию пользователи могут просматривать сообщения только с разрешениями на загрузку, но они не могут публиковать сообщения без разрешений wall.post_messages.

    5. Активируйте подключаемый модуль

    Убедитесь, что подключаемый модуль NetworkItFURL срабатывает при событии onpagenotfound и что ваш сайт настроен на дружественные URL-адреса (перезапись). Протестируйте его, перейдя на site.com/username (для существующего и активного пользователя). Если не получится — дайте знать!

    Устранение неполадок

    • Попробуйте удалить фрагменты примеров publicWall и privateWall со своих страниц и посмотрите, сможете ли вы сначала заставить работать понятные URL-адреса.
    • Если у вас по-прежнему возникают проблемы, удалите вызов фрагмента NetworkIt и посмотрите, сможете ли вы заставить только подключаемый модуль перенаправлять на имя пользователя в URL-адресе.
    • Используйте простые заполнители, такие как [[+public.username]], чтобы проверить, получает ли информация профиля от NetworkIt перед добавлением фрагментов publicWall или privateWall обратно на страницу.
    • Если проблема заключается в фрагментах public/privateWall, попробуйте разделить их на отдельные вызовы фрагментов (Formit без formit2messages, Formit с formit2messages и getMessages), чтобы сузить проблему.
    • Если вы сузите круг проблемы, я могу ее устранить, поэтому просто свяжитесь со мной или напишите сообщение на форуме.

    Доступные сгенерированные заполнители

    Фрагмент кода NetworkIt автоматически запускает фрагмент профиля (из пакета Login), поэтому убедитесь, что он установлен. Он выводит следующие заполнители: [[+public.username]], [[+public.fullname]], [[+public.id]] и т. д. для каждого пользовательского поля, которое Profile может выводить, но с публика. префикс установлен по умолчанию (вы можете изменить это в параметрах).

    Он также выводит два специфических для NetworkIt заполнителя: [[+net_userid]] (основной идентификатор пользователя для профиля) и [[+net_action]] (имя действия — пример: сообщения).

    Параметры NetworkIt

    Вкратце, следующие важные параметры основного фрагмента кода NetworkIt: 

    • profilePrefix: параметр префикса для передачи во фрагмент профиля (общедоступный по умолчанию)
    • profileUseExtended: установите значение false, чтобы отключить синтаксический анализ расширенных пользовательских полей

    Хлебные крошки, канонические и другие URL-адреса

    Для создания URL-адресов следует использовать [[+public.username]]/[[+net_action]] для страниц действий или просто [[+public.username]] для главной страницы профиля.

    Ссылки на страницы профиля

    1. Для ссылки на страницы профиля/стены сообщений вошедшего в систему пользователя в меню вашего сайта (Wayfinder): Используйте веб-ссылки с URL-адресом веб-ссылки, установленным на [[+modx.

      Добавить комментарий

      Ваш адрес email не будет опубликован. Обязательные поля помечены *