Дата публикации
18 Июня 2019
Дата изменения
4 Июля 2020
Уникальных просмотров
710

Оглавление

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

Благодарность автору

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

Один из самых популярных способов поблагодарить автора, воспользоваться сервисом Яндекс.Деньги.

Время работы: 0,1015 s
Время запросов: 0,1015 s
Количество запросов: 24
Источник: cache