[pdoTools] 2.10.1 - исправление кэширования скриптов и стилей
Давненько я не писал про обновления pdoTools, ведь там не происходило ничего примечательного — обычная работа над некритичными ошибками и улучшения функционала.
Но сегодняшняя версия стоит отдельного объявления, ведь в ней наконец-то исправлена работа кэширования скриптов и стилей! За отличное расследование и исправление благодарим Сергея Шлокова, а я немного расскажу, как эта ошибка вообще появилась.
Дело в том, что изначально в ранних версиях pdoTools вызывать сниппеты можно было только одним методом — $_modx->runSnippet() и он напрямую вызывал метод modX::runSnippet().
Вызовы Fenom работают уже после того, как MODX парсит кэшированные тэги, поэтому все скрипты и стили, зарегистрированные через Fenom, не попадали в кэш ресурса. Чтобы исправить это, я запихивал в этот кэш вручную всё что было, после каждого запуска Fenom.
Это было крайне неудачным решением, но другого на тот момент я придумать не смог. Так что, с добавлением еще пары костылей оно более менее работало.
Но дело в том, что со временем запуск сниппетов через Fenom был переписан, и все вызовы давно шли через метод pdoTools::runSnippet(), что позволяло, в принципе, контролировать регистрацию скриптов и стилей кэшированных сниппетов — да никто об этом не подумал, кроме Сергея.
Так что в новой версии убраны все кривые костыли, а обработка скриптов и стилей кэшированных сниппетов, запускающихся через Fenom любым способом, происходит в одном его методе. И проблем с кэшированием больше нет.
Еще некоторые изменения:

— Улучшено регулярное выражение для определения синтаксиса Fenom. Теперь ситуаций, когда в чанке один просто тег и парсер не считает его достойным обработки, должно стать гораздо меньше. А ложных срабатываний, надеюсь, не прибавится.
— Пока проверял работу кэширования скриптов и стилей, заметил баг в pdoPage. Если ему указать &cache=`1`, то он перестаёт регистрировать канонические url со второй загрузки. Исправлено.
— Сами канонические url теперь всегда прописываются полным адресом вместе с доменом, независимо от настроек, как то советует Google.
— А pdoMenu теперь должен уметь использовать &conditionalTpls для чанка по умолчанию. Не знаю, насколько это полезно при наличии Fenom, но просили добавить.
— Еще добавили новую системную настройку pdotools_fenom_save_on_errors, которая сохраняет шаблоны при ошибках компиляции в core/cache/pdotools/error/, чтобы вам удобнее было их дебажить.
Остальные изменения можно посмотреть на GitHub.
Новая версия уже в репозиториях, можно обновляться!
Но сегодняшняя версия стоит отдельного объявления, ведь в ней наконец-то исправлена работа кэширования скриптов и стилей! За отличное расследование и исправление благодарим Сергея Шлокова, а я немного расскажу, как эта ошибка вообще появилась.
Дело в том, что изначально в ранних версиях pdoTools вызывать сниппеты можно было только одним методом — $_modx->runSnippet() и он напрямую вызывал метод modX::runSnippet().
Вызовы Fenom работают уже после того, как MODX парсит кэшированные тэги, поэтому все скрипты и стили, зарегистрированные через Fenom, не попадали в кэш ресурса. Чтобы исправить это, я запихивал в этот кэш вручную всё что было, после каждого запуска Fenom.
Это было крайне неудачным решением, но другого на тот момент я придумать не смог. Так что, с добавлением еще пары костылей оно более менее работало.
Но дело в том, что со временем запуск сниппетов через Fenom был переписан, и все вызовы давно шли через метод pdoTools::runSnippet(), что позволяло, в принципе, контролировать регистрацию скриптов и стилей кэшированных сниппетов — да никто об этом не подумал, кроме Сергея.
Так что в новой версии убраны все кривые костыли, а обработка скриптов и стилей кэшированных сниппетов, запускающихся через Fenom любым способом, происходит в одном его методе. И проблем с кэшированием больше нет.
Другие изменения
Еще некоторые изменения:

