Modx: лучшая cms, которой вы никогда не пользовались

Содержание:

Чему Вы научитесь (содержание курса)

Основы (без видео)

  • MODX что это такое
  • Идеология и основные определения MODX Revolution
  • Где можно получить помощь с MODX
  • Структура каталогов MODX
  • Форматирование дат и времени в MODX
  • Модификаторы MODX и фильтры phx

Практика (с видео)

  • Установка MODX Revolution
  • MODX админка — обзор, как зайти
  • Настройка MODX после установки
  • Дополнения (плагины, пакеты) для MODX Revolution
  • MODX безопасность: убираем ошибку modx каталог ядра в открытом доступе
  • Перенос HTML шаблона в MODX Revo
  • Основной синтаксис MODX Revo (без видео)
  • MODX fenom — документация и примеры (без видео)
  • Создание дополнительного источника файлов в MODX Revo
  • MODX чанки (chunks)
  • MODX сниппеты (snippet)
  • Modx TV (дополнительные поля)
  • MODX настройка ЧПУ
  • MODX htaccess
  • robots.txt для MODX Revo
  • PdoSitemap документация | создание sitemap.xml в MODX Revo
  • Modx ClientConfig — пользовательские системные настройки
  • MODX TinyMCE RTE настройка визуального редактора
  • SEO оптимизация MODX
  • MODX SEO Pro — документация
  • MODX https настройка
  • Создание дополнительных MODX шаблонов
  • Создание страниц ошибок 404, 401, 503 в MODX
  • MODX pdoCrumbs — создание хлебных крошек
  • MODX FormIt — документация по созданию форм обратной связи
  • MODX ajaxform — документация
  • Добавление страниц и разделов
  • Создание слайдеров при помощи MIGX, BanerY и pdoResources
  • Создание HTML карты сайта в MODX — для людей
  • Как в MODX Revo избавиться от спама с FormIt, AjaxForm
  • pdoMenu — документация и примеры создания меню в MODX
  • phpThumb — документация
  • pdoResources — документация и примеры вывода ресурсов
  • MODX — продвинутое портфолио с фильтром по категориям
  • Создание блога в MODX при помощи Tickets
  • Вывод ресурсов при помощи pdoPage с разбивкой на страницы
  • SimpleSearch — поиск по сайту
  • Реализация поиска по сайту при PdoTools
  • Раздел управления виджетами
  • Вывод соседних документов в MODX Revo
  • MODX теги — тегирование для ресурсов, при помощи MIGX.
  • MODX — вывод списка похожих записей (автоматическая перелинковка)
  • MODX pdoField — получение и вывод полей родителя (ей)
  • MODX MinifyX — ускоряем сайт и уменьшаем нагрузки на сервер
  • Создание RSS ленты на MODX Revo
  • Настройка прав доступа
  • Обновление до актуальной версии

Дополнительная документация по дополнениям

  • Ace — подсветка кода в MODX и не только
  • MIGX | MODX Revo
  • MODX Tickets настройки, документация
  • Документация по пакету MODX Revo — MetaX
  • MODX Collections

Дополнительно (без видео)

  • MODX action_err_ns — исправляем ошибку
  • MODX сниппет для автоматической генерации favicon
  • Перенос MODX Revo на хостинг (локальный веб-сервер) или с домена на домен
  • MODX cборка для быстрого старта
  • MODX SEO-strict — Заменяем base href на link rel canonical
  • Якорные ссылки в MODX Revolution
  • Авторизация через соц сети при помощи HybridAuth
  • Создание галереи (Bootstrap 3+Gallery+fancyBox+Mosaic Flow)
  • Изменение длины (varchar) у поля из minishop2
  • Дополнительные опции minishop2 — создание, кастомизация вывода и вывод единиц измерения
  • minishop2 — всплывающее окно после нажатия на кнопку
  • easyComm — создание отзывов для товаров в MODX Revo

Содержание курса будет изменятся по мере появления новых уроков.

Настройка MODX
Установка MODX Revolution >

Общее представление

Сниппеты — это метод, с помощью которого MODX позволяет вам запускать динамический код PHP на любой из ваших страниц. Они являются основным средством разработки для большинства разработчиков.

Что такое сниппет?

Согласно одному определению, «сниппет» — это «короткий повторяющийся сниппет компьютерного исходного кода». Некоторым людям трудно отличить это от «чанка», поэтому полезная мнемоника может выглядеть так: сниппет это как «PHP», например, sni-P(h)P-et.

Как они работают?

Большинство сниппетов кэшируются, то есть они хранятся как временная динамическая функция в кэше. Если они помечены как некэшированные, они не анализируются, пока синтаксический анализатор не выполнит все остальное кэшированное содержимое.

Затем, как только они будут кэшированы, сниппеты затем обрабатываются парсером MODX. У них есть доступ к объекту $modx.

Простой пример

Вот базовый пример того, как может выглядеть код сниппета:

Если вы назвали этот сниппет «helloWorld», вы можете вызвать его, используя `helloWorld` в ваших документах, шаблонах или чанках (см. Синтаксис тегов). Вы также можете вызвать сниппет из другого сниппета, используя метод API runSnippet.

Обратите внимание, что мы возвращали код, а не выводили его содержимое. Никогда не используйте echo в сниппете — всегда возвращайте вывод

Передача значений в сниппет

Значения передаются в ваш сниппет с использованием модифицированной нотации типа веб-формы CGI, которая следует за именем сниппета. Если ваш сниппет был назван «mySnippet», вы можете вызвать его, используя что-то вроде этого:

И код вашего сниппета может выглядеть примерно так:

