xPDO cheat sheet

13 Июля 2019 15:18

Список классов и соответствующих таблиц в базе данных

Класс Таблица Описание
modResource modx_site_content Таблица с ресурсами
modTemplateVar modx_site_tmplvars Таблица со списком всех TV, используемых на сайте
modTemplateVarResource modx_site_tmplvar_contentvalues Таблица со значениями TV
modTemplateVarTemplate modx_site_tmplvar_templates Таблица соответствия шаблонов и TV
modTemplate modx_site_templates Таблица с шаблонами
modChunk modx_site_htmlsnippets Таблица с чанками
modSnippet modx_site_snippets Таблица со сниппетами
modUser modx_users Таблица со списком пользователей
modUserProfile modx_user_attributes Таблица с информацией по пользователям
modSystemSetting modx_system_settings Таблица с системными настройками
modMediaSource modx_media_sources Таблица с источниками файлов

Методы xPDO

1. getObject. 

Получаем 1 объект.

Параметры:

  1. Класс (str)
  2. Условия выборки (arr | int | str)

2. getCollection.

Получаем массив из нескольких объектов.

Параметры: 

  1. Класс (str)
  2. Условия выборки (arr | int | str)
//Получить все ресурсы с родителем 12 и шаблоном 8
$resources = $modx->getCollection('modResource', array('parent' => 12, 'template' => 8));

/*Примеры*/
$output = "<p>Всего ресурсов: " . count($resources);
foreach($resources as $k => $v) {
    $output .= $k . ". " . $v->get('pagetitle');
}
print_r($output);

3. toArray.

Формирует массив полей со значениями из свойств объекта.

Параметры:

  1. Префикс ('') (string),
  2. Сырые значения (false) (boolean),
  3. Исключить ленивые поля (false) (boolean),
  4. Использовать связи (false) (boolean | integer | string | array)
//такая конструкция уберет лишние поля из выборки, если в подготовленном запросе были указаны конкретные поля
$object->toArray('', false, true);

//Такая конструкция добавит префикс ключам в массиве
$object->toArray('pls_');

4. getCount.

Получаем количество ресурсов.

Параметры:

  1. Класс (str)
  2. Условия выборки (arr | int | str)
//Получить количество опубликованных ресурсов с родителем 55
$resCount = $modx->getCount('modResource', array('parent' => 55, 'published' => 1));

5. getChildIds.

Получает все дочерние идентификаторы указанного ресурса.

Параметры:

  1. id ресурса (int)
  2. Глубина поиска (int)
  3. Контекст (string)
//Получить массив всех дочерних ресурсов ресурса с id 14, но не глубже чем на 6 ресурсов в контексте web
$arrIds = $modx->getChildIds(14, 6, ['context' => 'web']);

6. newQuery.

Подготвалвиает SQL-запрос для выборки getObject, getCollection или для получения сырого результата.

Параметры: 

  1. Класс (str)
  2. Условия выборки (arr | int | str)

Благодаря этому методу мы можем готовить сложные условия выборки с inner join'ами и пр.

$query = $modx->newQuery('modResource', array('parent' => 57, 'published' => '1')); //Обычный запрос на опубликованных ресурсов c родителем
$query->orCondition(array('parent' => 23)); //Добавляем OR в запрос
$query->andCondition(array('parent' => 45)); //Добавляем AND в запрос
$query->select('id, pagetitle'); //Выбираем нужные поля. Если, при этом используется toArray то в toArray нужно передать параметры: toArray('', false, true), иначе будут выведены все поля

/*WHERE*/
$query = $modx->newQuery('modTemplateVarResource');
$query->where(array('price' => 2500)); //Запрос на все результаты с ценой 2500
$query->where(array('price:!=' => 2500)); //не равно
$query->where(array('price:>' => 2500)); //Больше
$query->where(array('price:<' => 2500)); //Меньше
$query->where(array('price:>=' => 2500)); //Больше либо равно
$query->where(array('price:<=' => 2500)); //Меньше либо равно
$query->where(array('price:LIKE' => '%26%')); //Добавляем LIKE
$query->where(array('price:NOT LIKE' => '%26%')); //Добавляем NOT LIKE
$query->where(array('price:IN' => array(1300,2500,500,7900))); //Добавляем IN
$query->where(array('price:NOT IN' => array(1300,2500,500,7900))); //Добавляем NOT IN
$query->where(array('price:IS' => null); //Добавляем IS

/*Через xPDOQuery::SQL_AND можно указывать несколько where*/
$query->where(array('deleted:=' => 0), xPDOQuery::SQL_AND, null, 1);
$query->where(array('searchable:=' => 1), xPDOQuery::SQL_AND, null, 1);

Построенные запросы теперь можно использовать как параметр для получения объекта:

$object = $modx->getObject('modResource', $query);

Или коллекции:

$collection = $modx->getCollection('modResource', $query);

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

$query->prepare();
$query->stmt->execute();
$rawArray = $query->stmt->fetchAll(PDO::FETCH_ASSOC);

Modx API

1. parseChunk

Парсит чанк используя ассоциативный массив заменяемых значений. Не выполняет вложенные сниппеты. Экономит ресурсы.

Параметры:

  1. Имя чанка (str);
  2. Массив создаваемых плейсхолдеров, которые будут использоваться в чанке (array);
  3. Префикс. По умолчанию [[+
  4. Постфикс. По умолчанию ]]
$modx->parseChunk('chunkName', array('name' => 'John'), $prefix = '[[+', $suffix = ']]');

2. getChunk

Парсит чанк.

Параметры:

  1. Имя чанка (str);
  2. Массив создаваемых плейсхолдеров, которые будут использоваться в чанке (array).
  3. Префикс. По умолчанию [[+
  4. Постфикс. По умолчанию ]]
$modx->getChunk('cnkName', array('name' => 'Jhon'), $prefix = '[[+', $suffix = ']]');