меню

Ресурс в modx это объект, содержащий стандартный набор полей, который может быть расширен за счёт TV-параметров. Отличительной особенностью ресурса является наличие уникального URL адреса по которому к нему можно обратиться.

Так как modx является фреймворком в оболочке движка, с ресурсами можно работать как через панель администрирования, так и посредством API (xPDO). API код в modx может выполняться в сниппетах, плагинах и даже PHP файлах, если предварительно в них подключить modx класс. Я же рекомендую начать изучение с выполнения команд через «Console». Этот компонент позволяет выполнять код не создавая сниппетов и плагинов. После его установки во вкладке «Приложения» появляется ссылка на редактор кода.

Работа с ресурсами в MODx revolution

Получение значения полей конкретного ресурса

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

 
$res = $modx->getObject('modResource',1);
echo $res->get('pagetitle');
return;
  

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

 
$modx->resource->get('pagetitle');
$modx->resource->get('content');
//или
$modx->resource->getContent();
 

Пример получения TV-переменных.

  
//текущего ресурса по id
$modx->resource->getTVValue(3);
//по названию TV-параметра
$modx->resource->getTVValue('img-news');
//получение значения конкретного ресурса
$res = $modx->getObject('modResource',1);
echo $res->getTVValue('img-news');
return;
 

Изменение значения полей в modx

С получением значений полей разобрались, теперь давайте разберемся как их изменить.

  
$res = $modx->getObject('modResource',5);
$res->set('content', 'Изменили содрежимое');
$res->setTVValue('img-news','test.png');
$res->save();
  

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

Выборка и обработка множества ресурсов

Modx revolution настолько гибок, что позволяет обрабатывать целые коллекции ресурсов, выбранных по определенным критериям.

Для примера давайте выберем все ресурсы родителя с идентификатором 26, опубликованные, не удалённые и доступные для поиска. Заменим у них в тексте все одинарные кавычки на двойные.

 
if(!$docs = $modx->getCollection('modResource', array(
 'parent' => 26,
  'published' => 1,
  'deleted' => 0,
  'searchable' => 1
))){return;}

foreach($docs as $doc){
 $content = $doc->get('content');
 $content = str_replace('\'','"',$content);
 $doc->set('content',$content);
 $doc->save();
}
 

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

  
$res = $modx->getObject('modResource',1);
print('<pre>');
print_r($res->toArray());
print('</pre>');
return;
  

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

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

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

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

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

Создание ресурса из сниппета

API modx позволяет программно создавать новые ресурсы. Для этого достаточно запустить стандартный процессор (функцию). В качестве параметров передаём любые значения полей создаваемого ресурса.

  
$response = $modx->runProcessor('resource/create', array(
  'pagetitle' => 'Тестовая страница',
  'longtitle' => '',
 'description' => '',
 'introtext' => '',
 'content' => 'Содержимое тестовой страницы',
 'alias' => 'new-page',
 'template' => 1,
 'published' => 1,
  'parent' => 0
));

if ($response->isError()) {
 return $modx->error->failure($response->getMessage());
}

//получаем в качестве объекта вновь созданную страницу
$newResource = $response->response['object'];
  

Если требуется заполнить TV-поля, то процессору дополнительно передаются параметры вида tv1 = 'значение', где 1 — это идентификатор TV-поля.


Возможно, вам будет интересно

Как создать карту сайта в MODX Revo

Для создания карты сайта sitemap в MODx Revolution (Revo), можно воспользоваться дополнением GoogleSiteMap. Вся процедура установки достаточно проста и займет не более 10 минут.

Вывод даты MODx Revo

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

Документация по pdoCrumbs

Сниппет для построения навигации в стиле хлебных крошек. Хорошо заменяет сниппет BreadCrumb в MODx, работает с документами из любых контекстов и позволяет указывать различные условия для выборки ресурсов.

Проcтая форма обратной связи на MODx Revolution + FormIt

Создание формы обратной связи на сайте с использованием системы управления MODx Revolution и дополнения FormIt. Данный форма позволит отправлять данные введенные пользователем в форму, отправлять на Вашу почту.

Оформление заявки

Документы на создание сайта

Изучите наше коммерческое предложение, заполните БРИФ и отправьте его на почту maxidebox@list.ru. Изучив все пожелания из БРИФ-а, обратным ответом оповестим Вас по стоимости разработке, ответим на вопросы.

КП на создание сайта Коммерческое предложение на созданеи сайта

Мы берем на себя ответственность за все стадии работы и полностью избавляем клиентов от забот и необходимости вникать в тонкости.

Скачать БРИФ (акета) на создание сайта Скачать БРИФ (акета) на создание сайта

Зополните у БРИФ-а все необходимые поля. Сделайте краткое описание к каждому из пунктов анкеты, привидите примеры в соответсвующий пунктах - это позволит лучше понять Ваши ожидания и требования к сайту