Дополнения для modx revolution: Урок 3. Дополнения для MODX Revolution – Самые нужные дополнения для MODX

Содержание

Урок 3. Дополнения для MODX Revolution

Дополнения MODX Revolution

 

К дополнениям в MODX Revolution относятся разнообразные шаблоны, сниппеты, плагины и другие компоненты, которые в состоянии помочь расширить функционал сайта, улучшить его внешний вид, дать в руки разработчика инструменты, способные повысить эффективность работы или оказать помощь в оптимизации проекта.

Дополнения размещаются в репозиториях MODX, а разработчики этих дополнений их постоянно усовершенствуют и обновляют. 

Основных серьезных репозиториев, без которых не может обойтись новый проект на MODX, два:

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


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

Дополнения MODX Revo

 

Выбор дополнений для дальнейшей загрузки производится по нажатию кнопки «Загрузить дополнения»

Загрузка дополнений MODX

 

Откроется страница, на которой будут показаны наиболее популярные пакеты, недавно выпущенные пакеты, браузер для выбора и форма поиска дополнений. Дополнения делятся на три типа:

  • Extras – разнообразные дополнения для организации меню на сайте, галереи изображений, пакеты для администрирования, работы с контентом и тому подобное;
  • Front End Templates – готовые к использованию шаблоны сайта;
  • Manager Templates  – шаблоны админ-панели, изменяющие ее внешний вид.

Найдя нужное дополнение, необходимо нажать кнопку «Загрузить». 

Дополнения MODX

 

По окончании загрузки одного дополнения можно продолжить поиск и загрузку других, а можно перейти к установке загруженного дополнения, нажав на кнопку «

Вернуться к управлению пакетами».

Загрузка пакета не означает автоматическую установку дополнения. Помните об этом!

Управление пакетами Модэкс

 

Установка требуемого пакета производится по нажатию кнопки «Установить» соответствующей строки в списке дополнений. Установщик ознакомит вас с лицензионным соглашением, прочтя которое, вы можете продолжить установку, нажав кнопку «Продолжить», или отказаться от установки, нажав кнопку «Отменить».

Пакеты MODX Revolution

 

Установка дополнения sdStore позволяет подключать дополнительный репозиторий Modstore от российской команды SimpleDream.

Нажатие на стрелку кнопки «Загрузить дополнения» раскроет список, в котором нужно выбрать пункт «Выберите поставщика»

Выбор репозитория MODX Revolution

 

В открывшемся диалоговом окне выбираем modstore.pro (это и есть репозиторий Modstore), далее сохраняем выбор кнопкой «Сохранить и перейти в обозреватель пакетов».

Репозиторий Modstore

 

Поиск, установка, загрузка дополнений – по уже известной схеме: нашли, загрузили, установили.

Пакет pdoTools

 

Не забывайте следить за появлением новых версий установленных дополнений.

Новые версии не только вносят изменения в функционал, но и содержат исправления различных ошибок, как незначительных, так и очень серьезных. 


Краткий список минимально необходимых дополнений, которые чаще всего устанавливаются на новом сайте, созданном при помощи CMS MODX Revo, есть на странице
«Самые нужные дополнения для MODX».

 


Ненавязчивая благодарность проекту


Самые нужные дополнения для MODX

Дополнения MODX Revolution

 

Все модули, которые можно добавить к установленному ядру MODX, называются «Компоненты сторонних разработчиков». Те компоненты, которые не модифицируют ядро, называются дополнениями.

Без дополнений создать что-то стоящее непросто, и каждый разработчик имеет в своем арсенале список самых необходимых, на его взгляд, дополнений, установка которых производится на начальном этапе создания сайта.

Некоторые из дополнений имеют аналоги, чуть более продвинутые и оптимизированные, или же наоборот. Я использую эти.


Список самых необходимых дополнений

sdStore

Дополнение Василия Наумкина для автоматического подключения репозитория Modstore. Именно в этом репозитории находятся некоторые дополнения, которые очень рекомендуются к использованию. Репозиторий содержит как бесплатные, так и платные компоненты.

 

Translite

Компонент для автоматической транслитерации псевдонимов (alias) ресурса из заголовков на русском языке в английские символы при его создании. Необходим при использовании ЧПУ (дружественных URL).

 

Ace

Отличный редактор кода с подсветкой синтаксиса для самых популярных языков. Удобный и функциональный: поддерживает большие документы, производит поиск и замену текста, подсвечивает родительские теги и т. д. Адаптация под MODX произведена danyaPostfactum.

 

CKEditor

Очень популярный визуальный WYSIWYG-редактор текста. На субъективный взгляд приятнее и удобнее TinyMCE. Возможна установка дополнительных плагинов и смена темы оформления. Плюс зрительно неплохо вписывается в интерфейс панели управления.

 

FormIt

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

 

AjaxForm

Сниппет для отправки сообщений со страницы сайта через Ajax. Компонент рассчитан на работу с дополнением FormIt, но существует возможность указания собственного сниппета. Создание форм обратной связи во всплывающем окне также не вызывает затруднений.

 

pdoTools

Всем компонентам компонент. Это целый пакет дополнений для создания меню, выборки и вывода ресурсов, генерации хлебных крошек (breadcrumbs), организации постраничной навигации по сайту, вывода списка пользователей и xml-карты веб-сайта.

 

phpThumbOn

Компонент для работы с изображениями при помощи популярного скрипта phpThumb. Позволяет обрезать изображения и изменять их размеры на сервере, создавать превью изображений, накладывать водяные знаки и добавлять различные эффекты. Является оптимизированным сниппетом phpThumbOf. Имеет схожий синтаксис, но отличается более быстрой работой.

 

ClientConfig

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

 

UpgradeMODX

Дополнение Боба Рэя для автоматического обновления MODX Revolution из панели управления сайтом. Присутствует возможность выбора версий, компонент производит также обновление и расширенного пакета установки.

 

Console

Компонент добавляет в административную панель управления консоль, в которой можно исполнять php-скрипты и сразу же видеть результаты их выполнения. В первую очередь компонент предназначен для разработчиков веб-проектов на CMS MODX Revo.


Некоторые расширения можно найти на Github-е. Но в этом случае придется сначала создать транспортный пакет, который установит дополнение в систему, так что пока не перегружайте мозг лишней информацией.


Дополнения MODX

В этом разделе я собрал дополнения (модули MODX), которые я устанавливаю сразу после разворачивания дистрибутива при разработке сайтов. Среди этих дополнений есть как обычные сниппеты MODX, выполняющие те или иные функции, так и полноценныые модули со своей страничкой в разделе «Компоненты» в админке

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

Надеюсь, я не нарушил никаких лицензий.

pdoTools

Компонент-замена нескольких пакетов для выборки ресурсов или других объектов. От своих аналогов отличается скоростью. В состав входят следующие сниппеты:

  • pdoResources — Выводит списки ресурсов. Полноценная замена getResources
  • pdoSitemap — Выводит xml-карту сайта. Аналог GoogleSiteMap
  • pdoCrumbs — Добавляет на сайт навигацию в виде хлебных крошек. Заменяет Breadcrumb
  • pdoField — Предоставляет доступ к полям ресурсов. Заменяет одновременно getResourceField и UltimateParent
  • pdoUsers — Выводит список пользователей сайта. Поддерживает фильтрацию по группам пользователей
  • pdoNeighbors — Показывает ссылки на следущий и предыдущий ресурсы
  • pdoPage — Реализует постраничность, так же, как и getPage
  • pdoMenu — Выводит меню на сайте в виде списка ссылок. Аналог Wayfinder

Ace

Подсветка синтаксиса в админке для чанков, сниппетов и пр. Дополнение нереально крутое — есть даже автодополнение. Если вы пользуетесь CodeMirror или прочими пакетами для подсветки — просто попробуйте 🙂

autoRedirector (модуль MODX)

Компонент отслеживает изменения адресов страниц на сайте и, если вы меняете адрес какой-то страницы, автоматически проставляет редирект. Можно использовать вместо Redirector, так как позволяет в админке вручную добавить любое правило редиректа.

Batcher (модуль MODX)

Дополнение позволяет массово переключить у ресурсов шаблон, состояния Показывать/Не показывать, Опубликован/Не опубликован и пр. Редко когда пригождается, но пару раз он меня очень выручал.

BreadCrumb (сниппет)

На мой взгляд, самое простое дополнение, добавляющее на сайт навигацию в форме хлебных крошек.

Console (модуль MODX)

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

DirectResize2

Уменьшает вставленные в контент изображения до нужного размера, подключая одну из трех JS-библиотек, которые увеличивают картинки по клику. В итоге сайт загружается быстрее, так как картинки все «ужаты».

FastUploadTV

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

FormIt (сниппет)

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

AjaxForm (сниппет)

Добавляет возможность реализовать отправку любой формы через AJAX. Хорошо взаимодействует с FormIt и по умолчанию настроен на автоматическую работу с такими формами.

MinifyX
(сниппет)

Объединяет и минифицирует стили и скрипты на сайте. Если вызывать некешированным, то отслеживает изменения файлов и пересобирает результирующий файл.

Gallery (модуль MODX)

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

impArt (модуль MODX)

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

MIGX (модуль MODX)

Даёт возможность создавать в админке табличные ТВ-параметры с удобным интерфейсом добавления и редактирования строк.

modLastModified

Возвращает пользователям (и поисковикам) заголовки Last-Modified и Not modified. Благодаря этому поисковики смогут чаще приходить на ваш сайт, чтобы проверить изменения — ведь нагрузка на их серверы будет меньше благодаря этим заголовкам.

phpThumbOn (сниппет)

Позволяет ресайзить картинки на сервере. Создает превьюшки, обрезает картинки, накладывает водяные знаки и пр.

simpleUpdater

Добавляет в раздел «Приложения» пункт «Обновить MODX», в котором вы можете провести апгрейд системы всего одной кнопкой.

CKEditor

Визуальный редактор для ресурсов в админке MODX. Аккуратная и симпатичная панель инструментов, чистый код.

Collections

Создаёт отдельный тип ресурса — коллекцию. Дочерние ресурсы коллекции не показываются в дереве, а отображаются на странице в виде удобной таблички. Идеально для разделов новостей или блогов

Translit

Транслитерирует названия ресурсов, прежде чем установить в качестве псевдонима. Здесь локальная версия отличается от версии в репозитории несколько другой таблицей транслитерации. Например, в официальной версии буква «Ц» будет преобразована в «cz», а в локальной версии — в «c».

VersionX (модуль MODX)

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

xPoller (модуль MODX)

Компонент для организации AJAX-опросов для вашего сайта

SiteHeart

Добавляет на сайт чат онлайн-поддержки от SiteHeart

Дополнения MODx Revolution MODX

Wayfinder Генерирует листинг страниц – обычно используется для меню, смотрите также документацию
Subpages Простая обёртка Wayfinder‘а для использования в шаблонах с целью отображения меню на страницах, содержащее все дочерние документы, если таковые существуют.
BasicNav Простые ссылки Первая, Последняя, Предыдущая, Следующая для страниц.
selfLink Для навигации вверх, на следующий или предыдущий ресурс от текущего или определённого ресурса.
getResources Листинг и обобщение свойств документов (например для блогинга смотрите также документацию getResources
SiteAtoZ Выводит листинг от A до Z выбранных ресурсов, включая использование getResources, обычно скрывает результаты яваскриптом, пока не выбрано иное – смотрите пример использования
tagLister Простой сниппет для вывода списка тегов из значения Переменной шаблона – TemplateVariable (смотрите также документацию tagLister)
Breadcrumbs Создаёт навигацию «хлебные крошки»
QuickCrumbs Быстрый и эффективный сниппет хлебных крошек для MODX Revolution, который позволяет использование чанк-шаблонов – chunk tpls
Easy Breadcrumb Лёгкие в использовании сниппеты для навигации хлебные крошки. Конфигурируемый через параметры и стили через CSS и/или Чанк.
GetIds Общецелевой сниппет для вывода списка, разделённого запятыми, идентификаторов ресурса
GoogleSiteMap Google генератор XML карты сайта
SitemapFriend Генерирует карту вашего сайта
MetaX Разширенные метатеги – помогает создавать теги для вашего сайта, смотрите документацию
Canonical Размещает тег в шапке, который говорит поисковикам, какой предпочтимый URL для этой страницы
Archivist Генерирует навигацию по архивам, маппинг по дружественным урлам и архивы схожие с вордпресом. Смотрите  документацию
Copyright Для генерирования сообщения об авторских правах
EasyCopyright Для генерирования сообщения об авторских правах – добавляет текущий год и имя сайта.
UncosNews Компонент позволяет создать простую страницу с новостями на вашем сайте. Все новости хранятся в отдельной таблице баз данных. Простое и лёгкое меню для добавления и редактирования новостей в Компоненте. Новости могут отображаться в любой форме и любом месте сайта, так же как и список текущих новостей или отдельно-выводимая новость. UncosNews может также использоватся для примера в качестве мини блога, списка удобных цитат, спонсорских ссылок. В любом месте вашего сата! Просто добавьте вызов сниппета.
AutoFolders Автоматически передвигает догументы в папки исходя из их даты публикации, для правильной организации ваших документов согласно дате.
Gmaps Создаёт карту в документе-обзоре, который предлагает ссылки (в карте) на другие документы – для которых координаты широты и долготы были добавлены с использованием переменных шаблона.
sLink sLink это простой сниппет, который может быть исользован для генерированния xhtml ссылок/якорей в вашем ресурсе. sLink берёт несколько параметров и может сграбить данные из определённого ресурса или используя простые строки для названия и ссылку на текст.

Разработка дополнения в MODX Revolution. Часть 1 MODX

Содержание статьи:

Обзор

Этот урок написан как всеобъемлющий пример разработки дополнения для MODX Revolution 2.2 и выше, а также описывает как упаковать дополнение в Транспортный пакет, кроме этого рассказывается как разрабатывать Дополнение вне корневого каталога MODX, чтобы можно было использовать программы контроля версий (такие как Git).

Мы рассмотрим Дополнение "Doodles" - простое дополнение, которое использует пользовательскую таблицу для хранения объектов называемых "Doodles" с полями name (имя) и description (описание). Мы создадим Сниппет, который извлекает их и выводит список, шаблонируемый через чанк, также создадим Пользовательскую страницу менеджера используя ExtJS с CRUD-сеткой для редактирования (CRUD - create, read, update, delete) и сделаем скрипт упаковки. Это всеобъемлющий урок, поэтому если вам нужны какие-то отдельные части, то см. выше Содержание.

Установка каталогов

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

  • Позволяет немедленную разработку прямо из Git репозитория
  • Позволяет лёгкое взаимодействие между разработчиками, так как нет копируемых файлов или изменяющих ядро - простая разработка в предпочитаемой IDE и далее некоторые начальные изменения путей при установке.
  • Позволяет изолировать ваш код, чтобы быть независимым от MODX ядра.

Давайте начнём. Я создал каталог в моём корневом /www/ каталоге: /www/doodles/

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

Можно добавить Системную настройку с именем "session_cookie_path" и дать ей значение "/" (без кавычек оба). Это скажет MODX использовать ту же сессию, когда вы запускаете что-то по адресу http://localhost/doodles/. Также, дать этой настройке уникальное имя через session_name (например "modxlocaldevsession") это тоже хорошая идея. Это предотвратит конфликты с другими MODX установками на вашей локальной машине. После этого очистите core/cache/ каталог и перезайдите после.

Итак у нас получиться несколько рабочих каталогов:

Давайте обратим внимание на несколько вещей. Во-первых наши 3 основных каталога - это core/, assets/ и _build/. Давайте разберёмся в нескольких моментах того, как работают MODX Дополнения - обычно (но не на 100% всегда), Дополнения разделяются при установке и попадают в 2 различных каталога: core/components/doodles/ и assets/components/doodles/. Почему? Потому что каталог assets/components/ содержит только веб-специфические объекты - JavaScript файлы, CSS файлы и т.д. Это файлы, которые доступны через сеть. Все PHP файлы, классы, карты и другие файлы в то же время находятся в каталоге core/components/. Это предохраняет от нежелательного доступа в каталоге core/ (который может быть перенесён куда-либо вне корня в некоторых MODX установках для большей безопасности).

Итак мы разделим наши файлы по каталогам для имитации того, как они будут разделены в MODX установке после установки из Транспортного пакета.

Каталог _build/ не упаковывается в zip файл после создания Транспортного пакета. Он служит для построения самого Транспортного пакета. Мы рассмотрим этот момент ближе к концу урока.

Давайте пройдёмся более детально по каждому подкаталогу. В каталоге assets/ единственный неочевидный файл - это connector.php. Этот файл позволит нам использовать кастомные процессоры на нашей Пользовательской странице менеджера (ПСМ), которую мы чуть позже создадим.

В каталоге core/components/doodles/ у нас есть несколько каталогов, которые нужно рассмотреть:

  • controllers - это контроллеры нашей ПСМ.
  • docs - просто содержит файлы changelog, readme и license.
  • elements - все наши Сниппеты, Чанки, Плагины и др.
  • lexicon - все наши i18n языковые файлы.
  • model - здесь лежать все файлы классов, а также наш XML схема файл для пользовательских таблиц БД.
  • processors - все наши кастомные процессоры для ПСМ.

Также обратите внимание, что эта директория находиться полностью вне нашего корневого каталога MODX. Поэтому, да - вы можете запускать "git init" и делать собственный Git репозиторий вне каталога /www/doodles/ (или как там вы его назовёте). И вы можете делать push без особых забот (есть правда несколько файлов о которых мы поговорим чуть позже, их нужно будет добавить к .gitignore файлу).

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

Создание сниппета-заготовки Doodles

Давайте продолжим и создадим файл snippet.doodles.php:

/www/doodles/core/components/doodles/elements/snippets/snippet.doodles.php

Вам нужно создать каталог snippets/, если он у вас ещё не создан. Давайте добавим пару строчек кода в ваш пустой файл:

Давайте разберёмся с этим кодом. Во-первых, у нас есть вызов getService. Сейчас он оформлен одной строкой, поэтому давайте разделим её и разберёмся что к чему:

Ну во-первых, что такое $modx->getOption? Это метод, который берёт системную настройку по ключу (первый параметр). В первой строчке мы получаем путь по-умолчанию к нашему сниппету Doodles (подразумеваем, что он находиться в папке core/). Полный путь будет: /www/modx/core/components/doodles/

Далее мы передаём это значение по-умолчанию как запасное для метода получения опции getOption. Этот метод содержит 3 параметра: ключ с именем "doodles.core_path", null и наш путь по-умолчанию. В getOption второй параметр - это массив для поиска ключа (который мы не используем, поэтому дали ему значение null) и 3й параметр для случая, когда ключ не найден.

Поэтому прямо сейчас наша 2ая строчка возвратит /www/modx/core/components/doodles/. Но это не путь к нашему Doodles ядру! (подсказка: правильный путь /www/doodles/core/components/doodles). Мы хотим этими строками задать поиск его. Так что же нам делать?

Создание настроек волшебного пути

Мы создаём несколько Системных настроек (специально для нашей среды разработки), которые сообщат нашим строкам, где нужно искать наши файлы! Давайте продолжим и создадим их:

  • doodles.core_path - /www/doodles/core/components/doodles/
  • doodles.assets_url - /doodles/assets/components/doodles/

Если вам нужно поменять данные значения для корректировки путей, таких как URL, то сделайте это. Теперь наша первая строчка кода возвратит: /www/doodles/core/components/doodles/ Отлично! Продолжим?

Для чего мы всё это делаем? Почему взять просто и не написать /www/doodles/core/components/doodles/? Ну, хотя бы потому, что это не сработает в чей-то другой установке. Скорее всего данный путь будет таким: MODXPATH/core/components/doodles/. Наш транспортный пакет (позже) будет обрабатывать все эти динамические настройки, но мы хотим добавить возможность записи их для того, чтобы можно было разрабатывать Doodles вне каталога MODX. Так как мы только что сделали!

Перейдём к третьей строке:

Метод $modx->getService загружает класс и инициализирует его объект, если он существует, устанавливает его в $modx->doodles в нашем случае (первый параметр передаётся). Больше информации можно найти здесь. Но подождите! У нас ещё нет Doodles класса! Самое время сделать его.

Создание базового Doodles класса

Во-первых, вы скорее всего спросите меня, почему мы создаём этот класс. Ну, он поможет нам в нескольких аспектах: мы можем определить некоторый базовые пути в нём, которые потом будем использовать во всём нашем Компоненте и он может дать нам некоторые методы для использования. Поверьте мне, он полезен. Давайте создадим его в /www/doodles/core/components/doodles/model/doodles/doodles.class.php:

Отлично! Всё пока довольно-таки просто - просто создаём объект класса, который имеет конструктор, который устанавливает ссылку на modX объект в $doodles->modx. Это пригодиться позже. Также он задаёт некоторые базовые пути, которые мы будем использовать позже в $doodles->config массиве и этот трюк с Системными настройками приведёт нас к пути в /www/doodles/.

Вернёмся к нашему сниппету. Давайте продолжим и добавим некоторые свойства по-умолчанию к нашему Сниппету. После упомянутых выше строчек он будет выглядеть так:

Отлично. Теперь мы хотим использовать xPDO для получения записей из базы... НО, мы ещё не сделали xPDO модель для них. Давайте вначале сделаем это.

Создание модели

xPDO абстрагирует БД в ООП методы запросов. На данный момент оно начало поддерживать различные типы БД и оно делает это через абстракцию запросов к БД. Также оно позволяет вам содержать ваши строки БД в виде упорядоченых, чистых классов и изящно выполнять все работы через короткие строчки кода. Но чтобы сделать это, нам нужно добавить xPDO модель к нашему сниппету (через $modx->addPackage метод). Но вначале нам нужно создать эту модель, используя xPDO схему. Есть отличный урок по созданию xPDO модели как это можно сделать, но мы пройдём быстро этот вопрос.

Продолжим и создадим xml файл в /www/doodles/core/components/doodles/model/schema/doodles.mysql.schema.xml. Вставим в него следующий код:

Отлично. Тут много всего. Во-первых, первая строка:

Она сообщает схеме, что наш xPDO пакет называется 'doodles'. Это то, на что мы будем ссылаться в нашем addPackage() вызове. Отлично. Это также говорит, что базовый класс для всех объектов определён здесь как "xPDOObject" и что эта схема сделана для MySQL. Наконец, она задаёт по умолчанию MySQL движёк как MyISAM. Дальше пойдём!

"Объект" в xPDO схеме - это в основном таблица БД. Эта строка сообщает, дайте xPDO имя для таблицы с названием '{table_prefix}doodles'. Подразумеваем, что в вашей установке префикс таблицы - это "modx", что создаст нам "modx_doodles". Далее она сообщает, что он расширяет "xPDOSimpleObject". Что это значит? xPDOObject - это базовый объект для любого xPDO табличного класса. xPDOSimpleObject расширяет его, но добавляет хорошенькое автоинкрементное поле "id" к этой таблице. Поэтому, если нам нужно поле "id" в таблице, то мы используем xPDOSimpleObject.

Следующие поля вполне очевидны - это поля таблицы БД. Давайте продвинемся к следующим двум частям:

Отлично, это место, где вступают в xPDO игру связанные объекты. Для целей этого урока, просто знайте, что они сообщают xPDO, что поле createdby связано с modUser и поле editedby ведёт к другому modUser. Круто? Теперь давайте перейдём к парсингу этого xml файла и к созданию наших классов и связей.

Скрипт парсинга схемы

Самое время взглянуть на нашу подзабытый _build каталог. Создадим там файл: /www/doodles/_build/build.schema.php и поместим туда код:

В основном этот файл парсит вашу XML схему и создаёт xPDO классы и связи (PHP представление XML файла) для вашего компонента. Мы вернёмся позже к этому, но так просто он не запустится. Он засбоит в поиске файла a /www/doodles/_build/build.config.php. Время сделать такой файл!

Очевидно, что вам понадобятся эти пути, где бы не находилась ваша MODX установка.

Теперь вы можете перейти к вашему _build/build.schema.php файлу и запустить его. Я делаю это в строке браузера: http://localhost/doodles/_build/build.schema.php. Вам скорее всего будет нужно поменять это на другой адрес, по которому находиться ваш doodle каталог.

Это должно запуститься и сгенерировать нужные файлы и связи:

Браво! Теперь вы сделали ваши связи и классы. Давайте сделаем уточнения в нашем базовом Doodle классе, чтобы он автоматически добавлял в Doodles xPDO пакет при загрузке этого класса. Добавьте следущую строку после этой $this->config = array_merge part, прямо в конце конструктора:

Это сообщает xPDO, что мы хотим добавить 'doodles' xPDO пакет, позволяя нам делать запросы к пользовательской таблице. Отлично!

Ок, наш сниппет теперь выглядит приблизительно так:

Ламерский сниппет, согласны? Хорошо, что мы сейчас делаем, так это устанавливаем объект Doodles класса в переменную $dood и устанавливаем некоторые значения по-умолчанию для свойств для дальнейшего использования. $scriptProperties - это массив, между прочим, всех передаваемых в сниппет свойств. Вызов getOption парсит его для поиска в них свойств и если они не установлены, то берёт свойства по-умолчанию.

Статический сниппет

Возможно вы подумаете: "Это всё ещё даже не в MODX manager! Что он нам тут рассказывает? Наверное шутит?" Отличный вопрос, давайте сделаем это!

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

Создайте новый сниппет чекнув "Is Static". Появятся два новых поля. Первое, Медиа Источник (Media Source) для поля файла (Static File). Оно предложит список медиа источников для базового использования. Так как наш Doodles находиться не в MODX веб пространстве, нам нужно выставить это поле в Нет ("None"). Теперь нам нужно ввести путь к файлу сниппета. Также используем установки пути, которые мы создали в Системных настройках и добавить остаток пути к действительному сниппет файлу.

Обратите внимание на дополнительный слеш между системной настройкой и остальным путём. В core_path этот слеш есть, но по дороге он где-то затерялся, поэтому добавим его здесь. Путь будет рендериться как /www/doodles/core/components/doodles/elements/snippets/snippet.doodles.php

Отлично сработано! Далее можно продолжать редактировать наш сниппет в своей любимой IDE и делать в нём нужные вещи. Он также передаёт все параметры, которые мы передаём в вызове сниппета в наш Doodles сниппет. Круто! Возвращаемся к нашему сниппету.

Построение запроса

Во-первых, нужно создать таблицу. Это будет сделано в преобразователе (резольвере) позже, но сейчас просто добавьте следующий код к вашему сниппету прямо перед оператором return:

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

Добавим это к нашему сниппету перед оператором return:

Это возьмёт наш массив Doodle объектов или в терминах не xPDO, несколько рядов из таблицы БД. Сохраним наш сниппет и запустим через строку браузера http://localhost/modx/doodles.html (или какой у вас там будет адрес ресурса). У вас должно вывести:

0

Ха, обманул вас! В действительности, в первый запуск ничего не выведет, так как в таблице нет данных. Давайте добавим туда какие-нибудь данные.

Для этого используйте любое удобное для вас ПО для работы с БД (например phpMyAdmin) и найдите таблицу 'modx_doodles' в вашей БД. Добавьте несколько рядов к ней (просто добавьте name/description значения). Это должно выдать вам какие-то данные. Допустим вы добавили 2 ряда. Продолжим и запустим сниппет, получим следующее:

2

Отлично! Ваш пользовательский запрос к БД сработал! Давайте усложним его. Мы можем использовать xPDO xPDOQuery для создания сложных запросов. На данный момент добавьте команду сортировки:

Отлично. Это отсортирует поле по $sort (который мы определили ранее) в направлении $dir. Теперь нам нужно создать вывод!

Метод getChunk класса Doodles class

Во многих из моих экстра, я добавляю парочку вспомогательных методов к моему базовому классу getChunk. Они позволяют мне использовать чанки-файлы для разработки. Давайте так и сделаем. Откроем Doodles класс и добавим эти два метода:

В данный момент всё что нужно знать: эти методы будут искать Чанки в вашем /www/doodles/core/components/doodles/elements/chunks/ каталоге с постфиксами '.chunk.tpl' и все в нижнем регистре (маленькими буквами). Если чанки не найдутся в файловой системе, то будет продолжен поиск в MODX. Поэтому, когда мы вызываем:

То это задаст для $o содержимое /www/doodles/core/components/doodles/elements/chunks/hello.chunk.tpl со свойством [[+name]] спарсенным как Joe. Это позволит вам отредактировать ваши Чанки в вашей IDE, а не в MODX. Это также позволит вам упаковать ваш Компонент без установки чанков по-умолчанию в пользовательскую MODX установку (которую они будут пытаться перезаписать, что будет стёрто при обновлении вашего Компонента).

Возвращаемся к нашему сниппету. Создадим файл-чанк /www/doodles/core/components/doodles/elements/chunks/rowtpl.chunk.tpl и вставим туда код:

Теперь добавим это после вашего запроса, но перед return в вашем Сниппете:

Этот код итерирует через все Doodle объекты, которые у нас есть с вызовом getCollection и создаёт PHP массив из их значений методом toArray. Далее он использует getChunk и этот массив для шаблонирования чанком каждого ряда вывода и склейкой выводимого результата в переменную $output. Таким образом мы получим группу \<li\> тегов (столько, сколько вы добавили рядов в БД). Всё будет выглядеть приблизительно так:

Конечно же, вы можете внести любые изменения в этот Чанк и можете как угодно его назвать, мы получили возможность шаблонизировать вывод Сниппета! Ура!

Давайте ещё раз всё пройдём. Наш сниппет выглядит вот так:

Что вышло в итоге: этот сниппет загружает наш базовый пользовательский класс по пути в системных настройках, добавляет наш пользовательский xPDO пакет БД, извлекает данные из таблицы и выводит их через чанк.

Выводы

Мы сделали неплохую пользовательскую модель БД, которую использует наш Doodles сниппет для получения записей из БД. Также мы рассмотрели базовую структуру обобщённого MODX компонента.

Нам нужно ещё, чтобы эти данные как-то редактировались в MODX менеджере, правильно? Вот где нам пригодятся Пользовательские страницы менеджера (Custom Manager Pages). Перейдём к следующей части данного урока.

Остальные статьи:

Начальный минимум расширений для MODX Revolution

Изображение к статье: Начальный минимум расширений для MODX Revolution

Каждый раз, начиная новый проект на MODX Revolution, прежде чем начинать что-то ваять, надо установить все необходимые дополнения. Возможно кому-то данная информация поможет, вот список тех расширений, которые я ставлю начиная проект на MODX Revolution, всё остальное ставится опционально по потребностям или дописывается ручками.

Первоначальный пакет дополнений для MODX Revolution, включает в себя следующие расширения:

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

ACE (ранее пользовался Codemirror, но душа не лежала к нему) – расширение подсвечивающее код, удобство работы с чанками, шаблонами и тд. Данное расширение не подсвечивает код в статьях.

CustomURLs – расширение позволяет сделать автоматическую генерацию URL для каждого материала, по своему вкусу и уровню извращенной фантазии. Использовать можно всё, начиная от обычных стандартных полей материала, до TV параметров и модификаторов вывода.

FormIt – наше всё, расширение по работе с формами, любого назначения и вида.

getPage – расширение реализующее разбиение на страницы. Работает вместе с getResources или getProduct, ну или чем-либо другим реализующим выборки ресурсов.

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

GoogleSiteMap – расширение создающее карту сайта, в виде файла xml, который не забудьте добавить в ваши панели web-мастеров от Google и Yandex.

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

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

TinyMCE Rich Text Editor (ранее пользовался TinyMCE, мне не очень понравился, хотя функционально одинаковая) – удобный редактор для полей материалов. На сайте разработчика можно посмотреть как включить дополнительные функции.

translit – расширение генерирующее alias материала путём транслитерации. По опыту рекомендую добавить в таблицы правила для точки, запятой и восклицательного знака.

Wayfinder – расширение позволяющее создавать меню, любых видов и уровней вложенностей.

Это минимум, который сделает Вашу работу по созданию и дальнейшей эксплуатации сайта на MODX Revolution комфортной и удобной. Вот собственно и всё, добра Вам!

MODX дополнения | MODX Docs

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

Где найти дополнения

Официальный источник дополнений MODX.com. Ты можешь просматривать сотни (бесплатных) дополнений, каждая установка MODX уже настроена на загрузку и установку дополнений с MODX.com через менеджер пакетов.

Есть также сторонние источники и доступные торговые площадки, которые обычно предлагают комбинацию бесплатных и премиальных дополнений. Они включают:

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

Обычно используемые дополнения

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

Это не означает, однако, что это ваши единственные варианты. Просматривайте репозиторий, читайте форумы и делитесь интересными дополнениями, которые вы найдете в сообществе.

Навигация и контент

  • pdoTools представляет собой набор полезных сниппетов, который призван стать современной (в основном) заменой старых (но все еще поддерживаемых) дополнений:
    • pdoResources является эквивалентом getResources, который может быть использован для перечисления ресурсов. Их также можно использовать для подачи RSS или создания Sitemap.
    • pdoMenu является эквивалентом Wayfinder, который используется для создания (многоуровневых) меню из вашего дерева ресурсов.
    • pdoPage является эквивалентом getPage, который обертывает сниппеты, такие как getResources / pdoResources с возможностями разбиения на страницы
    • pdoCrumbs может быть использован аналогичноBreadcrumbs создать хлебные крошки текущего ресурса.
  • getResourceField, pdoField или fastField для получения одного поля ресурса.
  • AdvSearch или mSearch3 (премиум дополнение от modstore) добавляет функцию поиска на ваш сайт
  • Collections используется для большого количества ресурсов, таких как блоги или списки продуктов, и будет перечислять дочерние ресурсы в сетке вместо дерева
  • NewsPublisher позволяет пользователям создавать ресурсы в front-end без необходимости доступа к MODX Manager (включая редактирование текста и браузер файлов/изображений).

Редактирование кода/текста

  • TinyMCE RTE это текстовый редактор на основе TinyMCE 4. (Пакет называется просто TinyMCE использует более старый TinyMCE 3)
  • TinymceWrapper реализация TinyMCE, использующая последнюю версию CDN
  • Redactor (Премиум дополнение от Modmore) представляет собой MODX интеграцию от Redactor.
  • CKEditor интегрирует CKEditor RTE в MODX.
  • Ace позволяет редактировать код для ваших элементов в менеджере.

Медиа

  • Gallery может быть использована для добавления альбомов изображений на ваш сайт
  • MoreGallery (премиум дополнение от Modmore)для управления галереями изображений и видео (YouTube / Vimeo), реализованными как специальный тип ресурса

Формы

  • FormIt является стандартом в обработке форм
  • Formalicious ((Премиум дополнение от modmore и modstore)это конструктор форм на основе FormIt
  • SPForm простая, защищенная от спама контактная форма

Мультисайтовый, многоязычный, мультидоменный, контексты

  • xRouting это гибкий контекстный маршрутизатор, который поддерживает (суб) домены и каталоги с минимальной конфигурацией
  • LangRouter это контекстный маршрутизатор, который выбирает контекст на основе языка посетителей
  • Babel используется для соединения переводов в разных контекстах

Электронная коммерция

  • MiniShop2 представляет собой мощное решение для электронной коммерции с открытым исходным кодом, со многими (платными и бесплатными) расширениями, доступными преимущественно из modstore
  • Commerce это мощное решение для электронной коммерции премиум-класса от modmore
  • SimpleCart представляет собой более простое решение для электронной коммерции премиум-класса, изначально разработанное OostDesign и доступное в настоящее время от modmore

Пользователи

  • Login представляет собой набор инструментов, которые помогут вам интегрировать функциональность интерфейсного пользователя, включая вход в систему и профили.
  • HybridAuth может использоваться для входа пользователей через социальные сети
  • Personalize может отображать разные чанки в зависимости от того, вошел ли пользователь в систему или нет

Ведение блога

  • Collections перечислить дочерние ресурсы в сетке в диспетчере (а не в дереве ресурсов)
  • Quip и Tickets для добавления функциональности комментирования
  • Tagger для добавления тегов, которые вы можете фильтровать и искать посты

Управление версиями и рабочий процесс

  • VersionX хранит копию изменений ваших ресурсов и элементов для легкого восстановления.
  • Preview и Workflow (премиум дополнение от Extras.io) обеспечивают предварительный просмотр и публикацию рабочих процессов.
  • MagicPreview (бесплатное дополнение от modmore) дает вам кнопку предварительного просмотра, которая позволяет вам видеть изменения вашего ресурса без необходимости сохранения изменений.
  • StageCoach позволяет проводить изменения страницы, чтобы они были применены в будущем.

Инструменты разработки

  • modDevTools добавляет дополнительную функциональность менеджеру, чтобы помочь разработчикам создавать сайты.
  • MyComponent это полноценная среда разработки для создания дополнений MODX.

Инструменты для диагностики

  • SiteCheck (Премиум дополнение от Bob Ray) выполняет тысячи проверок целостности вашего сайта.

Обновление MODX

  • UpgradeMODX позволяет обновить MODX Revolution из админки MODX.
  • GoRevo (Премиум дополнение от Bob Ray) предоставляет инструмент для перехода с MODX Evolution на MODX Revolution.

Распространение ваших собственных дополнений

Перейдите на страницу https://modx.com/extras/, войдите в свою учетную запись MODX (или создайте ее), затем нажмите кнопку внизу, чтобы «Отправить дополнение».

Там вы можете загрузить MODX транспортный пакет. Это специальный вид zip-файла, который гарантирует, что ваше дополнение и все его компоненты правильно установлены в целевой системе. Чтобы создать его, вам нужно создать скрипт сборки

Все дополнения, размещенные на MODX.com, проходят базовый обзор; обработка вашего заявления может занять несколько дней.

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

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