— Улучшено регулярное выражение для определения синтаксиса Fenom. Теперь ситуаций, когда в чанке один просто тег и парсер не считает его достойным обработки, должно стать гораздо меньше. А ложных срабатываний, надеюсь, не прибавится.
— Пока проверял работу кэширования скриптов и стилей, заметил баг в pdoPage. Если ему указать &cache=`1`, то он перестаёт регистрировать канонические url со второй загрузки. Исправлено.
— Сами канонические url теперь всегда прописываются полным адресом вместе с доменом, независимо от настроек, как то советует Google.
— А pdoMenu теперь должен уметь использовать &conditionalTpls для чанка по умолчанию. Не знаю, насколько это полезно при наличии Fenom, но просили добавить.
— Еще добавили новую системную настройку pdotools_fenom_save_on_errors, которая сохраняет шаблоны при ошибках компиляции в core/cache/pdotools/error/, чтобы вам удобнее было их дебажить.
Остальные изменения можно посмотреть на GitHub.
Новая версия уже в репозиториях, можно обновляться!
Комментарии: 79
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
здесь подробнее описал modx.pro/help/13592/
Установил pdoTools.
Теперь выходит ошибка на сайте — HTTP ERROR 500.
В логах сервера показывает ошибку — Версия PHP — 5.4.16
А на этот сайт обновление пока не ставил? Барахлит.
Что именно барахлит?
Похоже, что скрипты в кэше остаются. Возникает ошибка, что TicketsConfig.editor не определен.
Возможно, это уже какой-то другой глюк именно на modx.pro
и получаем добавление скриптов и стилей в modX::resource->_loadedjscripts с последующим сохранением их в кэш.
перед
это никакого влияния не оказывает. Как можно принудительно привести канонический url к нижнему регистру?
И хотя теперь, после обновления pdoTools дублей быть не должно, в качестве превентивной меры хочу сделать принудительное приведение url к нижнему регистру, но не получается. Вот я и спрашиваю совета, как такое лучше сделать?
Визуально причем вроде как все работает. Как выяснить на какое именно место ругается?
Кеш чистил…
Стали обрабатываться с изменением Вопрос — а нафига они вообще обабатываются? причем в админке.
причем как выше Володя писал, это pdoTools выдергивает из источника файлов. Если бы он не трогал источник файлов, то все бы было нормально
Попробуй ради интереса переписать это на Fenom
вдруг сработает?
Предполагается что все настройки медиасорс должны быть корректны для fenom.
И если это не так — идти их исправлять. Не всегда это вариант.
Как вариант решения этого можно ввести настройку ограничивающую обработку контекста в github.com/bezumkin/pdoTools/blob/master/core/components/pdotools/model/pdotools/pdoparser.class.php#L43
если такой вариант приемлим — я могу сделать pr.
Спасибо!
И хозяин сайта включает использование Fenom везде, так что не вижу проблемы использовать его и в параметрах источника файлов в этом случае.
Ну а если кто специально хочет использовать именно Fenom в настройках источника — им как быть?
В общем, посмотрим количество отзывов об этой проблеме.
то есть в данном случае речь идет именно о настройке что отключала бы fenom в админке.
Если хоть один сниппет MIGX грузит этот источник и делает ему initialize() — будут ровно те же записи в логах, и всё равно придётся что-то менять: или регулярку синтаксиса, или настройки источника.
Я просто с MIGX не знаком, поясните, пожалуйста.
согласен.
я сам им не пользуюсь.
Я вообще конкретно MIGX в данном случае не касаюсь. Есть конкретная ситуация касаемо обработки настроек в админке парсером fenom и я лишь сказал о том что неплохо ввести ограничение на это и все.
Что с этим делать решать тебе.
Пока, наверное, просто уберу из регулярки такие {теги}, потому что не могу придумать, где они используются в самом Fenom.
Спасибо!
Fenom перестал детектить случаи когда фигурные скобки использовались в input-ах в атрибуте pattern — например
а также в скриптах на странице, где встречаются конструкции с пустыми фигурными скобками:
И при этом остаётся возможность расширять Fenom своими тегами, хоть и приходится вызывать их если они без параметров с пробелом
А на счёт работы Fenom в админке, Володин вариант сделать настройку для тех кому это очень надо, по-моему неплохая идея.
Просто если привыкаешь к Fenom, то уже само собой напрашивается его использование везде и повсюду и, порой, даже забываешь о местах где он не должен работать.
Сегодня обновил пакет на более чем 10 сайтах, полёт нормальный. Будем наблюдать дальше.
по-моему проблема с источниками файлов такого не стоит вообще. Если человек включает феном на весь сайт, пофиксить пути в источнике должно быть его ответственностью, как ты и говорил
upd. кстати, ниже всплыл пример использования таких тегов в самом феноме — {ignore}{/ignore}. Крайне нужная штука порой.
1. Указать свою регулярку в системной настройке pdotools_fenom_syntax.
2. Добавить пробел после тега.
Так что с какой стороны посмотреть.
В фреймворках он работает без проблем. И если бы ты прочитал мою статью про тег ignore, ссылку на которую давали ниже, то ты бы понял, что Fenom не может работать нативно в MODX. Василий его более менее натянул, но специфика MODX ломает идеальную логику работы Fenom. И поэтому иногда возникают проблемы с выводом конструкции {тег}.
Если не понятно почему в фреймворках работает, а в MODX нет, могу объяснить поподробнее.
Видимо ты так и не нашел 5 минут, чтобы прочитать мою статью.
Как сейчас модно писать TL;DR — пример из неё, чтобы не читать. Версия pdoTools тут, как видишь, не причем.
Fenom выдаст ошибку компиляции.
Но иногда стала всплывать старая ошибка кеширования, правда крайне редко
1. На сайт добавлены в хед критические стили CSS (для оптимизации скорости)
2. Стоит добавить на сайт код гугл тег менеджер или аналитику и все ломается(
Вот что получается prntscr.com/h18wxu и prntscr.com/h18x4k, системные настройки prntscr.com/h18x9x
И так на нескольких сайтах, PDO последней версии
А он ругается на фигурные скобки. Если ignore не поможет, то просто поставьте в этих местах после открывающих { пробел
Там написано «Самый просто вариант — указать в шаблоне кэшируемый тег [[*content]]» — у меня в шаблоне так и есть, но теги всеравно вылазят prntscr.com/h1aenk
Всегда это делаю перед тем как включить Fenom на страницах.
Вот такая запись у меня не заработала:
Рабочая:
Вдруг кому еще пригодиться.
Вот такой вызов
отладка
из 12 ресурсов выводится только 10. Настройки публикации в всех в состоянии опубликовано, и показывать в меню.
В чем может быть дело?
По отладки вижу лимит 10 стоит, но я его не ставил
Дописал 'limit' => 0, но не помню чтобы по умолчанию раньше был лимит в 10
Чтобы в phpstorm не привязывать синтаксис fenom к файлам .tpl, а оставить их для smarty, как и было
Если же нет, то какой смысл? Оба шаблонизатора близки по синтаксису и со smarty хотя бы какая-то подсветка есть в IDE
Я лично не только предлагаю, но и сам использую исключительно подсветку от Smarty.
Всего одно подчеркивание. Попробуй ради интереса подсветить такой код тем древним плагином.
smarty — 3 ошибки.
Помимо extended он еще тильду не признает и выражения с вопросительным знаком, типа {if $a?} или {$a ?: $b}
Не спорю, сам плагин смарти гораздо лучше. Жаль что нормального под феном нет, постоянная краснота напрягает немного)
так что, смилостивишься добавить .fm? )
Слева Smarty, справа Fenom.
Второй, похоже, просто вообще не умеет детектить ошибки синтаксиса — вот их и нет. Что бы ты не писал — ему всё в порядке:
Я могу, конечно, добавить в pdoTools хоть какие расширения, но пусть хоть 5 человек об этом попросит. А то прям работа под заказ получается — никому не нужно, кроме тебя.