xPDO cheat sheet

13 Июля 2019 15:18 (Редактировано: 17 Сентября 2020 00:58)

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

Класс Таблица Описание
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)
//Получаем ресурс с идентификатором 23
$resource = $modx->getObject('modResource', array('id' => 23));

//Получаем заголовок, так же можно получить любое поле из таблицы
$pagetitle = $resource->get('pagetitle');

//Получаем ТВ по id, также можно сделать по названию, например, image
$tv = $resource->getTVValue(3);

//Сотворить массив из объекта, который будет содержать все поля и их значения
$array = $resource->toArray();

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. getCount.

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

Параметры:

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

4. newQuery.

отовим SQL-запрос для выборки getCollection.

Параметры: 

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

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

$sql = $modx->newQuery('modResource', array('parent' => 57, 'published' => '1')); //Обычный запрос на опубликованных ресурсов c родителем
$sql->orCondition(array('parent' => 23)); //Добавляем OR в запрос
$sql->andCondition(array('parent' => 45)); //Добавляем AND в запрос
$sql->where(array('deleted' => 0)); //Добавляем WHERE в запрос
/*Вариации 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

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 = ']]');