Не работает тег ignore - что делать
Избавляемся от ошибок Fenom при использовании фигурных скобок или почему не работает тег ignore.
Оглавление
Почему не работает тег ignore
Переписывая родные теги MODx на Fenom или при работе с pdoParser, разработчики часто встречаются с ошибкой, которую генерирует шаблонизатор Fenom. Сергей Шлоков в своей статье — [Fenom] Почему не работает тег ignore, подробно расписал механику работы pdo парсера и объяснил, что именно вызывает ошибку.
Если front-end вашего сайта лег (белая страница или ошибка 500), а в логах вы встречаете подобные ошибки:
(ERROR @ /public_html/core/components/pdotools/model/pdotools/pdotools.class.php : 582) Unexpected token '&' in expression in deebf8d3b231815d0668e2aa47868e7d line 133, near '{&' <- there
или
(ERROR @ /public_html/core/components/pdotools/model/pdotools/pdotools.class.php : 582) Unexpected token 'm' in expression in file:chunks/_counters/metrika.tpl line 3, near '{(m' <- there
это значит что вы либо не использовали тег ignore, либо он не работает, не производится игнорирование тегов, которые заключены в фигурные скобки.
Варианты решения проблемы:
Есть несколько вариантов как избавиться от этой ошибки:
Обрамляем код в тег ignore
Первый вариант решения проблемы — заключить ваш код в тег фенома ignore
.
{ignore}
{ваш код}
{/ignore}
Решение от автора сайта modzone
Если первый вариант не помог, то в статье по ссылке выше, есть два варианта решения.
- Указать в шаблоне кэшируемый тег
[[*content]]
вместо{$_modx->resource.content}
. - Перенести блок с тегом
{ignore}
в ресурс (зачастую такие теги размещают в чанках).
Пробелы между фигурными скобками
На случай если два варианта выше не помогли или не подошли, есть еще один. Он немного костыльный, но по большому счету ничего ужасного в нем нет. Необходимо поставить пробелы между фигурными скобками:
{ ваш код }
В этом случае тег ignore
не нужен.
Встроенные модификаторы
Одним из решений которые я обнаружил, оказалось использование встроенных в pdoTools модификаторов. Это удобно когда вы подключаете JS-код. Например можно воспользоваться модификатором jsToBottom:
{'<script type="text/javascript" >
{Тут ваш большой скрипт Google аналитики или Яндекс.Метрики}</noscript>'
| jsToBottom : true}
В этом случае, никаких манипуляций с пробелами, тэгами ignore и прочими решениями — не нужно.
Fenom модификатор ignore
Можно так же написать свой модификатор ignore с помощью события pdoToolsOnFenomInit. Это намного лучше, чем делать ради этого отдельно сниппет. Этот вариант удобен, когда вы используете {}
вне JS кода, например в разметке элемента.
<?php
/** @var modX $modx */
switch ($modx->event->name) {
case 'pdoToolsOnFenomInit':
$fenom->addModifier('ignore', function ($input) {
$output = '{ignore}' . $input . '{/ignore}';
return $output;
});
break;
}
Пример:
<div class="some class" data-attr='{'{"0":{"items":1,"nav":"false"},"100":{"items":2},"200":{"items":3}}' | ignore}'>
Время запросов: 0,1072 s
Количество запросов: 24
Источник: cache