ignore tags что значит

Избавляемся от ошибок Fenom при использовании фигурных скобок или почему не работает тег ignore.

ignore tags что значит. Смотреть фото ignore tags что значит. Смотреть картинку ignore tags что значит. Картинка про ignore tags что значит. Фото ignore tags что значит

Оглавление

Почему не работает тег ignore

Переписывая родные теги MODx на Fenom или при работе с pdoParser, разработчики часто встречаются с ошибкой, которую генерирует шаблонизатор Fenom. Сергей Шлоков в своей статье — [Fenom] Почему не работает тег ignore, подробно расписал механику работы pdo парсера и объяснил, что именно вызывает ошибку.

Если front-end вашего сайта лег (белая страница или ошибка 500), а в логах вы встречаете подобные ошибки:

это значит что вы либо не использовали тег ignore, либо он не работает, не производится игнорирование тегов, которые заключены в фигурные скобки.

Варианты решения проблемы:

Есть несколько вариантов как избавиться от этой ошибки:

Обрамляем код в тег ignore

Решение от автора сайта modzone

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

Пробелы между фигурными скобками

На случай если два варианта выше не помогли или не подошли, есть еще один. Он немного костыльный, но по большому счету ничего ужасного в нем нет. Необходимо поставить пробелы между фигурными скобками:

В этом случае тег ignore не нужен.

Встроенные модификаторы

Одним из решений которые я обнаружил, оказалось использование встроенных в pdoTools модификаторов. Это удобно когда вы подключаете JS-код. Например можно воспользоваться модификатором jsToBottom:

Источник

Использование расширенных возможностей игнорирования

Возможности игнорирования слов и хештегов

Твиты могут содержать материалы, которые вы не хотели бы видеть. Мы предлагаем вам возможность игнорировать твиты, которые содержат определенные слова, фразы, имена пользователей, смайлики или хэштеги. Игнорирование этих твитов позволяет удалить их со вкладки уведомлений, из ленты на Главной странице, из ответов, а также отказаться от получения соответствующих push-уведомлений, SMS-сообщений и почтовых уведомлений.

Примечание. Игнорирование слов и хештегов распространяется только на уведомления и ленту на главной странице. Эти твиты будут по-прежнему отображаться в результатах поиска. Параметры уведомлений об игнорируемых словах и хештегах распространяются на ответы и упоминания, а также на любые отклики на них: отметки «Нравится», ретвиты, дополнительные ответы и твиты с цитатами.

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

Общая информация об игнорировании слов, фраз, имен пользователей, эмодзи и хештегов

Примечание. Если вы уже добавили слова в список игнорируемых, когда данная функция распространялась только на уведомления, будут включены следующие параметры по умолчанию: Только уведомления; Любые пользователи; Навсегда. Параметры игнорирования можно изменить в любое время. Инструкции приведены ниже.

Источник

[Fenom] Почему не работает тег ignore

Это достаточно частый вопрос. И даже мне из-за этого приходилось переделывать вёрстку. Ответ в понимании механизма парсинга. В предыдущей статье я уже описывал последовательность подготовки ответа пользователю. Давайте её вспомним. Сначала MODX получает контент шаблона и передаёт его парсеру (мы говорим о pdoParser). Если шаблона нет, то берётся контент ресурса. Далее:

На каждом этапе MODX парсит контент на глубину до 10-го уровня. Т.е. распарсил тег, и если результат содержит ещё теги MODX, то запускается новый цикл парсинга. И так 10 раз.

Теперь давайте возьмём пример из первой ссылки. В шаблоне пишем теги Fenom:

И в ресурсе тоже вызываем сниппет через Fenom:

Теперь посмотрим как это будет парсится по шагам.

Шаг 1. Обработка кэшируемых элементов

На этом шаге в парсер попадет контент шаблона (см. код выше). Теги Fenom на этом этапе не парсятся. MODX ищет кэшируемые теги. Таких, как мы видим, нет. Обработка закончена.

Шаг 2. Обработка некэшируемых элементов без удаления нераспарсенных тегов

На этом этапе Fenom уже запускается (только если есть теги Fenom). Он получает первоначальный контент и парсит его. Результат будет такой:

