-
Notifications
You must be signed in to change notification settings - Fork 108
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Как сделать так, чтобы Fenom не ломал сайт на MODX? #308
Comments
@sergx |
Больше контекста в обсуждении здесь https://modx.pro/help/19203 |
Из темы на сайте я понял, что есть две проблемы:
В первом случае точно стоит убрать весь контент сайта в Во втором - стоит контролировать тот код, который добавляется в шаблон и сделать инструкцию для контент-редакторов или тех людей, которые пользуются такой возможностью. Тут так же никто не запретит вставить валидный тег, который будет ронять производительность сайта например. Для меня, как человека далёкого от MODX (бэкграунд bitrix и dle и к обоим системам я прикручивал fenom) в целом понятна проблема, я бы тоже очень хотел защитить сайт от поломок со стороны контент-редакторов и "программистов-менеджеров", но как для владельца сайта - я бы сильно надавал по рукам тем контент-редакторам, которые не понимают с какой системой работают и сразу бы выдал нужные инструкции, а ещё лучше записал бы демо как можно и как не стоит делать :)) Ну и в коментах был предложен код, который вполне можно попробовать оформить в виде PR и улучшить шаблонизатор, @bzick насколько я знаю, всегда рад улучшениям. Если сделать настраиваемый (на свой страх и риск) уровень обработки ошибок, вероятно это поможет кому-то жить спокойно. P.S. JS из тела выносить нужно и это можно сделать в 99,9999% случаев. Есть куча возможностей. |
В коментах я костыль предложил :-(. Вообще по хорошему, чтоб решить эту проблему, надо бы в феноме сделать опцию, при включении которой, феном, вместо выбрасывания исключения, писал ошибку в лог. И можно было использовать феном так $content = $tpl->fetch($properties); if($tpl->getError()){ |
В MODX в теле активно используется JSON и вынести его из тела нельзя. |
@touol ну тогда однозначно не стоит обрабатывать контент шаблонизатором. С этим есть сложности? |
@pafnuty У меня лично с контентом особых проблем не возникало. А вот иногда нужно включить fenom на сайте, который на половину написан другими программистами, и сразу возникают проблемы с JSON и JS. На феноме многие вещи в MODX писать удобнее, чем на его стандартном синтаксисе. То есть, мне удобнее включить феном. А вот синтаксис популярных сниппетов MODX использует JSON. И сайт вылетает. |
@Pathologic не вводите в заблуждение. Это не причем. Не корректный тег и феном в любом случае пустую страницу отдаст. Он так устроен.
|
@touol Тег ignore для того и предназначен, чтобы обозначить места, которые не должен обрабатывать шаблонизатор, тогда и ошибок никаких не будет. В общем случае, у вас эта проблема будет с любым шаблонизатором, если использовать их так, как сейчас используется феном в рево. Вообще, не смущает, что с этой проблемой приходят только из рево? Что только там в документации написано пробелы после скобок ставить? 😃 |
Не смущает. Для других вылет сайта при ошибке в написании тега - это типа се ля ви. Привыкли и о другом не думают. А в MODX, при ошибке в его тегах, тег просто не срабатывает и все. И хочется чтоб при использовании феном было так же. А в Modx с феном получаем пустую страницу и не совсем информативное сообщение в логах Для Modx много удобней чтоб ошибочные теги выводились как есть. Я 6 лет назад сделал сайт на Modx без феном. Тогда его для MODX не было. Сейчас уже к феном привык и хотел бы его использовать на этом сайте. Но стопудово это его сломает :-(. Там куча и JSON и JS. А если бы феном для Modx выводил ошибочные теги как есть, то я бы сразу там феном и включил :-). |
@touol по диагонали глянул pdoTools https://github.com/bezumkin/pdoTools/blob/master/core/components/pdotools/model/pdotools/_fenom.php |
https://github.com/bezumkin/pdoTools/blob/master/core/components/pdotools/model/pdotools/pdotools.class.php#L988 вот тут ещё обработка ошибок. |
@touol Между парсером MODX и феномом существует принципиальная разница: первый ищет в шаблоне теги и заменяет их текстом в момент вывода; второй сначала преобразовывает шаблон в php-код, который затем и выполняет вывод. Соответственно если игнорировать ошибки компиляции, то получим на выходе некорректный php-код. Другими словами у вас феном или будет работать или не будет, а так, что местами работает, местами не работает - не получится. |
В, принципе, да. Проблемы специфичные для MODX и решать их, по идее, нужно в нем. Я с феном на других CMS не работал. Не знаю пригодиться ли замена исключений логом в них. В чистом феном вроде не пригодиться. |
https://github.com/bezumkin/pdoTools/pull/267/files - вот с этой правкой феном будет работать корректно при правильном подходе. |
@Pathologic Однако вот получилось :-) |
@touol Это мало чем отличается от рекомендации пробелы после скобок расставлять. |
@Pathologic фишка в том что не надо везде лазить и пробелы ставить :-). И ignore тоже не надо :-) |
@pafnuty Я что-то не особо разбираюсь в публичных приватных методов класса. https://github.com/touol/pdoTools/blob/extends-Template/core/components/pdotools/model/fenom/TemplateX.php Здесь заменил функцию, но нарвался на
То есть, в классе Template полно приватных методов и мне чтоб заменить 1 функцию надо его полностью скопировать? :-( |
Это, конечно, сильные ограничения разраба, но можно вызывать приватные методы через Reflection.. Например, вот так:
Это чертовский костыль, но рабочий. |
Главная проблема в реализации механизма парсинга. У MODX он отличается от фреймворков кардинально. Поэтому проблемы в MODX будут с любым шаблонизатором. |
@touol Я бы на это не рассчитывал. Если здесь ещё есть крошечная вероятность, то про pdoTools забудь. |
По тем или иным причинам может так быть, что парсится код, не предназначенный для Fenom, но содержащий
{
. Было бы очень здорово, если бы вместо ошибки, роняющей страницу, работал бы механизм типаignore
, и этот блок не обрабатывался, а выводился бы "как есть". Есть ли в планах внедрить такой механизм? Или может быть уже сейчас есть какая-то настройка типа "soft-mode", позволяющая переключить парсер в щадящий режим?В частности меня волнует реализация в MODX.
The text was updated successfully, but these errors were encountered: