Самое необходимое при разработках в ModX Revolution!

Опубликовано admin - пн, 05/28/2018 - 18:45

Давно не писал что-нибудь заумное, чтоб после прочтения у Вас голова заболела, поэтому решил написать! Может будет трудно осилить, но Вы приблизитесь к опытному уровню разработок в modx. В этой статье я не буду разжевывать всё в подробностях, но она будет очень большая, охватывающая многие аспекты программирования в среде для разработки modx, поэтому Вам придётся набраться терпения, но это будет того стоить, так как некоторые решения Вы не найдётё в интернете.

Что Вы будете уметь после прочтения?

  • Во-первых работа с внешними скриптами с использованием API MODX;
  • Не обойдется без решения таких вопросов как получения сессий, залогиных пользователей;
  • Особое внимание я уделю выводу ресурсов(документы расположенные в админ. панели) с помощью jQuery;
  • В конце всего вы найдёте мини-примеры, которые наиболее востребованы в моей практике.
  • На последок я сделал Вам сюрприз, - мы встроим интересную jQuery каптчу в скрипт модуля регистрации MODX.

Итак, - поехали!

То что я буду Вам пытаться сейчас объяснить вызовет у Вас головную боль, но поверьте эта боль - меньшее зло, по сравнению с той, которая бы у Вас проявилась, если бы Вы вручную - методом проб, всё бы это пытались создать. Для начала давайте вспомним, что отменили в последней версии MODx - 2.1.

Список отменённых методов в MODx 2.1!

  • getSettings()
  • getDocumentObject()
  • getLoginUserType()
  • getDocument()
  • getDocuments()
  • getUserDocGroups()
  • getFullTableName()
  • getAllChildren()
  • getActiveChildren()
  • getDocumentChildren()
  • getDocumentChildrenTVars()
  • getTemplateVar()
  • getTemplateVars()
  • getTemplateVarOutput()
  • getParent()
  • getPageInfo()
  • getUserInfo()
  • getWebUserInfo()
  • getDocGroups()
  • changeWebUserPassword()
  • changePassword()
  • cleanDocumentIdentifier()
  • getDocumentIdentifier()
  • getDocumentMethod()
  • checkPreview()
  • logEvent()
  • getManagerPath()
  • userLoggedIn()
  • mergeDocumentContent()
  • mergeSettingsContent()
  • mergeChunkContent()
  • mergePlaceholderContent()
  • isBackend()
  • isFrontend()
  • insideManager()
  • putChunk()

Правильно выводим статьи в MODX REVOLUTION!

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

Для начала нужно определится с подключением к MODX API. Данный код нужен для защиты.

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

После этого нам нужно подключить основной класс для работы с API MODX и конфигурационный файл:

  • config.core.php
  • modx.class.php

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

Я советую использовать нижеуказанный код для записи всех действий в журнал MODX.

Задайте уровень обработки ошибок.

Здесь нужно быть по внимательнее, выбрав правильный контекст, изначально он такой. Если Вам нужен другой контекст, - измените соответственно строку 'web'.

Сейчас мы подобрались к основному выводу содержимого статей вашего сайта. В следующем листинге мы получаем объект - ресурс с "ID" равным 3. Если у Вас пока одна страница "HOME", то Вам необходимо изменить его на 1, иначе ничего не будет выведено. Сейчас я не буду объяснять подробное назначения массива, но заранее отмечу что в MODX можно выбирать статьи одновременно по нескольким параметрам, а так же несколько ресурсов в одни массив, но пока давайте выведем содержимое одной статьи по её ID.

Теперь, когда у нас есть объект, мы можем получить его данные, давайте получим содержимое статьи.

Рабочий вариант полностью.

Если нужно вывести одновременно несколько статей, например, зная их название и краткое описание, то нужно использовать метод getCollection и заменить всё в предыдущем листинге начиная с 93 строки следующим кодом:

В итоге будут получены первые три статьи, при этом все переменные, TV будут распарены, а сниппеты выполнены - это основное отличие от предыдущего листинга, в котором содержимое выводится в том виде, в котором Вы его видите в админ. Панели, - при редактировании в редакторе(content).

Используя этот шаблон php скрипта плюс небольшое дополнение на jQuery, например $.load или $.post или $.ajax Вы сможете создавать динамичные ресурсы внутри системы MODX.

Учимся выводить данные о пользователе во внешние php скрипты в MODX REVOLUTION!

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

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

Получаем данные об активном пользователе или странице через сниппет!

Получать данные об активном пользователе или странице внутри системы (НЕ ВО ВНЕШНЕМ СКРИПТЕ), через сниппет можно следующим образом:

 

Получим текущий заголовок страницы(pagttitle), в сниппетах, - не забывайте вместо echo пишется return:

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

Мини-примеры MODX API REVOLUTION!

Получаем системные настройки MODX:

Получаем переменные шаблонов (TV):

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

Встраиваем содержимое ресурса, заголовок которого - "MyDocument", в чанк, тем самым все переменные внутри этого содержимого будут распарсены парсером MODX.

Выполнить сниппет можно с указанием его настроек следующим образом:

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

Встраиваем каптчу «QapTcha»!

Я взял каптчу с сайта QapTcha. Для начала включите в шаблон, на странице которого будет размещаться форма регистрации js и css файлы, как указано ниже:

После вставляем сниппет регистрации, он доступен по умолчанию и включен в состав сниппета "Login".

Следующий код нужно вставить в форму регистрации, - там где Вам нужно, обычно это перед кнопкой отправки формы. То есть данный код создаёт каптчу.

Далее заменить строку 69 сниппета "Register", находящийся в разделе сниппетов плагина "Login":

В итоге на странице, где у Вас расположена форма будет находится красивая и простая каптча:

 
 

Для правильной работы каптчи нужен php, сохраняющий данные в сессию, который указан ниже:

Заключение

Теперь многое для Вас в Modx станет доступным. А если не совсем, - для этого есть комментарии или форум со специальным разделом "MODX REVOLUTION"!

Взаимосвязанные материалы

# 1. Самое необходимое при разработках в ModX Revolution! (понедельник, мая 28, 2018 - 18:45 ),

Давно не писал что-нибудь заумное, чтоб после прочтения у Вас голова заболела, поэтому решил написать! Может будет трудно осилить, но Вы приблизитесь к опытному уровню разработок в modx. читать...

# 2. Правильный Ajax в ModX Revo! (вторник, ноября 27, 2012 - 20:43 ),

Ajax запросы в Modx Revo можно делать различными способами:

читать...
# 3. ModX Revo - Галерея ColorBox и её установка (суббота, ноября 12, 2011 - 21:08 ),

Установка галерей изображений в Modx Revo вызывает наибольшее затруднение у начинающих пользователей Modx. читать...

# 4. ModX Revo - Загрузка статьи из фронтенда в бакэнед (воскресенье, октября 30, 2011 - 18:34 ),

Пример загрузки статьи с сайта в админ панель Modx Revo. После загрузки пользователь будет перенаправлен на страницу с id "251". читать...

# 5. Что такое Wayfinder? (четверг, мая 5, 2011 - 21:24 ),
//
На разработку сайта! Скидки до 20%!