Условие в чанках MODx Revolution

 Вот очень простой и наглядный пример, как писать условия в чанках.

[[*id:is=`[[++site_start]]`:then=`Это главная страница`:else=`Это не главная страница, а страница с нормером [[*id]]`]]

Работа с ресурсами через API MODx Revolution

<?php
/* Получить данные ресурса*/
// array getDocument(int $id[, string $fields[, int $published[, int $deleted]]]);
$modx->getDocument(6, '*', 1);

/* Получить данные несколькиз ресурсов*/
// array getDocument(array $ids[, int $published[, int $deleted[, string $fields[, string $where[, string $sort[, string $dir[, string $limit]]]);
$modx->getDocuments(array(6,7,8), 1, 0, 'pagetitle');

/*Работа с ресурсами через объектную модель*/
/*Загрузка реесурса*/
$res = $modx->getObject('modResource', array('id' => '1'));
$res->getContent(); // Контент ресурса

/*Создание ресурса*/ 
$res = $modx->newObject('modResource'); 
$res->set(parent,0);
$res->set('name','NewResourceName'); 
$res->setContent('<p>Это новый ресурс!</p>');
$res->save();
?>

Посмотреть описание полей ресурса в официальной документации MODx Revo.

Подклечение API MODx Revolution

// Защита от некоторых опасностей
require_once('manager/includes/protect.inc.php');
// Загрузка конфигурации
if (!$rt = @include_once 'manager/includes/config.inc.php') {
exit('Невозможно загрузить конфигурационный файл MODx!');
}

// Установка режима MODx API
define('MODX_API_MODE', true);

// Инициализация парсера
include_once(MODX_MANAGER_PATH.'/includes/document.parser.class.inc.php');

$modx = new DocumentParser;
// Включение доступа к базе данных MODx

$modx->db->connect();
// Включение доступа к основным параметрам MODx
$modx->getSettings();

Работа с чанком и сниппетом через API MODx Revolution

<?php
/* Создание чанка */
$chunk = $modx->newObject('modChunk');
$chunk->set('name','NewChunkName');
$chunk->setContent('<p>Это новый чанк!</p>');
$chunk->save();

/* Вызов чанка */
$modx->getChunk('rowTpl',$properties);

/* Перезапись чанка */
$chunk = $modx->getObject('modChunk', array('name' => 'MyExistingChunk'));
if ($chunk) {
$chunk->setContent('<p>Это перезаписанный чанк!</p>');
$chunk->save();
}

/* Удаление чанка*/
$chunk = $modx->getObject('modChunk', array('name' => 'MyObsoleteChunk'));
if ($chunk) $chunk->remove();

/* Вызов сниппета */
$modx->runSnippet('snippet' ,$properties )
?>

Вы можете попробовать изменять сниппеты аналогичным способом, используя объект "modSnippet". 

Определение того, что пользователь на главной странице

Для определения главной страницы заходим в "Настройки системы" раздела "Система" и находим пункт "Главная страница сайта" (в фильтре вы можете указать имя параметра "site_start") в разделе "сайт".

Второй вопрос - как же узнать, что наш пользователь находится именно на главной старнице (например мы хотим, чтобы скрипт приветствия был только на главной, для этого лучше использовать условие, нежели писать новый шаблон для галвной страницы)?

В шаблоне, чанке, или на самой странице пишем слудующую инструкцию, не забудьте сначала убедиться, что у вас установлен пакет "If" (этот пакет рекомендуется обязательным для большинства проектов):

[[!If?
  &subject=`[[*id]]`
  &operator=`==`
  &operand=`[[++site_start]]`
  &then=`[[$чанк_для_главной]]`
  &else=`[[$чанк_для_не_главной]]`
]]

Напомню, что конструкция "[[*id]]" выводит "id" текущей страницы, в данном примере "id" текущей страницы будет сравнен с "id" главной страницы.

Вступление! Зачем MODx есть и с чем его едят?

Эта CMF включает особенности пакетов для удобного программирования и функции самой CMS. Вы сможете программировать не выходя из админки. Единственный, и, возможно самый огромный недостаток MODx Revolution - это трудный режим редактирования маленьких функций, так как они пишутся из браузера, но не смотря на это, вы всегда сможете подключить необходимый класс, который сможете программировать в Dreamweaver или другой удобной вам программе.