Обратите внимание, что имена переменных в вызывающем бите должны точно соответствовать именам переменных в сниппете (регистр имеет значение, т.е. ‘input’, а не ‘INPUT’ или ‘Input’

Во-вторых, не забывайте «&» перед потенциальными именами переменных

И, наконец, что не менее важно, обратите внимание, что это обратные кавычки, а не одинарные кавычки!

Чтение значений в ваших сниппетах

В общем, вы можете прочитать ваши значения, сославшись на переданные аргументы: &someParameter в вызове преобразуется в $someParameter в коде PHP.

Вы также можете прочитать все параметры, используя встроенный массив $scriptProperties. Это полезно, если ваш сниппет принимает переменные параметры, т.е. он обрабатывает тот же вариант использования, что и PHP-функция func_get_args().

Например, если вы вызываете свой сниппет следующим образом:

Тогда массив $scriptProperties будет содержать следующее:

Для новичков и тех, кто разбирается

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

Каждая рубрика по-своему интересна, ведь в онлайн магазине стараются установить долгосрочные отношения не только с поставщиками, но и с заказчиками. Убедитесь, что весь товар на виртуальной витрине рассортирован очень умело:

  • Новые поступления или распродажи;

Уцененные товары или остатки;
Хиты продаж или востребованные, популярные ткани.

Но и внутри каждой рубрики, есть собственные, еще более подробные, ниши. Нужен интерлок? Выбирайте среди набивных или гладкокрашеных его разновидностей. Рибана – с начесом, с лайкрой, трансферная. Махра, футер двух- трехниточный, велюр, вискоза, пике, еще десятки материалов, с их вариациями.

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

Модекс помогает узнать Екатеринбург с профессиональной стороны, отсылая заказы не только по России, но даже в ближнее зарубежье. Сегодня заказчики компании есть в Белоруссии, Казахстане, но это, по мнению организаторов онлайн магазина, не предел.

Подключение к базе данных

В этом месте вы заполняете необходимую информацию о вашей базе данных.

Добавляете имя вашей базы данных и URL где находится ваша база. Для основной массы пользователей это localhost.

В свою очередь, у вас есть возможность изменить префикс таблиц. Данный префикс таблиц, использует MODX для собственных переменных. Это понадобится в случае если вы желаете в одной базе данных сохранять информацию многих сайтов на MODx.

Когда завершите жмите на ссылочку Проверить соединение с сервером баз данных. Если появятся какие нибудь ошибки, вы заметите их ниже. В случае если возникнут ошибки, удостоверьтесь, что вы верно ввели имя пользователя базы данных и пароль.

В свою очередь в случае если пользователь определенный вами не располагает правами создавать базу данных, то сделайте ее вручную.

Microsoft SQL Server Notes

Поддержка Microsoft SQL Server предусмотрена с версии MODx Revolution 2.1 В зависимости от конфигурации сети вашего SQL сервера, нужно определить следующие опции: Named pipe: (local)/SQLEXPRESS Tcp/ip: 127.0.0.1,2301 (IP, port)

Вследствие этого PDO драйвер вашего сервера будет работать и не будет ошибки когда нажмете Проверить соединение с сервером баз данных. В случае если это все таки приключалось это говорит о том, что у вас имеются осложнения соединения с базой данных, аутентификацией или же выбором базы данных. Когда исправите все ошибки жмите Назад, для того чтобы возвратиться на предшествующую страничку и затем Далее, для того, что бы вернуться на страничку опций подключения к базе данных.

Поля ресурса

Все ресурсы имеют следующие предопределенные поля:

1. Базовые поля ресурса MODX.

Имя Описание
id Идентификатор (порядковый номер) ресурса.
template Ссылка на шаблон, который будет использоваться для отображения этого ресурса.
published Включает публикацию ресурса во front-end.
pagetitle Заголовок (название) ресурса.
longtitle Расширенный заголовок ресурса.
description Описание ресурса.
introtext Краткая информация о содержимом ресурса. Может использоваться для его представления на главной странице или в некотором разделе.
alias URL-псевдоним по которому можно обратиться к этому ресурсу. Предназначен для сайтов, которые используют дружественные URL. Например, ресурс с псевдонимом «home» и типом контента «html» будет иметь URL «home.html» (если конечно же он не контейнер).
parent идентификатор (id) родительского ресурса.
link_attributes Предназначен для указания атрибутов, которые необходимо добавить к ссылке. Обычно используется сниппетом, генерирующим меню.
menutitle Заголовок, который может использоваться сниппетами для представления ресурса в меню.
menuindex Порядковый номер индекса ресурса в меню. Более высокие значения индекса указывают на то, что ссылку на ресурс необходимо расположить ниже.
hidemenu Убирает ресурс из выборки при формировании меню. Обычно используется сниппетами, генерирующими меню.
content Контент ресурса.

2. Поля, осуществляющие настройку ресурса.

Имя Описание
isfolder Указывает, является ли ресурс «Контейнером». Если это так, то ресурс будет вместо суффикса иметь слеш (/). Это касается только тех сайтов, которые используют дружественные URL.
searchable Определяет, необходимо ли ресурс включать в результаты поиска.
cacheable Определяет, необходимо ли ресурс кешировать.
createdby Содержит идентификатор (id) пользователя, который создал ресурс.
editedby Содержит идентификатор (id) пользователя, который последним редактировал этот ресурс.
deleted Определяет, отмечен ли ресурс на удаление или нет.
deletedby Содержит идентификатор (id) пользователя, который отметил ресурс на удаление.
publishedby Содержит идентификатор (id) пользователя, который опубликовал ресурс.
createdon Содержит дату создания ресурса пользователем.
publishedon Содержит дату публикации ресурса.
editedon Содержит дату последнего редактирования документа.
pub_date Содержит дату, начиная с которой ресурс будет опубликован.
unpub_date Содержит дату, начиная с которой ресурс будет снят с публикации.

Изменение размера слайда в PowerPoint

Создание модулей для MODX Evolution в 2017 для самых маленьких

Из песочницы

Что такое модули

В MODX EVO представлены следующие типы ресурсов шаблоны, чанки, сниппеты, плагины и модули. Если вы работаете в системе то точно знаете за что отвечают первые три, но возможно лично никогда не работали с последними. Плагины — это интегрированный в MODX код который позволяет изменять механики взаимодействия с админ-интерфейсом, с помощью плагинов вы можете изменить способ отображения данных для редактирования любых ресурсов и задать какие и на каких этапах взаимодействия стоит совершать. Проще говоря с помощью плагинов вы вешаете свои обработчики.
Но в этой статье я хочу рассказать немного о другом, о модулях. Эту статью я пишу по той причине того что в интернете очень мало информации на эту тему, в русском сегменте такой я вообще не нашел.
Если говорить конкретнее, то с помощью модулей вы можете создавать надстройки со своими интерфейсами, например для массового редактирования документов или для управления интернет магазином, которые будут удобны пользователю.

MODX-клуб в Москве

Итак, сразу о главном: объявляю об открытии MODX-клуба в Москве:-)
Базироваться будем в анти-кафе YoStudio. Заведение просто замечательное! У нас будет свой зал на 25 человек, большие столы (которые можно расставить как будет удобней), Wi-Fi. В общем все необходимое. На фотографии зал кажется голым, но это просто неудачная фотография. Там есть окна и шкаф с книгами и канцелярией, а так же стенд для презентаций.
Предполагаются мероприятия следующего формата:

  • Обучающие семинары для конечных пользователей (основы управления MODX-сайтами и т.п.)
  • Курсы повышения квалификации MODX-программистов
  • Просто приятные и полезные встречи, чтобы поболтать о любимой Системе.