Шаг 3. Обработка некэшируемых элементов с удалением нераспарсенных тегов

Примечание

Если в контенте есть только теги типа <3>, Fenom их пропускает, так как они не подходят под регулярку (если только вы не правили её, удалив, например, \s ). Он просто не запустится. Но если на странице есть правильные теги, то он обработает все фигурные скобки без исключений. Т.е. вместе с «правильными» тегами Fenom обработает и те, которые изначально игнорирует.

Надеюсь, теперь понятно, почему «не работает» тег . Теперь давайте рассмотрим вариант решения.

Вариант 1

Самый просто вариант — указать в шаблоне кэшируемый тег [[*content]] вместо <$_modx->resource.content> :

Тогда MODX уже на первом шаге подготовит для Fenom такой контент:

Здесь уже и контент ресурса и тег . Fenom его учтёт и вернёт уже такой результат (это второй шаг):

На третьем шаге Fenom пропустит этот контент, так как теги <цифра>не соответствуют регулярному выражению (если вы его не правили).

В итоге вы получите ожидаемый результат.

Вариант 2

Перенести блок с тегом в ресурс. Тогда Fenom только на третьем (последнем) шаге получит контент из блока кода №5 и Fenom пропустит всё что указанно в .

Заключение

В общем идея должна быть понятна — тег должен присутствовать в итерации, после которой больше не будет тегов Fenom. К сожалению, добиться этого не всегда получается. Специфика MODX.

Update 07.12.2017

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

Источник

Парсер

Парсер pdoTools представляет из себя отдельный класс, который прописывается в системных настройках MODX и перехватывает обработку тегов на странице.

По умолчанию в MODX нет этих настроек, они нужны только для подключения стороннего парсера, как в нашем случае.

Принцип работы

pdoParser может быть использован в двух случаях:

Обработка чанка

В классе pdoTools для этого есть 2 метода, очень похожих на таковые в классе modX:

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

Варианты чанков

Итак, оба метода pdoTools поддерживают следующие виды имён чанков:

То есть, если вызвать сниппет на странице вот так:

По этой же причине у вас никогда не будут работать вызовы сниппетов и фильтров в INLINE чанках. Вот так работать не будет:

Помните об этом нюансе при использовании INLINE чанков.

Многие люди обвиняют MODX в том, что он не умеет хранить чанки в файлах и вынуждает лишний раз работать с базой данных. Это и неудобно для системы контроля версий, и медленнее.

С версии 2.2 MODX предлагает использовать для этих целей статичные элементы, но по ряду причин, этот способ всё равно может быть менее удобен, чем прямая работа с файлами.

pdoTools открывает такую возможность при указании @FILE:

В целях безопасности, использовать можно только файлы с расширеним html и tpl, и только из определённой, заранее заданной директории в настройке pdotools_elements_path.

Вы можете указать свою собственную директорию для файлов через параметр &elementsPath :

Файл будет загружен из файла /core/elements/resources/mychunk.tpl от корня сайта.

Этот тип чанка позволяет использовать шаблоны системы (т.е. объекты modTemplate) для оформления вывода.

Если указан пустой шаблон и в выбранных записях есть поле template с id или именем шаблона, то запись будет обёрнута в этот шаблон:

Это такой аналог сниппета renderResources.

При выводе шаблона можно указывать и набор параметров (как у сниппетов):

Тогда значения из этого набора будут вставлены в шаблон.

Обычные чанки

Это режим по умолчанию, который загружает чанк из базы данных:

Точно так же поддерживаются и наборы параметров:

Метод getChunk

Объявление этого метода выглядит так:

Третий параметр fastMode вырезает все оставшиеся необработанные плейсхолдеры, чтобы не было лишних тегов на странице. Если этого не сделать, то парсер будет пытаться рекурсивно разобрать эти теги (до 10 итераций по умолчанию), что может привести к замедлению работы.

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

Метод parseChunk

А этот метод объявлен вот так:

Он также создаёт чанк из указанного имени, разбирая @BINDING, если есть, а потом просто заменяет плейсхолдеры на значения, без особых обработок.

Это самый простой и быстрый способ оформления данных в чанки.

Обработка страницы

