Jump to main content Jump to doc navigation

Мы помещаем это здесь, потому что часто Сниппеты кода используют Чанки для форматирования данных.

НЕ переусердствуйте с логикой модификатора вывода!

Что такое выходные модификаторы "PHx")? Это упрощенный набор правил синтаксического анализа и модификаций вывода, который позволяет вам манипулировать данными на уровне представления (например: в ваших чанках и шаблонах).

Вероятно, это самая большая ошибка, которую вы можете сделать: добавив слишком много логики в ваши чанки или шаблоны. Прекрасная вещь в MODX как в фреймворке - это его приверженность звуковой архитектуре, и когда вы вкладываете слишком много логики в слой представления (то есть в чанки и шаблоны), вы разрушаете все, что хорошо в этом мире. Иногда вам нужно поместить выходной фильтр или небольшой оператор if в свой чанк, но, пожалуйста, держите его в абсолютном минимуме. Это очень похоже на морфин: морфин является сильным болеутоляющим, когда используется ответственно, но он ужасно вызывает привыкание и может разрушать жизни. Да, это сумасшедшая аналогия, но я подумал об открытии «Реабилитационного центра» для разработчиков с плохими привычками кодирования.

НЕПРАВИЛЬНЫЙ способ сделать это

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

[[+tv.RemovePin:eq=`active`:then=`[[+modx.user.id:memberof=`
Members`:then=`{address:'[[+tv.country]], [[+pagetitle]]', data:'<div class="googleBubble">
[[+tv.Socialicons:replace=`||==`:replace=`facebook==<img src="/assets/images/mapof/facebook.png"
alt="Facebook" width="16" height="16" class="pull-right mR2">`:replace=`linkedin==<img src="/assets/images/mapof/linkedin.png" alt="linked in" width="16" height="16" class="pull-right mR2">`:replace=`twitter==<img src="/assets/images/mapof/twitter.png" alt="twitter" width="16" height="16" class="pull-right mR2">`]]<b>[[+tv.GPGroupName:replace=`'==&apos;`:default=`Dr [[+createdby:userinfo=`fullname`:ucwords]]`]]</b><br>[[+tv.occupation:notempty=`Occupation: [[+tv.occupation]]<br>`]][[+tv.other:notempty=`Occupation: [[+tv.other]]<br><br>`]]
[[+content:replace=`
==<br>`:replace=`'==&apos;`:strip]]<br>[[+tv.leadadmin:notempty=`<br>Admin contact: [[+tv.leadadmin]]`]] [[+tv.opentomembers:notempty=`<br>Open to new members?: [[+tv.opentomembers]]`]]
<br>[[+tv.showEmailAddress:eq=`Yes`:then=`Email: <a href="mailto:[[+createdby:userinfo=`email`]]">
[[+createdby:userinfo=`email`]]</a>`:else=``]]</div>',options:{[[+tv.leadadmin:neq=``:then=`icon: new
google.maps.MarkerImage('/assets/images/mapof/pin-gold.png')`:else=`icon: new
google.maps.MarkerImage('/assets/images/mapof/pin-blue.png')`]]}},`:else=`{address:'[[+tv.country]], [[+pagetitle]]', data:'<div class="googleBubble"><h3>Login to view</h3><p>To view the details of this pin please <a href="[[~702]]">create an account</a> or <a href="[[~702]]">login</a></p>
</div>',options:{[[+tv.leadadmin:neq=``:then=`icon: new
google.maps.MarkerImage('/assets/images/mapof/pin-gold.png')`:else=`icon: new
google.maps.MarkerImage('/assets/images/mapof/pin-blue.png')`]]}},`]]`]]

Если вы пишете такие вещи для своего сайта, прекратите сейчас. Вы сэкономите себе часы и часы, если переосмыслите проблему и переместите всю эту логику в сниппет или поместите ее куда-то еще.

Reasons Why Output Modifiers Might Destroy Your Site

  1. Увеличение затрат на обслуживание: редактирование HTML-кода займет у вас много времени, если вы замаскируете его сложной логикой.
  2. Скорость! Вы не можете полностью кэшировать динамический блок или шаблон, который использует логические условия. Модификаторы вывода намного медленнее, чем простой PHP.
  3. В отличие от PHP, модификаторы вывода не отправляют сообщения об ошибках или номера строк, так что гораздо сложнее отлаживать ошибки!
  4. Модификаторы вывода не используют скобки, и в текстовом редакторе невозможно сопоставить обратные метки, поэтому в вашем коде очень легко делать синтаксические ошибки.

Существуют сотни, если не тысячи сайтов MODX, которые были испорчены и использовались из-за неэффективного логического хаоса, втиснутого в их чанки и шаблоны. Да, это отличная возможность, которую вы можете сделать в последнюю минуту для подстройки данных на уровне представления, но этим можно ужасно злоупотреблять, и хотя ваши сумасшедшие блоки могут иметь смысл для you, как только другой разработчик будет работать над ними, есть вероятность Хорошо, что они захотят удалить весь сайт и заменить его чем-нибудь более разумным.

Одной из вещей, которые отличают MODX, является то, что его слой представления является чистым (или это должно быть так или иначе). Внедрение сложных HTML и CSS является простым делом в MODX. Сравните это с WordPress, Drupal или Joomla: ставки на eLance говорят сами за себя. Намного больше работы по интеграции шаблонов с использованием этих других систем, потому что все они помещают логику в свои слои представления. Когда вы делаете это, вы побеждаете всю цель архитектуры MODX MVC.

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

Правильный способ сделать это

Держите свои чанки и шаблоны чистыми. Они должны быть легко читаемыми и легко редактируемыми.

Дорогой [[+first_name]], было приятно видеть тебя в последний раз [[+day_of_week]]

Что мы видим? Просто. Коротко. Ясно.

Чек лист хорошего чанка

  1. Дайте вашему tpl чанка хорошее описание, чтобы люди знали, что он содержит и какие сниппеты полагаются на него.
  2. Не включайте другие чанки в чанки! Все может стать очень запутанным, если вы начнете спускаться по этой кроличьей норе.
  3. Используйте правильные отступы, чтобы ваш HTML легко читался.
  4. Если вы используете какую-то логику в своих списках Чанков, убедитесь, что вы используете ее ответственно. Не вкладывайте теги и не объединяйте длинные операторы if-else вместе. Хорошее практическое правило таково: если ваш модификатор вывода не помещается на одной строке, то вы должны сделать это по-другому.

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

Смотрите также

  1. Шаблоны ваших сниппетов
  2. Добавление CSS и JS на ваши страницы с помощью сниппетов
  3. Как написать хороший сниппет
  4. Как написать хороший чанк