Модификатор UserInfo

Прямой доступ к данным из таблицы modx_user_attributes в базе данных, с помощью модификаторов вывода вместо сниппетов, может быть достигнуто просто за счет использования модификатора UserInfo. Выберите нужный столбец из таблицы и укажите его в качестве свойства модификатора, например, так:

Поле профиля Пример
Внутренний ключ профиля
Логин
Полное имя
Роль
E-mail
Телефон
Мобильный телефон
Факс
Дата рождения
Пол
Страна
Область
Почтовый индекс
Фото
Комментарий
Пароль
Временный пароль
Последняя авторизация
Дата текущей авторизации
Количество авторизаций

 возвращает id вошедшего в систему пользователя. Конечно, вы можете заменить, его на  или другое поле ресурса или даже на плейсхолдер, который возвращает числовое представление id пользователя.

Обратите внимание, что профиль текущего пользователя уже доступен в MODX по умолчанию, так что вам не нужно использовать модификатор UserInfo для него:

  •  — Выведет идентификатор пользователя
  •  — Выведет логин пользователя
  •  — Полное имя пользователя
  •  — Дата рождения

Особое внимание обращаем на восклицательный знак ]. Он позволяет НЕ кэшировать содержимое вывода

Почему нужно не кешировать? Представим это так: на сайте 5 пользователей. Первый пользователь зашел на страницу с вызовом:

Добро пожаловать, ]!

По задумке на этой странице, выводится приветственное сообщение пользователю. Так вот, если результат будет кешироваться, то при первом входе на эту страницу — сохранится имя пользователя который только что зашел — и всем остальным будет показываться не их имя, а имя того пользователя который вошел на эту страницу первым. Чтобы этого избежать — просто не кэшируем этот тэг, с помощью восклицательного знака перед вызовом [[!+modx…

Что нового в MODX 2.7.1?

Версии Evolution и Revolution получают обновления отдельно. Апдейты для Evo создают участники пользовательского сообщества. Найти их можно на русскоязычном форуме движка. Обновления для Revo выпускают разработчики движка, которые сообщают о релизе в блоге на официальном сайте. 

Последняя версия MODX Revolution — 2.7.1 (14 февраля 2019 года). В этом апдейте много внимания уделено исправлению ошибок, обнаруженных в предыдущих редакциях. Если же говорить о крупных нововведениях, то последним было появление визуального редактора с интерфейсом drag-and-drop, который разработчики назвали Fred. Это произошло также в феврале 2019 года. 

Цель внедрения Fred — сделать создание сайтов более эффективным и увлекательным. Визуальный редактор MODX с точки зрения гибкости и мощности превосходит аналогичные решения на других CMS. Кроме встроенных инструментов кастомизации он предлагает поддержку любых HTML-фреймворков, включая Bootstrap и Foundation. Теперь макеты, в которых ранее приходилось настраивать десятки параметров, могут быть созданы с помощью визуальных средств, понятных на интуитивном уровне.

У макетов, используемых для создания страниц, и элементов интерфейса есть собственные настройки, которые позволяют, например, с помощью ползунка указать, какое количество статей должно отображаться на странице в блоге. Fred также поддерживает плагины для добавления новых возможностей кастомизации. В следующих релизах разработчики обещают сделать создание расширения для визуального редактора более простым, в том числе благодаря подробной документации. 

На Evolution таких больших изменений в функциональности нет, но апдейты тоже выходят достаточно часто. Ветка Evolution CMS 1.4.x получает исправление ошибок и критических проблем с безопасностью, а также доработку совместимости с Evolution CMS 2.x. Это новая версия системы, созданная пользователями на основе оригинального движка, с добавлением компонентов фреймворка Laravel.  

Laravel выбран для интеграции из-за обширной документации, активной поддержки и большого количества готовых пакетов, которые можно будет использовать на Evolution 2.0. При этом старые конструкции продолжат поддерживаться, однако не будут раскрывать весь потенциал новой системы. Ветка 2.x только начинает своё развитие и доступна в альфа-версии.

Связка MODx Revolution + LiveStreet. Часть 2 (Дубль два)

Прошлый мой топик закритиковали из-за отсутствия полностью задокументированного и оформленного решения, отправив меня все это дело переделывать, потому и переписываю топик с нуля, так как и решение с нуля все переделано.
Думал за часик все оформлю, а в итоге все переписал единым пакетом, полностью переосмыслив логику. Если так посмотреть, то с этим плагином MODX может работать не только с LiveStreet, а скорее всего много с чем, как бы выполняя роль шлюза (или nginx-а, чтобы понятней было).
Итак, вот готовый пакет для MODX: goo.gl/X6HCd (Extra залил на modx.com, но пока на модерации. Как только запустят, обновлю ссылку)
Что требуется для работы?
Отдельно MODX
Отдельно LiveStreet (можно в какой-нибудь внутренней папке в MODX (но не на одном уровне с livestreet.url_prefix, а то могут возникнуть сложности с подменой УРЛ-ов), можно за пределами MODX_DOCUMENT_ROOT (но лишь бы на одном сервере и доступ к файловой системе был)).
В общем ставим это все (или берем готовые сайты), устанавливаем на MODX данные пакет, правим (если надо) системные конфиги MODX пространства имен livestreet.
Это все просто.
Чуууточку сложнее вот это сделать:

Модификаторы условия

Модификатор Описание Пример
if,input if — задает дополнительное условиеinput — добавляет в тег обратываемые данные
[[+phx:input=`/assets/img/photo.gif`]]

— добавляем в тег phx входное значение, следующим модификатором, например, можно обработать изображение. Или

[[+phx:input=`/assets/img/photo.gif`:contains=`photo.gif`:then=`da`:else=`net`]]

проверить есть ли в пути определенная последовательность символов.

]`:ne=`2`:then=`da`:else=`net`]]

— если id-ресурса = 1 и не равно 2, выводим «da», или же «net»

or,and or — условие «ИЛИ» and — условие «И»
]`:is=`2`:then=`da`:else=`net`]]