Если pdoParser включен в настройках, то он вызывается и для обработки всей страницы при выводе её пользователю.

При использовании этого парсера все чанки и дополнения MODX обрабатываются немного быстрее. Всего лишь «немного» потому, что он не берёт на себя условия и фильтры, обрабатывая только простенькие теги, типа [[+id]] и [[

Помимо возможной прибавки скорости, вы получаете еще и новые возможности по удобному выводу данных из разных ресурсов.

Теги fastField

В конце 2012 года общественности был представлен небольшой плагин с добавлением новых тегов парсеру MODX, который затем вырос в компонент fastField.

Все теги fastField начинаются с # и дальше содержат или id нужного ресурса, или название глобального массива.

Вывод обычных полей ресурсов:

ТВ параметры ресурсов:

Поля товаров miniShop2:

Массивы ресурсов и товаров:

Можно указывать любые поля в массивах:

Теги fastField можно сочетать с тегами MODX:

Шаблонизатор Fenom

Поддержка шаблонизатора Fenom появилась в pdoTools с версии 2.0, после чего он стал требовать PHP 5.3+.

Он работает гораздо быстрее, чем родной modParser, и если вы перепишите свой чанк так, что в нём не будет ни одного тега MODX, то modParser и вовсе не будет запускаться. При этом, конечно, одновременная работа и старых тегов, и новых в одном чанке допускается.

На обработку шаблонизатором влияют следующие системные настройки:

Итак, по умолчанию Fenom включен для работы только в чанках, которые проходят через pdoTools. Это вполне безопасно и менеджеры системы не получают никаких дополнительных возможностей, кроме более удобного синтаксиса и высокой скорости работы.

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

Синтаксис

Для начала советую прочитать официальную документацию, а дальше мы рассмотрим синтаксис применительно к MODX.

MODXFenom
[[+id]]
[[+id:default=`test`]] |
[[+id:is=«:then=`test`:else=`[[+pagetitle]]`]] |

Для использования более сложных сущностей, в pdoParser предусмотрена служебная переменная <$_modx>, которая даёт безопасный доступ к некоторым переменным и методам системы.

MODXFenomКраткая запись
[[*id]]<$_modx->resource.id>
[[*tv_param]]<$_modx->resource.tv_param>
[[%lexicon]]<$_modx->lexicon(‘lexicon’)>
[[

[[*id]]]]

<$_modx->makeUrl($_modx->resource.id)><$_modx->resource.id \| url>
[[++system_setting]]<$_modx->config.system_setting>

Теги fastField

Вывод тегов fastField с помощью Fenom, на примере вывода заголовка:

Системные переменные

Операции

Как и любой другой язык программирования/шаблонизации, Fenom поддерживает множество различных операторов:

Плейсхолдеры с точкой или тире

Во многих местах MODX используются плейсхолдеры, которые нельзя указывать в Fenom, так как они не соотвествуют правилам наименования переменных PHP. Например, плейсхолдеры с точкой (MODX обычно выставляет так данные массивов) или с тире (ТВ параметры).

При указании неправильных переменных ваш шаблон не будет скомпилирован и вы получите запись об этом в системном журнале.

Заполнение плейсхолдеров

Fenom работает за один проход, то есть, не является рекурсивным, как родной парсер MODX.

Выполнение всей шаблонизации за один раз даёт очень высокую скорость, но также следует учитывать, что плейсхолдеры будут доступны только после отработки соответствующего сниппета.

Например: необходимо получить значение плейсхолдера <$mse2_query>(Поисковой запрос) в форме, но форму поиска отобразить над результатами. Для этого необходимо выполнить сниппет mSearch2 и передать результаты плейсхолдеру, например searchResults :

Далее вызвать сниппет формы поиска, где парсер Fenom подставит значение плейсхолдера <$mse2_query>:

После чего вывести результаты работы сниппета mSearch2:

Если сниппет не умеет сохранять результаты своей работы с плейсхолдер, вы можете присваивать их переменной Fenom:

Очень похоже на логику работы обычного скрипта.

Вывод сниппетов и чанков

Переменная <$_modx>на самом деле представляет собой простой и безопасный класс microMODX

Поэтому сниппеты и чанки вызываются так:

Как видите, синтаксис практически полностью повторяет PHP, что открывает новые возможности. Например, можно указывать массивы, вместо JSON строк.

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

Примеры выше немного безумные, но вполне себе работают.

Управление кэшированием

В объекте доступен сервиc modX::cacheManager, который позволяет вам устанавливать произвольное время кэширование вызываемых сниппетов:

А еще вы можете запускать системные процессоры (если прав хватит):

Проверка авторизации

Так как объекта с пользователем в <$_modx>нет, методы проверки авторизации и прав доступа вынесены непосредственно в класс:

Вывод информации о скорости работы

С версии 2.1.4 вы можете использовать метод <$_modx->getInfo(string, bool, string)> для получения данных о скорости работы системы в данный момент. У него три параметра:

Вывод по умолчанию (строка со всеми данными):

Вывод конкретного значения:

Оформление строк в свой чанк:

Вы можете даже добавить строки в лексикон pdoTools (или любой другой) и выводить ключи через него:

Или оформить без лексиконов, произвольно. Просто присваиваем переменной массив данных и выводим его ключи:

Вывод информации только пользователям, которые авторизованы в менеджере:

Остальные методы

Эти методы должны быть знакомы всем разработчикам MODX, поэтому просто покажу их на примерах:

Вы даже можете получать и выводить ресурсы без сниппетов:

Переодически в класс добавляются новые методы, так что смотрите их в самом файле

Модификаторы

Fenom умеет использовать сниппеты MODX в качестве модификаторов. Например, установив компонент dateAgo, вы сразу можете исопльзовать его для вывода дат:

Модификаторы могут работать последовательно:

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

Объединение массивов

Встроенные модификаторы

На данный момент вы можете использовать следующие модификаторы в Fenom (в скобках указаны равноценные синонимы):

для работы функций регистрации на странице должны быть теги head и body

PCRE модификаторы

Например, выведем email если соответствует регулярному выражению:

Например, получим первое изображение из поля content:

Например, получим только даты:

Например, выведем название сайта без http:

Собственные модификаторы

В качестве примера давайте создадим сниппет randomize, который будет брать полученную строку и прибавлять к ней случайный набор символов. В параметре мы можем передать количество добавляемых символов:

Теперь можно смело использовать новый модификатор как в Fenom

Собственные модификаторы Fenom

Начиная с версии 2.6.0, для добавления модификаторов можно использовать системное событие pdoToolsOnFenomInit:

Теперь модификатор website можно использовать в любых чанках и шаблонах Fenom:

Такие модификаторы являются внутренними методами Fenom и работают быстрее сниппетов, потому что не нужно делать запрос в БД для их загрузки, а потом кэшировать код в файл для запуска.

Примеры полезных собственных модификаторов Fenom

Время чтения

Модификатор для расчета времени чтения содержимого на странице, может быть удобно для блогов и разделов с текстовыми статьями.

Использовать можно, например, вот так: <$_modx->resource.content | readingtime : 150 | decl : ‘минута|минуты|минут’ : true>

Собственные теги Fenom

В fenom можно создавать собственные теги

Теперь спокойно можете перервать работу шаблонизатора используя Пример:

Расширение шаблонов

Использование шаблонизатора Fenom позволяет включать одни чанки (шаблоны в другие) и даже расширять их.

Например, вы можете просто подгрузить содержимое чанка:

Подробнее про читайте в официальной документации.

Пишем базовый шаблон «Fenom Base»:

Он включает обычные чанки (в которых, кстати, обычные плейсхолдеры MODX от компонента Theme.Bootstrap) и определяет несколько блоков , которые можно расширить в другом шаблоне.

Теперь пишем «Fenom Extended»:

Так вы можете написать один базовый шаблон и расширить его дочерними.

Точно также можно писать и расширять чанки, только обратите внимание, что для работы с modTemplate нужно указывать префикс template:, а для чанков нет — они работают по умолчанию во всех и .

Важно! При наследовании Fenom требует обязательного объявления хотя бы одного блока в шаблоне. Т.е. просто унаследовать базовый шаблон строкой нельзя, будет 502 ошибка на уровне PHP. Достаточно объявить любой блок либо переопределить из базового:

Тестирование производительности

Создаём новый сайт и добавляем в него 1000 ресурсов вот таким консольным скриптом:

Затем создаём 2 чанка: modx и fenom со следующим содержимым, соответственно:

И добавляем два консольных скрипта тестирования. Для родного парсера MODX

LimitMODXpdoTools (MODX)pdoTools (Fenom)
100.0369s 8.1973mb0.0136s 7.6760mb0.0343s 8.6503mb
1000.0805s 8.1996mb0.0501s 7.6783mb0.0489s 8.6525mb
5000.2498s 8.2101mb0.0852s 7.6888mb0.0573s 8.6630mb
10000.4961s 8.2232mb0.1583s 7.7019mb0.0953s 8.6761mb
LimitMODXpdoTools (MODX)pdoTools (Fenom)
100.0592s 8.2010mb0.0165s 7.8505mb0.0346s 8.6539mb
1000.1936s 8.2058mb0.0793s 7.8553mb0.0483s 8.6588mb
5000.3313s 8.2281mb0.2465s 7.8776mb0.0686s 8.6811mb
10000.6073s 8.2560mb0.4733s 7.9055mb0.1047s 8.7090mb

Как видите, обработка чанков через pdoTools во всех случаях быстрее. При этом заметно, что у чанков Fenom есть некоторый минимум для старта, который обусловлен необходимостью компиляции шаблона.

Отключение

Для этого вам нужно изменить изменить ровно одну системную настройку:

Для включения pdoParser нужно указать его имя обратно в этой настройке.

Проблемы и решения

При работе с pdoParser, при использовании fenom шаблонизатора, разработчики часто встречаются с выводом белого экрана вместо страниц сайта. Сергей Шлоков в своей статье — Почему не работает тег ignore, подробно расписал механику работы pdo парсера и объяснил, что именно вызывает ошибку.

Если front-end вашего сайта лег (белая страница или ошибка 500), а в логах вы встречаете подобные ошибки:

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

Пробелы вокруг фигурных скобок

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

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

Но надо помнить, что внутри этого тега fenom не работает. Тег должен присутствовать в итерации, после которой больше не будет тегов Fenom. К сожалению, добиться этого не всегда получается. В новой версии pdoTools эта ошибка исправлена, но она всё равно возникает при использовании файловых элементов.

От автора сайта modzone

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

Встроенные модификаторы

Свой модификатор ignore

Можно так же написать свой модификатор ignore с помощью события pdoToolsOnFenomInit. Это намного лучше, чем делать ради этого отдельно сниппет. Этот вариант удобен, когда вы используете <> вне JS кода, например в разметке элемента.

Примеры

Запуск сниппетов в Fenom

1 способ:

2 способ:

Если необходимо вызвать pdopage без параметров:

1 способ

2 способ

Условие IF

Устанавливаем id текущей страницы в переменную

Условие

Условие IF с использованием тренарного оператора

Устанавливаем id текущей страницы в переменную

Условие

Вывод чанка

Получение значения TV у произвольного ресурса:

7 — id ресурса

Информация о прозводителе в miniShop2

Получение изображения через переменную с точкой ($_pls)

Получение превью изображений в корзине

Вывод текущего года

Вывод полного URL адреса текущей страницы вместе с протоколом + canonical

Вывод базового URL

meta robots

За index/noindex отвечает галка в ресурсе: Доступен для поиска.

title

Выводим расширенный заголовок в title, если он не заполнен то выводим просто заголовок

Выводим имя автора контента

Убираем циклическую ссылку с главной страницы

Многие SEO специалисты, считают к примеру что логотип на главной странице не должен вести на нее же, поэтому можно написать такое условие.

Вывод чанка на определенном ресурсе

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

Вывод чанков по ID шаблонов

Вывод даты

Вырезаем пробелы из телефона

Вывод MIGX через fenom

Вывод migx с помощью fenom для текущего ресурса

где elements имя migx тв.

Вывод migx с помощью fenom для произвольного ресурса

где ID id ресурса TV которого нужно вывести, elements имя migx TV.

Ресайз картинок с помощью phpthumbon через fenom

Заключение

Давайте подытожим возможности парсера pdoTools:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *