Примеры работы с API MODX

Как получить массив при запросе к базе через API MODx.

Запрос к базе типа $modx->query($query). В примере получаем список шаблонов.

$sQuery = "SELECT id, templatename FROM ". $modx->getOption('table_prefix') ."site_templates";
$result = $modx->query($sQuery);
$res = $result->fetchAll(PDO::FETCH_ASSOC);
return $res;
$ids = array(3,15,95);
$resources = $this->modx->getCollection('modResource',array('id:IN' => $ids));
foreach($resources as $res){
  $pagetitle = $res->get('pagetitle');
  $res->set('pagetitle', str_replace("Владимир Путин", "Максим Кац", $pagetitle));
  // получить TV полученного ресурса
  $tv_bio =  $res->getTVValue('bio');
  // Установить TV
  $res->setTVValue('bio', 'This is my new bio...');
  $res->save();
}

Еще один способ удалить ресурс — сделать это через процессор:

$id = 3;
$modx->runProcessor('resource/delete', array('id' => $id));
// id текущего ресурса
$id = $modx->resource->get('id'); 

// получить ресурс
$page = $modx->getObject('modResource', 555);
// получить поле полученного ресурса
$pagetitle = $page->get('pagetitle');
// получить TV полученного ресурса
$tv_bio =  $page->getTVValue('bio');
// Установить TV
$page->setTVValue('bio', 'This is my new bio...');
// Сохранить
$page->save();

// Сделать URL для ресурса с id 4
$url = $modx->makeUrl(4);
//перенаправить на страницу
$modx->sendRedirect($url);

//Получить префикс таблицы бд
$modx->getOption('table_prefix')

//Записать в лог:
$modx->log(xPDO::LOG_LEVEL_ERROR, 'There was a problem saving your TV...');

//Получить id (и рне только) пользователя
$user = $modx->getUser();
$user->get('id');
$user->get('username');

//Получить текущий ресурс из плагина
$resource->get('id');

// Вывести чанк (Второй аргумент - массив с параметрами, которые будут доступны через плейсхолдеры в чанке)
$output = $modx->getChunk('ChunkName',array('name' => 'John'));
// Отобразить 404 ошибку
$modx->sendErrorPage();

Как изменить несколько ресурсов. В данном примере помечаем ресурсы как удаленные. Через конструкцию типа $res->set('deleted', 1) вносить изменения в таблицу [prefix]site_content. Ее структуру можно посмотреть в phpMyAdmin. Чтобы получуть значение поля нужно написать $res->get('pagetitle').

[[!+modx.user.id:memberof=`Administrator`:then=`Что-то для админа`:else=`style="display:none;"`]]

Вывести ошибки при тестировании плагина в MODx

