MODX. Объекты xPDO и часто используемые конструкции
В тексте полученном с помощью get('content') или getContent() теги или любой другой код обработан не будет.
Текущий ресурс всегда доступен как $modx->resource, но не стоит это использовать для модификации, т.к. это лишь его копия.
Поиск объектовВ MODX Revo все объекты можно получить с помощью метода $modx->getObject()
Первый параметр objectClassName — название класса. Список классов:
- modResource — обращение к ресурсу (также с его помощью можно получить отдельные ресурсы, такие как: документ, ссылки и статичные ресурсы) ;
- modChunk — обращение к чанку;
- modSnippet — обращение к сниппету; — обращение к плагину;
- modTemplate — обращение к шаблону; — обращение к дополнительному полю;
- modCategory — обращение к категории;
- modDocument — обращение к документу;
- modWeblink — обращение к ссылке;
- modSymlink — обращение к симлинку на ресурс;
- modStaticResource — обращение к статичному ресурсу.
Второй параметр — идентификатор объекта, или заданный критерий.
Получить один объект с заданными параметрами можно так
Обратите внимание, что для получения названия ресурса используется pagetitle, а для получения названия чанка или сниппета — name.
Удобочитаемая запись того же действия
Для получения списка объектов используется метод getCollection()
getCollection() возвращает не PHP массив, а массив объектов, чтобы получить PHP массив, надо воспользоваться методом toArray()
Также можно использовать метод объекта get(), чтобы получить отдельное поле
Так же как и с getObject() можно использовать запросы в критериях методов getCollection() и getMany()
Для получения родственных объектов связанных с одним конкретным объектом можно использовать метод getMany()
Также, можно получить потомков
getObject() и getOne() вернут null если запрошенный объект не будет найден, а getMany() и getCollection() вернут пустой массив.
Получение полей объектаПосле получения ресурса можно извлечь одно из его полей, используя имя поля
Если надо вывести поле, можно воспользоваться следующим фрагментом кода
Получение системных настроек Загрузка экземпляра класса Использование $object->getOne() и $object->getMany()Объекты связанные со структурой MODX можно вывести используя методы getOne() и getMany(). В то время как функция get() будет извлекать определенное поле объекта, функция getOne() вернет весь объект. getMany(), соответственно, вернет массив объектов.
Получение родительского ресурса как объекта
Получение полей объекта User, вывод значений профиля пользователя
Для получения объекта «user» используется та же конструкция
или, для текущего ресурса
Объект «user» содержит только поля ID, Имя и хеш пароля. Для получения остальных полей, надо извлечь объект modUserProfile связанный с этим пользователем
После получения профиля, можно использовать его с помощью метода get() для получения любого поля ресурса
Дополнительные поля (Template Variables, TV)Получить значение TV поля текущего ресурса можно с помощью метода getTVValue() :
или так, если нужно значение конкретной страницы:
Получение значения поля с помощью getObject:
Использование toArray() с getChunk()В MODX легко разделять отображаемую информацию. Один из наиболее простых способов — создать плейсхолдер в чанке, а затем отправить его, вызовом getChunk().
Метод toArray() работает с любыми объектами MODX, но чаще всего используется с ресурсами и пользователями. Он создаёт ассоциативный PHP массив из полей объекта. В последствии, этот массив может быть использован как второй аргумент для $modx->getChunk(), для замены любых плейсхолдеров в чанке на соответствующие значения
В последней строчке мы вызываем чанк с шаблоном
Вывод снипета [ [ShowFields]] отобразит данный чанк на странице, подставив нужные аргументы.
Сокращенная запись снипета [ [ShowFields]]
Если нужно вывести поля текущего ресурса, запись может быть еще компактнее
Наборы параметровНаборы параметров — это MODX объекты, которые содержат ассоциативный массив ключей и значений (схожих с Системными настройками). Они могут быть прикреплены к любому элементу с одноименной вкладки (чанку, сниппету, шаблону, плагину) . Прикрепление параметра делает его доступным для элемента, но для использования параметра надо использовать специальный тег, примерно так
Если «набор параметров» прикреплен к сниппету, он будет перезаписывать установленные по умолчанию параметры сниппета.
Если «набор параметров» прикреплен к чанку или оставшимся элементам, значения из «набора» будет перезаписывать в элементе плейсхолдер соответствующий ключу.
Получение обработанного значения объектаВ некоторых случаях может понадобиться вывод уже обработанного значения какого-либо элемента. В этом случае могут помочь функции runSnippet() и getChunk().
Если выполнить сниппет с помощью runSnippet('SnippetName'), то будут использованы параметры по-умолчанию.
Если выполнить сниппет используя runSnippet('SnippetName',$properties), будут доступны оба набора параметров.
В случае обработки чанка методом getChunk() набор параметров может иметь одинаковые ключи, и нужный параметр надо указывать используя имя
Следует понимать разницу между «Наборами параметров» и параметрами по умолчанию. Параметры по умолчанию, технически, не является «Набором параметров». Параметры по умолчанию равнозначны свойствам «Набора параметров». Метод getProperties() получит свойства каждого
Когда чанк получают с помощью метода getChunk() параметры по-умолчанию доступны для плейсхолдеров в чанке, для их перезаписи в вызове getChunk('ChunkName', $properties) надо отправить любой параметр с таким же именем.
Схожий процесс необходим, если вы хотите послать набор параметров установленный в вызове для runSnippet(). Свойства в «Наборе параметров» будут доступны в сниппете, если они введены как параметры при вызове сниппета. Для перезаписи параметров по-умолчанию надо снова, послать нужные значения с похожим именем.
Для других элементов, после того, как вы получили элемент с помощью $modx->getObject(), можно получить обработанный вывод используя $element->process(). Это работает и для чанков и сниппетов (на самом деле, оба метода вызывают process().
$element->process($properties) также доступен и параметры по-умолчанию перезаписываются заданными при вызове.
Посылать параметры по-умолчанию в вызовах getChunk(), runSnippet() или process() не имеет смысла, т.к. они используются автоматически.
Если нужен именно «Набор параметров», то следует при вызове уточнять какой, поскольку элементы могут иметь множество «Наборов».
Метод process() работает и для ресурсов. После получения объекта ресурса через $modx->getObject(), вывод обработанного контента можно организовать через $resource->process(), но будьте осторожны, не пишите вызов текущего ресурса в сниппете содержащемся в текущем ресурсе, с целью избегания цикла.
Модификация объектовПосле получения ссылки на объект с помощью $modx->getObject(), можно менять значение его полей
Для изменения или создания основного поля с содержимым ресурса или элемента (например, поле «контента» ресурсов, контент чанков, код сниппетов), лучше использовать setContent()
Следует отметить, что ссылка на текущий загруженный ресурс доступна через $modx->resource, но не стоит это использовать для изменения ресурса, т.к. это лишь копия ресурса. Всегда получайте ссылку через $modx->getObject() перед попыткой изменения объекта.
Создание новых объектовКаждый описанный здесь объект имеет ID и может быть найден по нему, но никогда не стоит устанавливать set() ID самостоятельно. Также при изменении или создании объектов, стоит убедиться, что используемые переменные правильного типа (того же типа, что и поле устанавливаемое поле).
Работа с родительскими и дочерними элементамиДля получения всех потомков каталога можно использовать метод getChildIds:
При использовании метода getChildIds в панели менеджера необходимо обязательно определить контекст с помощью третьего параметра, так как по умолчанию он будет соответствовать текущему контексту, соответственно контексту mgr.
Глубина по умолчанию = 10.
Простейший сниппет getChildren для получения id потомков:
Для получения родителей ресурса можно использовать метод getParentIds:
При использовании метода getParentIds в панели менеджера необходимо обязательно определить контекст с помощью третьего параметра, так как по умолчанию он будет соответствовать текущему контексту, соответственно контексту mgr.