- fenom не работает
- Комментарии (4)
- Не работает тег ignore — что делать
- Оглавление
- Почему не работает тег ignore
- Варианты решения проблемы:
- Обрамляем код в тег ignore
- Решение от автора сайта modzone
- Пробелы между фигурными скобками
- Встроенные модификаторы
- [Fenom] Почему не работает тег ignore
- Шаг 1. Обработка кэшируемых элементов
- Шаг 2. Обработка некэшируемых элементов без удаления нераспарсенных тегов
- Шаг 3. Обработка некэшируемых элементов с удалением нераспарсенных тегов
- Примечание
- Вариант 1
- Вариант 2
- Заключение
- Update 07.12.2017
- Как сделать так, чтобы Fenom не ломал сайт на MODX? #308
- Comments
- sergx commented Nov 11, 2019
- pafnuty commented Nov 12, 2019
- touol commented Nov 12, 2019
- pafnuty commented Nov 12, 2019
- touol commented Nov 13, 2019 •
- touol commented Nov 13, 2019 •
- pafnuty commented Nov 13, 2019
- touol commented Nov 13, 2019 •
- Pathologic commented Nov 13, 2019 •
- touol commented Nov 13, 2019 •
- Pathologic commented Nov 13, 2019
- touol commented Nov 13, 2019 •
fenom не работает
Если tv пустое, то чанк не должен выводиться:
[[$[[*tags:!empty=`article`]]]]
Но на форуме почитал что есть fenom, который и быстрее работает и лучше, и вообще он идеален.
В настройках pdoTools включил: Использовать Fenom в чанках, Использовать Fenom на страницах, Кэширование скомпилированных чанков.
Заменяю [[*pagetitle]] на <$_modx->resource.pagetitle> и в title не выводится текстовый title.
В журнале ошибок: «И сильно выиграю в производительности используя fenom на небольшом сайте?» Если у вас там пять страниц, то может и нет смысла заморачиваться. А так феном и удобней и гибче. Феном считает всё что идёт в фигурных скобках своими переменными. В консоле ошибок вот такое: Я так понял дело в скобках, но если я оборачиваю скобки в ingore то у меня ничего не грузится и текстовый редактор показывает ошибку в коде. Для добавления комментариев вы должны авторизоваться или зарегистрироваться. Источник Избавляемся от ошибок Fenom при использовании фигурных скобок или почему не работает тег ignore. Переписывая родные теги MODx на Fenom или при работе с pdoParser, разработчики часто встречаются с ошибкой, которую генерирует шаблонизатор Fenom. Сергей Шлоков в своей статье — [Fenom] Почему не работает тег ignore, подробно расписал механику работы pdo парсера и объяснил, что именно вызывает ошибку. Если front-end вашего сайта лег (белая страница или ошибка 500), а в логах вы встречаете подобные ошибки: это значит что вы либо не использовали тег ignore, либо он не работает, не производится игнорирование тегов, которые заключены в фигурные скобки. Есть несколько вариантов как избавиться от этой ошибки: Первый вариант решения проблемы — заключить ваш код в тег фенома ignore . Если первый вариант не помог, то в статье по ссылке выше, есть два варианта решения. # На случай если два варианта выше не помогли или не подошли, есть еще один. Он немного костыльный, но по большому счету ничего ужасного в нем нет. Необходимо поставить пробелы между фигурными скобками: В этом случае тег ignore не нужен. Одним из решений которые я обнаружил, оказалось использование встроенных в pdoTools модификаторов. Это удобно когда вы подключаете JS-код. Например можно воспользоваться модификатором jsToBottom: Источник Это достаточно частый вопрос. И даже мне из-за этого приходилось переделывать вёрстку. Ответ в понимании механизма парсинга. В предыдущей статье я уже описывал последовательность подготовки ответа пользователю. Давайте её вспомним. Сначала MODX получает контент шаблона и передаёт его парсеру (мы говорим о pdoParser). Если шаблона нет, то берётся контент ресурса. Далее: На каждом этапе MODX парсит контент на глубину до 10-го уровня. Т.е. распарсил тег, и если результат содержит ещё теги MODX, то запускается новый цикл парсинга. И так 10 раз. Теперь давайте возьмём пример из первой ссылки. В шаблоне пишем теги Fenom: И в ресурсе тоже вызываем сниппет через Fenom: Теперь посмотрим как это будет парсится по шагам. На этом шаге в парсер попадет контент шаблона (см. код выше). Теги Fenom на этом этапе не парсятся. MODX ищет кэшируемые теги. Таких, как мы видим, нет. Обработка закончена. На этом этапе Fenom уже запускается (только если есть теги Fenom). Он получает первоначальный контент и парсит его. Результат будет такой: Тег <$_modx->resource.content> заменён на контент ресурса, а тег Вот теперь самое интересное. На этом шаге в контенте всё ещё присутствуют теги Fenom. Поэтому он, имея полное право, парсит их. А своими тегами Fenom считает всё, что обернуто фигурными скобками, но за одним исключением (и это исключение добавил Василий) — теги должны начинаться с $ , ‘ , ( , строки с пробела (вот тут я об этом писал). А так как тега Если в контенте есть только теги типа <3>, Fenom их пропускает, так как они не подходят под регулярку (если только вы не правили её, удалив, например, \s ). Он просто не запустится. Но если на странице есть правильные теги, то он обработает все фигурные скобки без исключений. Т.е. вместе с «правильными» тегами Fenom обработает и те, которые изначально игнорирует. Надеюсь, теперь понятно, почему «не работает» тег Самый просто вариант — указать в шаблоне кэшируемый тег [[*content]] вместо <$_modx->resource.content> : Тогда MODX уже на первом шаге подготовит для Fenom такой контент: Здесь уже и контент ресурса и тег На третьем шаге Fenom пропустит этот контент, так как теги <цифра>не соответствуют регулярному выражению (если вы его не правили). В итоге вы получите ожидаемый результат. Перенести блок с тегом В общем идея должна быть понятна — тег В новой версии pdoTools эта проблема устранена. Решение простое — содержимое тега Источник The text was updated successfully, but these errors were encountered: @sergx Больше контекста в обсуждении здесь https://modx.pro/help/19203 Из темы на сайте я понял, что есть две проблемы: В первом случае точно стоит убрать весь контент сайта в Во втором — стоит контролировать тот код, который добавляется в шаблон и сделать инструкцию для контент-редакторов или тех людей, которые пользуются такой возможностью. Тут так же никто не запретит вставить валидный тег, который будет ронять производительность сайта например. Для меня, как человека далёкого от MODX (бэкграунд bitrix и dle и к обоим системам я прикручивал fenom) в целом понятна проблема, я бы тоже очень хотел защитить сайт от поломок со стороны контент-редакторов и «программистов-менеджеров», но как для владельца сайта — я бы сильно надавал по рукам тем контент-редакторам, которые не понимают с какой системой работают и сразу бы выдал нужные инструкции, а ещё лучше записал бы демо как можно и как не стоит делать :)) Ну и в коментах был предложен код, который вполне можно попробовать оформить в виде PR и улучшить шаблонизатор, @bzick насколько я знаю, всегда рад улучшениям. Если сделать настраиваемый (на свой страх и риск) уровень обработки ошибок, вероятно это поможет кому-то жить спокойно. P.S. JS из тела выносить нужно и это можно сделать в 99,9999% случаев. Есть куча возможностей. Ну и в коментах был предложен код, который вполне можно попробовать оформить в виде PR и улучшить шаблонизатор, @bzick насколько я знаю, всегда рад улучшениям. В коментах я костыль предложил :-(. Вообще по хорошему, чтоб решить эту проблему, надо бы в феноме сделать опцию, при включении которой, феном, вместо выбрасывания исключения, писал ошибку в лог. И можно было использовать феном так if($tpl->getError()) < P.S. JS из тела выносить нужно и это можно сделать в 99,9999% случаев. Есть куча возможностей. В MODX в теле активно используется JSON и вынести его из тела нельзя. @touol ну тогда однозначно не стоит обрабатывать контент шаблонизатором. С этим есть сложности? @pafnuty У меня лично с контентом особых проблем не возникало. А вот иногда нужно включить fenom на сайте, который на половину написан другими программистами, и сразу возникают проблемы с JSON и JS. На феноме многие вещи в MODX писать удобнее, чем на его стандартном синтаксисе. То есть, мне удобнее включить феном. А вот синтаксис популярных сниппетов MODX использует JSON. И сайт вылетает. @pafnuty Все дело в том, что в MODX Revo обработка феномом запускается несколько раз, отсюда и все проблемы у пользователей. Сделать однократный запуск возможно, но автор интеграции отказался, так как это ломает подход к разработке, принятый в MODX. @Pathologic не вводите в заблуждение. Это не причем. Не корректный тег и феном в любом случае пустую страницу отдаст. Он так устроен. Было бы очень здорово, если бы вместо ошибки, роняющей страницу, работал бы механизм типа ignore, и этот блок не обрабатывался, а выводился бы «как есть». Есть ли в планах внедрить такой механизм? Или может быть уже сейчас есть какая-то настройка типа «soft-mode», позволяющая переключить парсер в щадящий режим? @touol Тег ignore для того и предназначен, чтобы обозначить места, которые не должен обрабатывать шаблонизатор, тогда и ошибок никаких не будет. В общем случае, у вас эта проблема будет с любым шаблонизатором, если использовать их так, как сейчас используется феном в рево. Вообще, не смущает, что с этой проблемой приходят только из рево? Что только там в документации написано пробелы после скобок ставить? 😃 Вообще, не смущает, что с этой проблемой приходят только из рево? Не смущает. Для других вылет сайта при ошибке в написании тега — это типа се ля ви. Привыкли и о другом не думают. А в MODX, при ошибке в его тегах, тег просто не срабатывает и все. И хочется чтоб при использовании феном было так же. А в Modx с феном получаем пустую страницу и не совсем информативное сообщение в логах Для Modx много удобней чтоб ошибочные теги выводились как есть. Я 6 лет назад сделал сайт на Modx без феном. Тогда его для MODX не было. Сейчас уже к феном привык и хотел бы его использовать на этом сайте. Но стопудово это его сломает :-(. Там куча и JSON и JS. А если бы феном для Modx выводил ошибочные теги как есть, то я бы сразу там феном и включил :-). Источник
[2017-07-20 16:35:20] (ERROR @ core/components/pdotools/model/pdotools/pdotools.class.php: 942) Unexpected tag ‘lat’ in 576d495e0bb182fbe08545f65f92bd8c line 159, near ‘Комментарии (4)
Почитайте тесты:
/core/components/pdotools/model/pdotools/pdotools.class.php: 942) Unexpected tag ‘lat’ in 576d495e0bb182fbe08545f65f92bd8c line 159, near ‘
может всё нужно заменить?
Прикрепленный код файла core/components/pdotools/model/pdotools/pdotools.class.php
начинается со 158 строки по 170
Заранее спасибоНе работает тег ignore — что делать
Оглавление
Почему не работает тег ignore
Варианты решения проблемы:
Обрамляем код в тег ignore
Решение от автора сайта modzone
Пробелы между фигурными скобками
Встроенные модификаторы
[Fenom] Почему не работает тег ignore
Шаг 1. Обработка кэшируемых элементов
Шаг 2. Обработка некэшируемых элементов без удаления нераспарсенных тегов
Шаг 3. Обработка некэшируемых элементов с удалением нераспарсенных тегов
Примечание
Вариант 1
Вариант 2
Заключение
Update 07.12.2017
Как сделать так, чтобы Fenom не ломал сайт на MODX? #308
Comments
sergx commented Nov 11, 2019
pafnuty commented Nov 12, 2019
Надо бы побольше контекста, т.к. не совсем понятно какой код парсится, но мне кажется, что можно посмотреть в сторону https://github.com/fenom-template/fenom/blob/master/docs/ru/ext/extend.md#Расширение-тестового-оператора
либо, если есть возможность, после открывающей скобки ставить новую строку.touol commented Nov 12, 2019
pafnuty commented Nov 12, 2019
touol commented Nov 13, 2019 •
`
$tpl = $fenom->getRawTemplate()->source($name, $content, true);
.
>
`
В, принципе, я могу сделать такую фичу, но, во первых, надо договориться с разработчиками fenom, что такая фича нужна. Просто так тратить время мне, да и никому, не охота. Во вторых, возможно, потребуются консультации.touol commented Nov 13, 2019 •
pafnuty commented Nov 13, 2019
touol commented Nov 13, 2019 •
Мое мнение, что, если fenom, на тех тегах что не может опознать, вместо исключения пропускал их как они есть, то тогда было бы намного удобнее.Pathologic commented Nov 13, 2019 •
touol commented Nov 13, 2019 •
А. прочитал ссылку. Тут проблема не с ignore. Тут мы тупо хотим, чтоб тег, не правильный с точки зрения феном, тупо иногрировался и сайт не ломался. Раздражает искать включения JS/JSON по по всему сайту и ставить пробелы.
Pathologic commented Nov 13, 2019
touol commented Nov 13, 2019 •
В самом феноме без MODX ошибки не куда пихать. Ее надо разрабу сообщить и логично вызвать исключение с выводом на страницу типа
Fatal error: Uncaught exception ‘Fenom\Error\UnexpectedTokenException’ with message ‘Unexpected end of expression’ in D:\OpenServer\domains\modx.loc\modMiniIDE\model\vendor\fenom\src\Fenom\Template.php:789 Stack trace: #0 D:\OpenServer\domains\modx.loc\modMiniIDE\model\vendor\fenom\src\Fenom\Compiler.php(102): Fenom\Template->parseExpr(Object(Fenom\Tokenizer)) #1 [internal function]: Fenom\Compiler::ifOpen(Object(Fenom\Tokenizer), Object(Fenom\Tag)) #2 D:\OpenServer\domains\modx.loc\modMiniIDE\model\vendor\fenom\src\Fenom\Tag.php(146): call_user_func(‘Fenom\\Compiler. ‘, Object(Fenom\Tokenizer), Object(Fenom\Tag)) #3 D:\OpenServer\domains\modx.loc\modMiniIDE\model\vendor\fenom\src\Fenom\Template.php(651): Fenom\Tag->start(Object(Fenom\Tokenizer)) #4 D:\OpenServer\domains\modx.loc\modMiniIDE\model\vendor\fenom\src\Fenom\Template.php(580): Fenom\Template->parseAct(Object(Fenom\Tokenizer)) #5 D:\OpenServer\domains\modx.loc\modMiniIDE\model\vendor\fenom\src\Fenom\Template.php(274): Fenom\Template->parseTag(Object(Fenom\Toke in main.tpl on line 18
pdotools.class.php : 996) Unclosed tag: