Как вы уже знаете, полтора месяца назад стартовал интересный эксперимент — обучающий курс по разработке компонентов для MODX Revolution.
Как таковых обучающих курсов, наверное, много, но здесь цель была не только чему-то научить, но и написать полезное дополнение.
Довольны должны быть все: читатели наконец получили ответы на многие вопросы, а сообщество — новый компонент для работы с рассылками (на этом поле пока не особо есть из чего выбирать).
И вот сейчас я готов показать, что у нас вышло.
В голове давно вертелась мысль, как бы точно отследить, что именно запускается на странице сайта и насколько тормозит? То есть, прям взять и разобрать все вызовы, по тегам и замерить время.
Пока был в отпуске — придумал общую логику, и как приехал — сразу написал. Итак, новый компонент для отладки работы парсера MODX Revolution — debugParser!
Он заменяет собой родной modParser, вызывает его методы и замеряет время на обработку каждого тега.
Обновил компонент Theme.Bootstrap по последнему слову сайтостроения MODX Revolution.
Просто установите его из репозитория, и вы получите готовый сайт с pdoTools, Bootstrap3 и MinifyX.
При установке создаются 2 новых шаблона и ресурса:
Bootstrap.main — вывод ресурсов сайта, с пагинацией
Bootstrap.inner — вывод контента страницы, по умолчанию там демонстрация Bootstrap
Все скрипты и стили склеиваются, минифицируются и подключаются при помощи MinifyX.
Доброго времени суток
Написал не так давно для себя пару кастомных классов для расширения MS2 и приема Qiwi платежей, и решил потренироваться в сборке пакетов и оформить это дело как положено в виде отдельного расширения.
И так, все вышло довольно просто, скачать готовый пакет можно из репозитория SImpleDream
Ну а под катом, распишу что и как работает.
Прошел почти год с последнего обновления MinifyX. Если кто не знает — это компонент для склейвания и минификации скриптов и стилей.
Он хорошо ускоряет загрузку страницы и позволяет немного обсфуцировать ваши исходники.
В новой версии я переписал все с чистого листа, при этом сохранил основную логику и параметры. А чтобы не беспокоиться за поддержку новых плюшек и исправление ошибок минификатора, вся основная работа переложена на библиотеку Munee.
Что нам это дает?
Улучшенные алгоритмы сжатия и склейки
Поддержка LESS, SCSS и CoffeScript
Более продвинутое кэширование исходных скриптов и стилей
Возможность использования Munee напрямую:
<link href="/assets/components/minifyx/munee.php?files=/css/libs/bootstrap.min.css,/css/site.css&minify=true" rel="stylesheet">
Возможность настроить веб-сервер согласно инструкции, чтобы все ваши скрипты и стили отдавались через Munee
Munee умеет даже уменьшать изображения, наподобие старого-доброго DirectResize. Эту возможность я не проверял, но можно немного почитать и попробовать самостоятельно.
В общем, я конкретно схитрил, используя Munee — вся грязная работа теперь на нём, а сам MinifyX только проверяет и подготавливает параметры для работы, да подключает готовые файлы на страницу.
Новая версия с исправлениями и парой приятных улучшения.
В принципе, код компонента уже довольно хорошо оптимизирован, и явных способов еще ускорить его, без потери функциональности, не видно — поэтому я взялся за кэш.
Сейчас его можно использовать в 2х сниппетах: pdoMenu и pdoPage:
[[!pdoPage?
&parents=`2`
&cache=`1`
&cacheTime=`3600`
]]
Важное отличие от getPage состоит в том, что кэширование всегда производится с учетом id посетителя. К примеру, у меня в списке заметок выводится количество непрочитанных комментариев. Раньше такое кэшировать было нельзя, ибо тогда все видели одни и те же цифры, а теперь — можно.
Гости видят одни результаты, авторизованные пользователи — другие. Лично я закэшировал у себя всё списки тикетов на 120 секунд.
Новая версия MS2 исправляет ошибки и добавляет новые возможности.
Исправлена ошибка с переименованием первой картинки в галерее, когда у товара не обновлялись thumb и image.
Добавлена дополнительная проверка параметра ms2_product_thumbnail_size, который указывает размер картинки для поля thumb товара.
Теперь, если указан размер, несуществующий в источнике файлов, будет использован первый доступный.
Наконец-то дошли руки до поддержки в галереи всех типов файлов, а не только изображений. Нужно указать возможные расширения в настройке источника в параметре allowedFileTypes.
Работаю над одним интересным сайтом, в котором много разных форм: и для вакансий, и для заказов, и для обратной связи.
У MODX Revolution есть хороший компонент для форм — FormIt. Меня он всем устраивает, за исключением одного — отсутствия работы с ajax.
Проблема старая, решалась сотней разных способов на сотне разных сайтах, и просто не захотелось велосипедить в сто первый.
Следуя известной мудрости "лучше день потерять потом за пять минут долететь", я взял и написал новый бесплатный компонент AjaxForm.
Дошли руки до обновления Tickets, надеюсь вам понравится.
Исправлена ошибка, когда при смене шаблона тикета, он снимался с публикации.
Исправлена ошибка, когда при создании тикета в админке показывался пустой шаблон.
Обновил компонент управления баннерами. Изменения пока эволюционные — просто подтянул к нынешнему минимальному уровню.
Самое главное — это новый сниппет, который работает через pdoTools. Помимо скорости, это дает гораздо большие возможности по выборке и оформлению. Просто загляните в его параметры:
Новая версия pdoTools знаменует собой окончание активной разработки компонента.
Я написал все, что хотел: удобную библиотеку и 8 сниппетов для самых распространенных задач.
pdoResources — замена getResources с широчайшими возможностями. Можно и присоединять таблицы, и выбирать только нужные поля, и гибко указывать разные параметры выборки и все это на очень высоких скоростях.
pdoPage — замена getPage, которая отлично строит пагинацию, запрещает указывать нехорошие параметры в запросах и быстрее работает.
pdoMenu — замена Wayfinder. Однозначно быстрее при первом запуске, на повторных разница уже не столь заметна. Зато можно более гибко указывать параметры выбоки + быстрый рендер чанков.
pdoUsers — Сниппет вывода пользователей сайта, с различными условиями, включая фильтрацию по группам и ролям.
pdoSitemap — Генерация карты сайта, в разы быстрее GoogleSiteMap.
pdoCrumbs — Вывод навигационных хлебных крошек, замена Breadcrumb.
pdoNeighbors — Вывод соседних документов: предыдущий, следующий и наверх.
pdoField — Вывод поля указанного ресурса или его родителя на разных уровнях. Замена getResourceField и UltimateParent.
Продолжаю разрабатывать версию 1.8.0, сегодня у нас в студии release candidate: JSON поля, автозагрузка классов и сниппет pdoPage.
Как известно, в таблицах MODX встречаются текстовые поля, в которых движок хранит JSON строки, представляющие массивы.
Например, это поле properties у ресурса и extended у профиля пользователя. pdoFetch выбирает такие поля «как есть» и если вы укажете в чанке [[+properties]], то увидите что-то типа:
{"key":"value"}
С новой версии эти поля автоматически разбираются, и getChunk выставляет плейсхолдеры [[+имяполя.ключмассива]]
То есть, указав [[+extended.key]] вы получите value. Это работает везде, и в pdoResources и в pdoUsers.
Идея честно стырена у YJ Tso, который написал аналог pdoUsers, сам того не подозревая.