— если id-ресурса = 1 или = 2, выводим «da», или же «net».

]`:ne=`2`:then=`da`:else=`net`]]

— если id-ресурса = 1 и не равно 2, выводим «da», или же «net»

isequalto, isequal, equalto, equals, is, eq Если тег равен модификатору, используется с «then» и «else.»
]

— если id-ресурса = 1, выводим «da», или же «net»

notequalto, notequals, isnt, isnot, neq, ne Если тег не равен модификатору, используется с «then» и «else».
]

— если id-ресурса не равно 1, выводим «da», или же «net»

greaterthanorequalto, equalorgreaterthen, ge, eg, isgte, gte Если тег больше или равен модификатору, используется с «then» и «else».
]

— если id-ресурса больше или равен 1, выводим «da», или же «net»

isgreaterthan, greaterthan, isgt, gt Если тег больше модификатора, используется с «then» и «else».
]

— если id-ресурса больше 1, выводим «da», или же «net»

equaltoorlessthan, lessthanorequalto, el, le, islte, lte Если тег меньше или равен модификатору, используется с «then» и «else».
]

— если id-ресурса меньше или равно 10, выводим «da», или же «net»

islowerthan, islessthan, lowerthan, lessthan, islt, lt Если тег меньше модификатора, используется с «then» и «else».
]

— если id-ресурса меньше 10, выводим «da», или же «net»

contains Если тег содержит модификатор, используется с «then» и «else».
]

— если в теге содержится фраза «Сэ́мюэл Кле́менс» выводим «Марк Твен»

containsnot Если тег не содержит модификатор, используется с «then» и «else».
]

— если в теге не содержится фраза «Сэ́мюэл Кле́менс» выводим «Кто-нибудь еще»

hide Если предыдущий модификатор возвращает положительное значение («then»), то не выводим обработанный тег.
]

— если id-ресурса = 10, ничего не выводим

show Если предыдущий модификатор возвращает положительное значение («then»), то выводим обработанный тег.
]

— если id-ресурса = 10, выводим.

then Условие, если тег соответствует модификатору, выводим сообщение, иначе ничего не выводим
]

— если id-ресурса = 10, выводим «ept».

else Условие, если тег не соответствует модификатору, выводим сообщение. Используется только в связке с «then»
]

— если id-ресурса = 10, выводим «ept» иначе «nooo».

select Установить свое значение, в зависимости от модификатора и вывода тега. Так же можно использовать «else», например если значение

]

— не подходит под шаблон select

]

— если тег

]

— выводит «0», значит выводим «ВЫКЛ», если тот же тег равен «1» выводим «ВКЛ», если «2» выводим «ХЗ», если тег не подходит нашей выборке, то выводим «Ошибка».

in Работает аналогично php in_array, если тег совпадет с одним из элементов модификатора (разделяются они запятыми), то выводим then, если не совпало else
]`:else=`пробел`]]