И так, рассмотрит базовые элементы создания шаблона:
  1. Шаблон - элемент, который ассоциируется с одной или несколькими страницами, имеет свой набор параметров (TV). Например для страниц товаров это могут быть: цена, вес, размер; а для страниц новостей - картинка к превью новости. С помощью такой надстройки, добавлять новости и другие элементы составит одно удовольствие, без использования сторонних модулей - это является неоспоримым преимуществом данной CMF/CMS.
  2. Дополнительное поле (TV) - параметр, прикрепляющийся к шаблону и ко всем страницам, с которыми он ассоциирован.
  3. Чанк - элемент, содеражащий html-код. Может включать в себя другие чанки и сниппеты. Является основным элементом шаблона. Для включения в другие элементы используется строковаую конструкцию - [[$имя_чанка]].
  4. Сниппет - php-код, включающий все API MODx Revolution. Написав необходимый код, вы всегда сможете его включить в необходимую часть страницы через строковую конструкцию - [[имя_сниппета]]. Обратите внимание, что сначала всегда происходит вычисление всех php функций и только потом построение текста страницы, это сделано во избежании ошибок при попытке изменить заголовок страницы после ее отправки.
  5. Плагин - функция, подключающаяся к старнице в определенных условиях. Пример такого плагина - известный текстовой редактор TinyMCE.
  6. Ресурс - страница, элемент с переадресацией на другую страницу или виртуальная копия другого ресурса. Это документ, содержащий любую информацию и который может в себя включать чанки и сниппеты.
Основные понятия разобраны. Вы моежте начать работу с загрузкой одного из пакетов, который будет содержать примеры реализация данных структур. Чтобы загрузить пакет дополнений перейдите в административной панели в разделе "Система" к пункту "Управление пакетами".
Примеры использования базовых функций на англиском языке описаны здесь. Если вы по каким либо причинам не читаете материалы на английском не паникуйте - чтобы понять алгоритм часто достаточно увидеть исходный код вызова функции, который чаще всего занимает одну стрчоку.
Если вы еще думаете, стоит ли разбираться во всем этом или нет я скажу - один из таких пакетов строит карту сайта, насколько это просто написав вызов сниппета одним словом вы могли об этом тоьлко мечтать. А для более опытных разработчиков поясню, что в параметрах к модулям вы можете указывать собственные шаблоны для его представления и этим возможности МОДикс не заканчиваются.

Возможные конструкции вствавок элементов [[*...]]


[[*pub_date]] — дата публикации ресурса
[[*unpub_date]] — дата завершения публикации
[[*createdby]] — идентификатор пользователя, создавшего ресурс
[[*createdon]] — дата создания ресурса
[[*editedby]] — идентификатор пользователя, редактировавшего ресурс
[[*editedon]] — дата редактирования ресурса
[[*contentType]] — тип содержимого (например, text/html)
[[*type]] — тип (ресурс, папка или ссылка)
[[*published]] — опубликован ли ресурс (1|0)
[[*parent]] — номер (ID) родительского ресурса
[[*isfolder]] — является ли ресурс папкой (1|0)
[[*richtext]] — используется ли при редактировании страницы визуальный редактор
[[*template]] — номер (ID) используемого шаблона для ресурса
[[*menuindex]] — порядковый номер отображения в меню
[[*searchable]] — доступен ли ресурс для поиска (1|0)
[[*cacheable]] — кэшируется ли ресурс (1|0)
[[*deleted]] — ресурс удален (1|0)
[[*deletedby]] — идентификатор пользователя, удалившего ресурс
[[*menutitle]] — заголовок меню, если таковой есть
[[*donthit]] — слежение за количеством посещений отключено (1|0)
[[*haskeywords]] — ресурс содержит ключевые слова (1|0)
[[*hasmetatags]] — ресурс имеет META теги (1|0)
[[*privateweb]] — ресурс входит в частную группу пользовательских документов (1|0)
[[*privatemgr]] — ресурс входит в частную группу менеджерских документов (1|0)
[[*content_dispo]] — вариант выдачи содержимого (1 — для отображения | 0 — прикрепленное для скачивания)
[[*hidemenu]] — документ не отображается в меню (1|0)