Оборачиваем не пустые MODX-теги

Если вы когда-нибудь хотели обернуть тег MODX в HTML, и хотели бы сделать это, только если значение не было пустым, то вам следовало бы обратить внимание на следующее:

[[*longtitle:notempty=`
[[*longtitle]]
`]]

Есть еще один способ (очень MODX-овый ;), используя который, вы добьётесь сохранения логики в сниппете, а итоговые шаблоны можно будет разбить на чанки. Кроме того, всё умещается в одну строчку PHP!

Теперь я объясню вам, как это делается…

Создайте сниппет для MODX, щелкнув правой кнопкой мыши на "Сниппеты" в дереве элементов и выбрав "Новый сниппет". Назовите его, как хотите, - в моём случае -"wrapifnotempty". Затем вставьте это одной строкой в поле кода:

if (!empty($input)) return $modx->getChunk($options, array('output' => $input));
  1. Этот сниппет предназначен для использования в качестве модификатора вывода, поэтому переменная $input заполняется значением любого MODX тега, который вы вызываете с модификатором вывода, например: [[*introtext:wrapifnotempty]].
  2. Переменная $options содержит значение внутри кавычек, которое в синтаксисе модификатора вывода используется следующим образом: [[*introtext:wrapifnotempty=`myChunkName`]]. Это значение является первым аргументом, переданным в $modx->GetChunk, который ссылается на Chunk по имени.
  3. Второй аргумент в $modx->GetChunk представляет собой массив с ключом-заполнителем, в данном случае - 'выводом' и значение для отображения в этом заполнителе, которое составляет $input, то есть значение поля ввода.

Другими словами, возьмите значение этого поля и оберните его этим Chunk, тем самым превращая значение поля в заполнитель под названием "вывод". Ваш Chunk может содержать что-то вроде:

[[+output]]

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