Тонкости и трюки

Собственная маршрутизация в MODX

Есть очень частый вопрос «а как вывести то-то по такой-то ссылке?». И речь здесь не о заморозке uri, а о собственном маршруте нахождения страницы по указанному адресу, типа такого. То есть, речь идёт о маршрутизации, или, в народе — роутинге.

MODX отлично работает с дружественными url и представляет кучу настроек для их функционирования, а там, где настроек не хватает, он даёт нам замечательный инструмент для описания собственной логики — системные плагины по событию OnPageNotFound.

Как следует из названия, событие это возникает, когда MODX не смог найти страницу по запрошенному адресу, и в этот момент мы можем перехватить запрос и вывести что-то своё. Если же мы ничего не перехватываем, то выводится 404 not found.

Читать дальше

Уникальное поле профиля пользователя

Добрый день,
плагин, позволяет сделать уникальным любое поле в профиле пользователя, не прибегая к каким-либо изменениям ядра.Только системное событие OnBeforeUserFormSave. Работает соответственно так же и в бекенде.

В примере стоит имя пользователя, пример рассчитан на работу с Hybrid Auth — т.е даже если будет совпадение по имени, профиль автоматически создастся при первом входе, но при сохранении возникнет ошибка.

Читать дальше
  • 26 февраля 2014, 16:52
  • Clean
  • 1475
  • 2

Sendex - отправка рассылки при публикации ресурса

Небольшой плагин для Sendex — отправка рассылки при публикации ресурса.

Создаем новый плагин, вставляем код, ставим галочку напротив события OnDocPublished, меняем id-шники в начале кода на свои и радуемся.

Читать дальше
  • 13 февраля 2014, 14:00
  • AK
  • 2606
  • 8

Модификации товара. Учет остатков. Галерея.

У меня даже не вопрос, а предложение обсудить возможный вариант реализации работы с товарами, которые имеют несколько цветов и размеров (или какие либо другие параметры). Кроме того хочу озвучить мысль о том как производить учет остатков для каждой модификации товара. так же актуален вопрос о назначении отдельной галереи для каждого цвета и взаимодействие параметров между собой.

Прошу посмотреть видео, пример того что у меня получилось.
Поскольку используются платные компоненты, не получить залить CMS на тестовый хостинг, поэтому сделал захват видео с экрана.

Читать дальше

Переключение контекстов мультиязычного сайта

Написал 2 инструкции для простого переключения контекстов в классической ситуации нескольких языковых версий.

Директории

Плагин для ситуации, когда домен один, а языковые версии отличаются префиксом в адресе: mysite.com/ru/page.html и mysite.com/en/page.html.

То есть, условия такие:
  • Все контексты на одном домене, и у них отличается base_url
  • Используются friendly urls
  • base_url может не совпадать с именем контекста
Идея заключается в выборке всех контекстов и сравнения их базового адреса с запросом. Создавать директории и копировать index.php не нужно.

Читать дальше

Очистка старых сессий в MODX

Есть давнишний вопрос про большую таблицу modx_session, лично у меня она занимает 1.1 гигабайт и содержит около 500 000 записей. С одной стороны — не напрягает, а с другой непонятно, почему она понемногу растёт?

Таблица состоит из 3х колонок: идентификатор, время изменения и собственно данные сессии. У меня самая старая сессия от 30 октября 2013 года, то есть менялась она 3 месяца назад.

В настройках же установлена session_gc_maxlifetime = 604800, то есть старые сессии должны удаляться через 7 дней. По умолчанию, все сессии хранятся в БД, значит настройки хостинга и стандартный сборщик мусора тут не помогут — это должен делать сам MODX. Поправка — см. обновление в конце заметки.

Читать дальше

Динамический title страницы - радуем поисковики

Недавно заметил, что в webmaster.yandex.ru у меня очень много одинаковых заголовков страниц. И если на SEO как таковое мне откровенно начхать, то некрасивый вывод сайта в результатах поиска не радует.

Решил немного поэксперементировать в этом направлении, в результате чего получился довольно простой сниппет.

Что умеет:
  • Если есть longtitle — он используется вместо pagetitle (можно указать другое поле)
  • Затем добавляются родители страницы, используя pdoCrumbs
  • Если на странице есть пагинация — добавляет «стр. n из nn»
  • Результаты работы кэшируются, с учетом параметров url
Дмуаю, вы сможете еще самостоятельно добавить чего-нибудь в этот сниппет.

Читать дальше