— если тег

]

(текущий шаблон) — равен «3» или «4», значит выводим

]

, если не равен, выводим else.

Кеширование

Любой тег можно выззвать некэшированным, вставив восклицательный знак сразу после открывающей двойной скобки:

, , , , и так далее.

Если у вас есть какая-то расширенная настройка, в которой параметр устанавливается для каждого запроса, но ваш ссылки не генерируются должным образом, помните, что любой тег можно вызвать некэшированным, включая тег ссылки или якоря:

Тем не менее, вам понадобится только тогда, когда устанавливается динамически, может отличаться для каждого запроса, и вы генерируете полные URL-адреса вместо относительных. Любое нормальное использование может быть кэшировано.

Порядок разбора

Если вы вызовете некэшированный сниппет, он будет выполнен после обработки всех кэшированных тегов.

Если у вас есть кешированные плейсхолдеры ниже этого, они будут оцениваться до того, как будет выполнен этот сниппет — то есть они получат последнее значение, которое было сохранено в кэше ранее этим сниппетом (или пустым, если еще не установлено).

Если вы хотите вызвать Сниппет без кэширования, который устанавливает плейсхолдер, вам необходимо убедиться, что плейсхолдеры также установлены в некешированные:

Возвращаемые значения

pdoTools умеет возвращать данные в разном виде, в зависимости от параметр . В основном это используют сами сниппеты для внутренних нужд, но вы можете указывать в pdoResources:

  • chunks — оформленные чанки, по умолчанию.
  • sql — подготовленный сырой SQL, полезно для отладки. Сам запрос не выполняется, только выводится на экран.
  • data — готовый массив данных. Из-за особенностей работы сниппетов MODX этот вариант имеет смысл использовать только при вызове pdoFetch::run() напрямую из своего сниппета, в противном случае вы получите только строку «Array».
  • ids — возвращает только идентификаторы документов, через запятую. Удобно для подстановки в качестве параметра другим сниппетам. Параметр использует именно этот тип.
  • json — возврат массива данных JSON строкой.
  • serialize — возврат массива данных сериализованной строкой. Иногда, по непонятным причинам, может вызвать нехватку памяти. Лучше использовать .

Тайминг

В MODX есть несколько тегов синхронизации:

  • — Время запроса — показывает, сколько времени MODX потратил на общение с базой данных
  • — Количество запросов — Показывает, сколько запросов к базе данных выполнено MODX
  • — Время разбора — показывает, сколько времени понадобилось MODX для разбора страницы
  • — Общее время — показывает общее время, затраченное на анализ / рендеринг страницы.
  • — Источник — показывает источник страницы, является ли база данных или кеш
  • — Использование памяти — Показывает общий объем памяти, занятый для анализа / рендеринга страницы.

Дополнительная Помощь

Поскольку синтаксис тегов проблематичен для многих новичков, существуют инструменты, которые помогут выделить проблемы. Проверьте плагином SyntaxChecker.

Деконструкция тега MODX

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

Тип Использование
Определяет открытие тега MODX.
Необязательный флаг без кэширования
Необязательный Определяет тип элемента. = Чанк, = Поле ресурса / переменная шаблона, = Плейсхолдер Смотрите выше для большего количества вариантов
Имя значения запрашиваемого элемента.
Определяет набор свойств для использования.
Определяет выходной фильтр или модификатор, который будет использоваться.Например:
Указывает MODX, что свойства сопровождают этот вызов.Required if properties present
Определяет свойство и значение, которое будет использоваться с вызовом. Каждый набор свойств разделен .Например:
Определяет закрытие тега MODX.

Взаимодействие с базой данных в сниппетах

Доступ к слою базы данных в MODX основан на объектно-реляционной модели (ORM), называемой xPDO для подключения к базе данных, поэтому, чаще всего, вам не придется писать необработанные запросы к базе данных, как вы могли бы делать в других CMS. Обычно вы получаете доступ к данным из базы данных, используя несколько объектов и методов MODX, таких как getObject и getCollection. Это зависит от базовой структуры xPDO.

Почему ОРМ?

Вы можете спросить, зачем использовать ОРМ вместо простого SQL? Ну, хотя бы несколько причин ниже:

  1. Абстракция SQL — это означает, что вы можете писать код, который работает с различными типами баз данных, такими как MySQL, SQLite, PostgreSQL и т. д., когда MODX расширяется до этих баз данных. Все без необходимости переписывать ни единой строки кода. Это делает его идеальным для авторов плагинов, которые хотят, чтобы их код был исполняемым на самых разнообразных системах.
  2. Экранирование параметров — больше не нужно беспокоиться о внедрении SQL; xPDO использует PDO PHP для экранирования всех передаваемых в вызов SQL переменных для предотвращения любых злонамеренных вызовов.
  3. Более чистый, короткий код — то, что ранее могло быть сделано в более, чем 40 строках в вызовах функций mysql_ *, теперь можно сделать в 10 строках или менее.

Есть и другие причины, но это для краткости. Давайте посмотрим на несколько примеров:

Пример кода БД

Давайте возьмем чанк с названием LineItem и изменим в нем плейсхолдеры (выполненные с помощью синтаксиса ]) на некоторые пользовательские значения:

Этот код получит чанк с именем LineItem и вернет его обработанным с установленным плейсхолдером. Переменная $chunk на самом деле представляет собой xPDOObject, который является объектным представлением ресурса.

Как насчет более сложных запросов? Как, скажем, получение первых 10 ресурсов с родителями 23, 24 или 25. И давайте сделаем так, чтобы они не были скрыты от меню или удалены, опубликованы и отсортированы по menuindex. Вот когда мы используем мощный метод $modx->newQuery():

Обратите внимание, как мы сначала создаем объект xPDOQuery ($c), используя $modx->newQuery(). Мы передали имя класса, из которого мы хотели построить запрос — здесь ‘modResource’ или ресурсы — и затем использовали нашу функцию where(), чтобы добавить некоторые ограничения

Затем мы отсортировали и ограничили их.

И, наконец, мы вызвали getCollection, которая — в отличие от getObject — возвращает коллекцию или массив xPDOObjects. Затем мы можем перебирать коллекцию, используя цикл foreach, и делать с элементами коллекции все, что мы хотим.

Дальнейшие подробности о работе с базой данных

Чтобы узнать больше о xPDO, прочитайте следующее:

  • xPDO в пространстве xPDO
  • Получение объектов в xPDO
  • Объект xPDOQuery

Получение обработанного содержимого

Если внутри ресурса содержимое формируется из чанков и сниппетов, а требуется получить сформированный html код, то воспользуйтесь этим решением:

$content = $resource->get('content');
$modx->resource = & $resource;

if (!empty($content)) { 
    // get the max iterations tags are processed before processing is terminated 
    $maxIterations= (integer) $modx->getOption('parser_max_iterations', null, 10);
    // parse all cacheable tags first 
    $modx->getParser()->processElementTags('', $content, false, false, '', array(), $maxIterations);
    // parse all non-cacheable and remove unprocessed tags 
    $modx->getParser()->processElementTags('', $content, true, true, '', array(), $maxIterations);
}  

В переменной «$content» будет готовая html разметка.

pdoTools — набор быстрых сниппетов и библиотека

Хочу представить вашему вниманию свою разработку по быстрому выводу контента на сайтах MODX Revolution.
Как известно, эта система целиком построена на собственной ORM под названием xPDO. Она очень упрощает работу, позволяет писать один универсальный код для разных БД, и еще много чего.
К сожалению, она не может похвастаться скоростью вывода (как, наверное, вообще любая ORM), поэтому я попробовал совместить её плюсы с обычным PDO, добавить лучшую работу с чанками и сделать удобную библиотеку для MODX.
Основные особенности:

  • Быстрая работа с БД. Все запросы составляются на xPDO, а выбираются без объектов — на PDO.
  • Предварительная обработка простых плейсхолдеров в чанках. Парсер MODX разбирается только со сложными вызовами.
  • Код чанков можно указывать прямо при вызове сниппета, загружать обычным образом или из статичных файлов.
  • Правильная сортировка, подготовка, обработка и вывод ТВ параметров.
  • Ведение подробного журнала работы сниппета с отметками времени, для отладки.
  • Удобная загрузка классов и множество функций, которые можно применять в своих разработках.
  • В комплекте 8 универсальных сниппетов, которые дают хороший базис разработчику.

Начну с последнего пункта.

Нахождение связанных объектов

В modx все построено на объектах. Ими являются ресурсы, пользователи, чанки, TV-параметры. И всё это между собой связано. Получая в качестве объекта ресурс, мы можем найти связанный с ним чанк или родителя и работать уже с ним опять как с объектом. Есть два способа получения связанных объектов:

  • getOne() — получение единичного связанного объекта;
  • getMany() — получение массива связанных объектов одного типа;

Разница в том, что у объекта могут быть связи с другими объектами множественные и одинарные. Например, у ресурса может быть несколько TV-параметров, чтобы получить их все (в массив) необходимо использовать метод getMany(), а вот родитель может быть только один, поэтому для его получения используется getOne().

//получение родителя как объекта
$parent = $resource->getOne('parent');
//если нужен только id
$id = $resource->get('parent');

Все теги

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

Тег Тип данных Описание Пример использования
text Псевдоним Обычно вы будете использовать id создавая URL, например: , но это позволяет распечатать параметр псевдонима.
int 0/1 Кэшируемый
int Ключ класса ресурса, например: modDocument
text Содержание ресурса
int Тип содержимого
date Дата создания, например, 2011-04-14 20: 40: 50, часто используется вместе с выходным фильтром strtotime Смотрите Форматы даты.
int Создано пользователем ID
int 0/1 Удаленный
int Удалено пользователем ID
date Дата удаления Смотрите Форматы даты.
text Описание
date Отредактировано на дату, например: 2011-04-18 09:06:08 Смотрите Форматы даты.
int Отредактировано пользователем ID
int 0/1 Скрыть из меню: этот атрибут используется многими сниппетами, например, Wayfinder
int ID ресурса Часто используется для создания ссылок на эту страницу.
text Резюме
int 0/1 Контейнер
text Атрибуты ссылки: они вставляются автоматически при использовании синтаксиса
text Длинное название
int Индекс меню
text Название меню
text Заголовок страницы
int Родительский ресурс
date —Дата публикации
int 0/1 Опубликованно
int Опубликованно пользователем ID
date Опубликован в Смотрите Форматы даты.
int 0/1 Rich Text
int 0/1 Searchable
int Идентификационный номер шаблона
date – Дата отмены публикации Смотрите Форматы даты.
int 0/1 Замороженный URI
string URI

Чтобы уточнить — он устанавливается только тогда, когда пользователь устанавливает будущую дату публикации в поле «Опубликовать в». И когда документ действительно опубликован, он обнуляется. Поле опубликовано всегда содержит самую последнюю дату, когда ресурс изменил неопубликованную форму на опубликованную (или дату, когда новый документ был сохранен с проверкой публикации).

Создание пользовательского модификатора

Любой сниппет может использоваться как модификатор вывода. Для этого просто укажите имя сниппета вместо модификатора. К примеру, создадим сниппет , добавляющий к выводу определенное количество восклицательных знаков:

Такой вызов тега передаст в сниппет makeExciting следующие параметры для обработки:

Параметр Значение Значение в примере Комментарий
input Значение элемента $input = `]`; Значение элемента, к которому применяется модификатор.
options Значение модификатора $options = ; Дополнительные параметры (после знака )
token Тип элемента $token = ; Cимвол, определяющий тип тега.
name Имя элемента $name = `pagetitle`; Имя плейсхолдера, к которому применяется модификатор.
tag Весь тег полностью $tag = `]`; Весь тег, полностью.

Приведем пример кода нашего сниппета makeExciting:

Тег выводит всё, что возвращает сниппет. В нашем случае он вернет значение тега  с четырьмя восклицательными знаками.

Если сниппет вернет пустую строку, то на страницу будет выведено изначальное значение тега.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector