Оглавление

Почему не работает тег 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

Если первый вариант не помог, то в статье по ссылке выше, есть два варианта решения. 

  1. Указать в шаблоне кэшируемый тег [[*content]] вместо {$_modx->resource.content}.
  2. Перенести блок с тегом {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}'>