А вот иногда нужно включить fenom на сайте, который на половину написан другими программистами, и сразу возникают проблемы с JSON и JS. На феноме многие вещи в MODX писать удобнее, чем на его стандартном синтаксисе. То есть, мне удобнее включить феном. А вот синтаксис популярных сниппетов MODX использует JSON. И сайт вылетает.
Мое мнение, что, если fenom, на тех тегах что не может опознать, вместо исключения пропускал их как они есть, то тогда было бы намного удобнее.
pafnuty commented on September 22, 2023
touol commented on September 22, 2023
Больше контекста в обсуждении здесь https://modx.pro/help/19203
pafnuty commented on September 22, 2023
Из темы на сайте я понял, что есть две проблемы:
- Данные, которые приезжают в контенте.
- Код, который добавляется в шаблон.
В первом случае точно стоит убрать весь контент сайта в т.к. контент в принципе не должен обрабатываться шаблонизатором ну и никто не мешает вставить валидный тег, который положит сайт.
Как перепаять чип микросхему в корпусе QFN и LGA или запаять с разбором ошибок не повредив
Во втором — стоит контролировать тот код, который добавляется в шаблон и сделать инструкцию для контент-редакторов или тех людей, которые пользуются такой возможностью. Тут так же никто не запретит вставить валидный тег, который будет ронять производительность сайта например.
Для меня, как человека далёкого от MODX (бэкграунд bitrix и dle и к обоим системам я прикручивал fenom) в целом понятна проблема, я бы тоже очень хотел защитить сайт от поломок со стороны контент-редакторов и «программистов-менеджеров», но как для владельца сайта — я бы сильно надавал по рукам тем контент-редакторам, которые не понимают с какой системой работают и сразу бы выдал нужные инструкции, а ещё лучше записал бы демо как можно и как не стоит делать :))
P.S. JS из тела выносить нужно и это можно сделать в 99,9999% случаев. Есть куча возможностей.
touol commented on September 22, 2023
В коментах я костыль предложил :-(. Вообще по хорошему, чтоб решить эту проблему, надо бы в феноме сделать опцию, при включении которой, феном, вместо выбрасывания исключения, писал ошибку в лог. И можно было использовать феном так
`
$tpl = $fenom->getRawTemplate()->source($name, $content, true);
if($tpl->getError()) .
>
`
В, принципе, я могу сделать такую фичу, но, во первых, надо договориться с разработчиками fenom, что такая фича нужна. Просто так тратить время мне, да и никому, не охота. Во вторых, возможно, потребуются консультации.
touol commented on September 22, 2023
P.S. JS из тела выносить нужно и это можно сделать в 99,9999% случаев. Есть куча возможностей.
В MODX в теле активно используется JSON и вынести его из тела нельзя.
pafnuty commented on September 22, 2023
Pathologic commented on September 22, 2023
touol commented on September 22, 2023
Было бы очень здорово, если бы вместо ошибки, роняющей страницу, работал бы механизм типа ignore, и этот блок не обрабатывался, а выводился бы «как есть». Есть ли в планах внедрить такой механизм? Или может быть уже сейчас есть какая-то настройка типа «soft-mode», позволяющая переключить парсер в щадящий режим?
Установка PdoTools и базовые основы Fenom
Pathologic commented on September 22, 2023
touol commented on September 22, 2023
Вообще, не смущает, что с этой проблемой приходят только из рево?
Не смущает. Для других вылет сайта при ошибке в написании тега — это типа се ля ви. Привыкли и о другом не думают. А в MODX, при ошибке в его тегах, тег просто не срабатывает и все. И хочется чтоб при использовании феном было так же.
В самом феноме без MODX ошибки не куда пихать. Ее надо разрабу сообщить и логично вызвать исключение с выводом на страницу типа
Fatal error: Uncaught exception ‘FenomErrorUnexpectedTokenException’ with message ‘Unexpected end of expression’ in D:OpenServerdomainsmodx.locmodMiniIDEmodelvendorfenomsrcFenomTemplate.php:789 Stack trace: #0 D:OpenServerdomainsmodx.locmodMiniIDEmodelvendorfenomsrcFenomCompiler.php(102): FenomTemplate->parseExpr(Object(FenomTokenizer)) #1 [internal function]: FenomCompiler::ifOpen(Object(FenomTokenizer), Object(FenomTag)) #2 D:OpenServerdomainsmodx.locmodMiniIDEmodelvendorfenomsrcFenomTag.php(146): call_user_func(‘Fenom\Compiler. ‘, Object(FenomTokenizer), Object(FenomTag)) #3 D:OpenServerdomainsmodx.locmodMiniIDEmodelvendorfenomsrcFenomTemplate.php(651): FenomTag->start(Object(FenomTokenizer)) #4 D:OpenServerdomainsmodx.locmodMiniIDEmodelvendorfenomsrcFenomTemplate.php(580): FenomTemplate->parseAct(Object(FenomTokenizer)) #5 D:OpenServerdomainsmodx.locmodMiniIDEmodelvendorfenomsrcFenomTemplate.php(274): FenomTemplate->parseTag(Object(FenomToke in main.tpl on line 18
А в Modx с феном получаем пустую страницу и не совсем информативное сообщение в логах
pdotools.class.php : 996) Unclosed tag: opened on line 74
Для Modx много удобней чтоб ошибочные теги выводились как есть. Я 6 лет назад сделал сайт на Modx без феном. Тогда его для MODX не было. Сейчас уже к феном привык и хотел бы его использовать на этом сайте. Но стопудово это его сломает :-(. Там куча и JSON и JS.
А если бы феном для Modx выводил ошибочные теги как есть, то я бы сразу там феном и включил :-).
pafnuty commented on September 22, 2023
pafnuty commented on September 22, 2023
Pathologic commented on September 22, 2023
touol commented on September 22, 2023
Мне кажется логичнее добавить обработку и пропуск ошибок компиляции в pdoTools.
Pathologic commented on September 22, 2023
https://github.com/bezumkin/pdoTools/pull/267/files — вот с этой правкой феном будет работать корректно при правильном подходе.
touol commented on September 22, 2023
Другими словами у вас феном или будет работать или не будет, а так, что местами работает, местами не работает — не получится.
Pathologic commented on September 22, 2023
touol commented on September 22, 2023
touol commented on September 22, 2023
pdotools.class.php : 993) Unknown method _appendText
То есть, в классе Template полно приватных методов и мне чтоб заменить 1 функцию надо его полностью скопировать? 🙁
rednakse commented on September 22, 2023
Это, конечно, сильные ограничения разраба, но можно вызывать приватные методы через Reflection.. Например, вот так:
class someClass extends someParentClass < public function someMethod() < $somePrivateMethod new ReflectionMethod(‘someParentClass’, ‘privateMethod’); $somePrivateMethod->setAccessible(true); $somePrivateMethod->invoke($this); > >
Это чертовский костыль, но рабочий.
touol commented on September 22, 2023
sergant210 commented on September 22, 2023
Главная проблема в реализации механизма парсинга. У MODX он отличается от фреймворков кардинально. Поэтому проблемы в MODX будут с любым шаблонизатором.
sergant210 commented on September 22, 2023
Сделал PR и на fenom и на pdoTools. Авось примут :-).
Related Issues (20)
- parent выполняется дважды если использовать его в промежуточном шаблоне HOT 1
- Проблема с оператором in HOT 4
- Uncaught RuntimeException: Template 501.tpl not found HOT 3
- Не хватает одной важной штуки. HOT 4
- $.const.GEO HOT 1
- Ошибка HOT 1
- Release new version (also to Packagist / Composer) HOT 1
- Вызов macro c переменной вместо названия
- Feature request: short closing tag for short usage
- Accessing template variables from function tag/modifier
- Как целиком выпилить использование eval() из Fenom? HOT 9
- Using tags made with addFunction(Smart) not usable when nested.
- $.fetch не совсем корректно работает HOT 1
- Security Issue HOT 1
- NaN check HOT 2
- $fenom->addProvider() — Не работает директория кэша для источника шаблонов.
- Изменения в ветке develop отсутствуют в master HOT 1
- Порядок подключения
- в modx 3 и php8 вот ловится: Fatal error: Uncaught TypeError : FenomRender::__construct(): Argument #1 ($fenom) must be of type Fenom, null given HOT 5
Источник: coder.social
pdoResources как замена getResources
Ближайший аналог этих сниппетов в Evo — это Ditto. Используются для вывода дочерних ресурсов текущего документа, но можно указать и определённого родителя. Как пример, такое можно встретить в блоге — когда выводятся все записи определённой категории. pdoResources гораздо функциональнее и шустрее getResources, поэтому я его больше рекомендую к использованию. Различия в использовании параметров данных снипетов минимальны, поэтому переход на pdoResources будет безболезненным. Там же, где всё-таки есть небольшие нюансы, об этом будет написано отдельно.
Основные параметры
Список родителей, из которых будут выводиться дочерние ресурсы (указываются через запятую). Если перед именем ресурса поставить дефис, то такой ресурс будет исключаться из выборки.
Фильтрация ресурсов по значениям TV.
В качестве разделителя AND используется «,»
В качестве разделителя OR используется «||»
Примеры вызова:
tvFilters=`color==red,size==small` — одно из значений TV равно red, другое равно small,
tvFilters=`mytv==А%` — название TV начинается на А.
pdoResources. Можно использовать кастомные разделители значений. Задаются в параметрах tvFiltersOrDelimiter=`||`, tvFiltersAndDelimiter=`,`- разделители для «ИЛИ» и «И» соответственно.
Так же, можно указывать JSON массив сразу из нескольких полей:
sortdir=`DESC`
Направление для сортировки.
Ограничение по количеству результатов.
Пропуск результатов от начала.
Ограничение выборки по тем или иным параметрам. Представляет собой строку, закодированную в JSON.
Ограничение выборки по контексту.
Дополнительные параметры
Показывать ли неопубликованные ресурсы.
Список TV-параметров, которые нужно подготовить перед выборкой. 1 означает — подготовить все TV.
Префикс для TV параметров.
Цифра, с которой будет начинаться итерируемый плейсхолдер [[+idx]]
JSON-строка с массивом, ключом которого будет выступать строка, которая будет сравниваться с полем, указанным в параметре tplCondition. А в качестве значения ключа будет выступать имя чанка, который будет использован, если условие выполнится.
pdoResources. Оператор сравнения можно дополнительно указать в параметре tplOperator.
Строка для разделения результатов вывода.
Если заполнить значение данного параметра, то вместо плэйсхолдера со всеми результатами, на выходе получится множество плэйсхолдеров, которые начинаются со значения, указанного вами в данном параметре. А после этого параметра будет идти порядковый номер результата плэйсхолдера.
Примеры работы
Самый простой вызов, с необходимым минимумом параметров:
[[!pdoResources? depth=`0` parents=`1` tpl=`catalog_item` tpl=`item_cat_second` parents=`9` sortdir=`ASC` ]]
Источник: cms-dev.ru
FENOM Old Chap аналог/замена/вместо Супротека
Всем здрасьте!) ПРОШУ НЕ СЧИТАТЬ ЗА РЕКЛАМУ! Это личный опыт, как говорится на своей шкуре.
Давно изучал тему применения Супротека, в итоге не стал применять)
Наткнулся на информацию о присадке в масло FENOM Old Chap www.fenom.ru/index.php/pr…ts/product/view/7/21.html. В описании заявлены чудодейственные свойства:
FN437
РЕКОНДИЦИОНЕР МЕТАЛЛА ДЛЯ ДВИГАТЕЛЕЙ АВТОМОБИЛЕЙ С БОЛЬШИМ ПРОБЕГОМ
Специализированный препарат серии FENOM для улучшения эксплуатационных характеристик всех типов бензиновых и дизельных двигателей автомобилей с большим (более 100 тыс.км) пробегом.
Первый и единственный на сегодня представитель нового класса рекондиционеров металла с восстановительным эффектом (metal reconditioner — реставратор металла). Изготовлен по золь-гель технологии. Представляет собой организованную полимолекулярную систему, включающую в себя наноразмерные комплексы органосорбента. Сертифицирован 25 ГосНИИ МО РФ. Защищен патентом РФ.
FENOM OLD CHAP воздействует на приповерхностную область металла, образуя в зоне трения самовосстанавливающуюся сервовитную (защитную) пленку сложного состава, и одновременно с этим обеспечивает повышенную несущую способность смазки за счет структурирования граничной масляной пленки и увеличения адгезии масла к металлу. Способствует образованию надежного масляного клина в зоне контакта сопряженных деталей, имеющих увеличенный зазор вследствие износа при эксплуатации. FENOM OLD CHAP обеспечивает эффективное снижение трения и изнашивания соприкасающихся металлических поверхностей двигателя, уменьшает динамические нагрузки в парах трения с признаками износа, реально продлевая срок их службы. Совместим со всеми типами моторных масел и не изменяет их физико-химических свойств. Добавляется в моторное масло из расчета одна упаковка препарата на 3.5-5 литров масла.
Упак. 250мл.
Дополнительно FENOM OLD CHAP обеспечивает:
-повышение компрессии и ее выравнивание по цилиндрам;
-снижение расхода масла на угар;
-восстановление подвижности поршневых колец и «залипших» гидрокомпенсаторов;
-возрастание эффективной мощности и крутящего момента;
-снижение расхода топлива;
-облегчение «холодного» пуска двигателя;
-снижение уровня шумов и вибрации;
-стойкий противоизносный эффект;
-снижение кинетики деструкции (разложения) моторного масла;
-улучшение экологических характеристик двигателя.
Итак. Присадку решил применить при смене масла на свежее. Предварительно перед сменой масла применил долговременную промывку: liquimoly.ru/item/1990.html и проехал на ней 105км. Дабы применять присадку на чистый двигатель со всеми его зазорами и микротрещинами.
Вопреки всем моим ранним убеждениям использования жидкого (0W40) масла в этом двигателе я таки пришел к выводу, что нужно использовать 10W40 всесезонно чтобы не менять на минералку15w40 (кстати рекомендованную для этого двигателя производителем). Двигатели эти разработки 80х годов, зазоры в них соответствующие тому времени, а уж китайское производство сами знаете, дает о себе знать, хоть и производятся эти двигатели официально под цифроназванием 491QE. Масло с 2014 года использую Лукойл Люкс 10W40, теперь перешел на 10W40 Лукойл Genesis www.7verst.ru/article/201…esis_advanced_10w_40.html
Теперь о главном: двигатель промыт, масло слито, залито новое совместно с Old Chap.
Было: при холодном старте после минуты работы двигателя появлялся звук как будто распредвал гремит в своих втулках… Эффект проходил после того как поездишь. Напомню, двигатель капиталился на пробеге 105ткм, сейчас пробег за 300ткм. Эффект этот не давал покоя ибо быть такого не должно, я проверил и поменял всё что можно было, но тщетно. Звук усиливался с применением масла пожиже, становился тише с применением масла погуще, соответственно думаем о тех самых зазорах.
Стало: после применения Old Chap. Прошу не пинать! Это не реклама, повторюсь, не реклама!
1. Эффект гремящего двигателя исчез.
2. Звук работы двигателя стал таким как после кап ремонта (тихий, ровный).
3. Двигатель стал тяговитее, опять же как после кап ремонта. Езжу каждый день в течении пяти лет и двигатель этот знаю очень хорошо, поэтому поведение его замечаю сразу. Это я к тому, что в данном случае нет эффекта Плацебо.
4. Холодный запуск в минус с маслом 10W40. По сравнению с аналогичным запуском с маслом такой вязкости без Old Chap. Теперь запуск проходит как при обычном летнем запуске. Это факт.
Думайте что хотите, пишите что хотите (предметный разговор приветствуется), этой мой опыт. С железками дружу, двигатели перебирал, даже диплом автослесаря имеется, занимаюсь этим для души а не ради денег и поэтому отношение к технике не как к рутине.
Источник: www.drive2.ru