В частности для события OnDocFormSave была у меня актуальна проблема — при сохранении ресурса в консоль браузера выбрасывалась ошибка и все, и ничего. Дабы решить эту проблему следует: открыть файл manager/assets/ext3/ext-all.js, найти там false)}}},success:function(b){var a=this.processResponse(b) и добавить туда false)}}},success:function(b){console.log(b);var a=this.processResponse(b)

Получить TV с разделителем

$c = array(
    'tmplvarid' => $tmplvarid,
    'contentid' => $pageid
    );
$tvr = $modx->getObject('modTemplateVarResource', $c);
if ($tvr) {
    $raw_tv = explode('||',$tvr->get('value'));
    return $raw_tv[0]; // первый в списке
}

вызвать снипеет в другом снипеете через API MODx

echo $modx->runSnippet('mFilter2',array(
    'parents' => '0'
    ,'element' => 'msProducts'
    ,'limit' => '10'
    ,'includeThumbs' => '360x270'
    ,'includeTVs' => $inclide_tvs
    ,'filters' => implode(",", $mFilter2_filters)
    ,'where' => $msProducts_where
));
return;

Генерация ссылок

// Сделать URL для ресурса с id 4
$url = $modx->makeUrl(4);
$modx->makeUrl(4, '','', 'full'); // [[~4? &scheme=`full`]]
  • [[~[[*id]]]] — Ссылка на текущий ресурс. Пример: api-modx-tips.html
  • [[~54]] — Ссылка на какой-то ресурс. Пример: migx-magic.html
  • [[~[[*id]]? &scheme=`full`]] — Абсолютная ссылка на ресурс, на основе настройки site_url. Пример: https://webstool.ru/api-modx-tips.html
  • {$_modx->makeUrl(10)} — В феном

Запросы $modx->newQuery

Выборка ресурсов

$q = $modx->newQuery('modResource');
$q->where(array(
  'template:IN' => array(1)
  ));
$q->select(array(
  'id'
  ,'menutitle'
));
$q->prepare();
$q->stmt->execute();
$res = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($res as $v){
  print_r($v);
}

Выборка из одной таблицы с зацепкой значения из другой. А данном случае - выборка ресурсов и доп. полей

$q = $modx->newQuery('modResource');
$q->leftJoin('modTemplateVarResource', 'TV1', 'modResource.id = TV1.contentid AND TV1.tmplvarid = 5');
$q->leftJoin('modTemplateVarResource', 'TV2', 'modResource.id = TV2.contentid AND TV2.tmplvarid = 4');
$q->where(array(
  'modResource.template:IN' => array(2)
));
$q->select(array(
  'modResource.id as id'
  ,'modResource.menutitle as menutitle'
  ,'TV1.value as TV1_value'
  ,'TV2.value as TV2_value'
));
$q->prepare();
$q->stmt->execute();
$res = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($res);

Подготовить и выполнить безопасный запрос

$statement = $modx->prepare('SELECT * FROM log_404 WHERE uri = :uri');
if ( $statement->execute(array('uri'=>$_GET['q'])) ) {
  $res = $statement->fetchAll(PDO::FETCH_ASSOC);
}

Заметки и ссылки по теме:

  • Классы, точнее методы, MODx — https://rtfm.modx.com/revolution/2.x/developing-in-modx/other-development-resources/class-reference/
  • Описание классов, объектов в MODx — http://bobsguides.com/revolution-objects.html
  • https://api.modx.com/revolution/2.0/
  • Документация по xPDO — https://rtfm.modx.com/xpdo/2.x/overview
  • Пара фокусов с xPDO — https://modx.pro/development/3144-a-couple-of-tricks-with-xpdo/
  • Полезные пакеты для админа — ClientConfig, collections, TypoMCE
  • Полезные пакеты для разработчика — console, debugparser, inherittemplate, setinputoptions, VirtualPage

Комментарии (2)

  1. Евгений 21 сентября 2019, 09:50 # 0
    Здравствуйте.
    а не подскажете как вывести название (pagetitle) и описание (description) конкретного товара Минишопа по айди?
    т.е. если [[~54]] — ссылка на ресурс, то как вывести его pagetitle и description?
    1. Евгений 21 сентября 2019, 09:54 # 0
      разобрался! [[!pdoField?id=`54`&field=`pagetitle`]]
      *Комментарий будет опубликован после проверки модератором

      Похожие статьи

      Генератор настроек MIGX

      Документация на русском по MODX MIGX

      Подсказки по работе и заготовки для MiniShop2

      pdoPage и getImageList - Постраничная навигация MIGX

      Импорт и экспорт в MiniShop2. Реализация 1

      Как включить HTTPS (SSL) в MODX - Подробная инструкция

      Генерация YML для выгрузки в маркет

      Примеры работы с API MODX

      Примеры выборки where, optionFilters, innerJoin

      pThumb - ресайз изображений. Примеры использования.

      Расширение свойств товаров minishop2

      Пример перевода с помощью Yandex Translate API

      Примеры использования

      Сайт на обслуживании (выключить сайт)

      Добавить в письмо контактную информацию

      Вывести getImageList только если он не пустой

      Тип поля "Список ресурсов" (resourcelist) с ограничением по родителю (parents)

      Оформление и настройка easyComm. Комментарии и отзывы на сайте.

      Поиск на сайте с пакетом SimpleSearch

      Простая и симпатичная галерея fancybox

      Подсчет и вывод количества потомков ресурса в MODX

      Вывод tv-параметров в формате -

      Галерея. Вывести обложки альбомов и фотографии

      Отредактировать письмо о заказе - добавить ТВ поле, или что-то еще

      Quip для MODX. Более рабочий вариант

      pdoResources Заготовки для работы

      Сниппет для вывода размера и расширения файла

      Простой аудио-плеер HTML5

      Вывести список всех опций MiniShop2

      Слайдер Slick slider в контенте ресурса

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

      Как контролировать кэш CSS и скриптов

      Подключить MODX в стороннем PHP файле

      Простейшая авторизация

      Как создать ресурс процессором $modx->runProcessor('resource/create', $props)

      Красивое адаптивное меню под pdoMenu

      Массово обновить ТВ, или другое поле через базу

      Создать свою страницу в админке

      Изменить формат номера заказа

      Сообщение о том, что сайт использует Cookie

      Получить grandparent. Вывести родитель родителя

      Симпатичный список файлов, загружаемых к ресурсу через MIGX

      Установить шаблон по-умолчанию для новых, создаваемых ресурсов

      Создать источник файлов

      Вывести все доступные плейсхолдеры

      Отредактировать шаблон письма

      Добавить скрипт перед тегом body

      Общая сумма по каждому товару в корзине Minishop2

      Создать раздел с паролем на сайте MODX

      Что делать если ее приходит почта администратору

      Фильтрация по TV параметрам в msProducts

      Дата на русском

      FontAwesome - часто используемые иконки для шаблонов MODX

      Создать пакет с пользовательской таблицей

      Курсы валют с cbr.ru на PHP

      Заготовки для работы

      Загрузка сниппета после загрузки страницы через AjaxSnippet

      getResources заготовки

      Обязательный чекбокс при оформлении заказа

      Соответствие названия классов с названиями таблиц в MySQL

      Обработка остатков заказа в miniShop2

      Разбить вывод pdoResources на несколько колонок (блоков)

      Баннеры с использованием BannerY

      Обновить alias (псевдоним) у всех ресурсов

      CSS для постраничной навигации pdoPage

      Вывести время загрузки (формирования) страницы

      Расширить таблицу site_content (объект modResource) за 5 минут

      Вырезать кавычки — фильтр-сниппет MODX

      Счетчик посещений и скачиваний для сортировки ресурсов

      Динамическое поле emailSubject в FormIt

      Бесплатная доставка от 5000 рублей в MiniShop2

      Скрыть информацию о том, что сайт работает на MODX

      Отсортировать ресурсы по количеству комментариев Quip MODx

      Изменить цену на товар, если в корзине лежит товар из особой категории minishop2

      Создать редирект через autoRedirector API

      Вывести 404 ошибку по настройке TV MODX

      Ответ для сервиса moneta.ru

      Email сделать не обязательным полем

      Как разместить исходный код сниппета на сайте, в документации

      Cортировать по списку id в pdoResources и pdoTools

      Ускорить установку MODX revo до пары кликов

      Постраничная навигация — набор параметров и CSS PdoPage

      Не работает подгрузка товаров ajax mfilter2 на мобильном

      Сделать все элементы статичными для Git и IDE

      Сделать поле размер обязательным

      Настройка стилей для комментариев Tickets

      Подключить текстовой редактор к доп. полям ресурса

      Кастомный чанк для AdminPanel

      Динамическая замена шаблона ресурса - плагин

      Разместить корзину внутри блока с оформлением заказа

      Плагин для формирования замороженных URL с редиректом

      Приветственный экран / заглушка на сайт

      Вывести список всех родителей в ТВ поле ресурса

      xPDO Выборка из одной таблицы с зацепкой значения из другой

      Вложенные условия в xPDO MODX

      Вывести список всех емэйлов miniShop2

      Если getParentIds не работает в плагине

      Как получить данные пользователя сразу после авторизации через API

      Контролировать кэширование файлов CSS и JS MiniShop2

      Не приходят / не отправляются письма - в чем причина?

      Кэширование в MODX: использование $modx->cacheManager

      Наш сайт использует куки, нажмите «ОК» если вы не против
      OK