MODX. Полезные снипеты

Сниппет «Только для администратора»

if($UserID = $modx->user->get('id')=='1'){
    echo $input;
}

/* Вывод на странице */
[[!isAdmin?&input=`hi`]]

Получение всех существующих вариантов данных дополнительного поля и поля migx

$tv_id = 17; // id нужного ТВ
$res = array(); 

$q = $modx->newQuery('modTemplateVarResource', array('tmplvarid' => $tv_id));
$q->select('contentid,value');
$q->groupby('value');
if ($q->prepare() && $q->stmt->execute()) {
    while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
        $res[$row['contentid']] = $row['value'].'<br>';
        $res[] = json_decode($row['value'], true); // для поля Migx
    }
}

return $res;

Разбиваем на элементы дополнительные поля с множественным значением

<?php
$tvname = "tvName"; // название нужного поля

$id = $modx->documentIdentifier; // получаем ID текущей страницы
$tvs = $modx->getTemplateVarOutput($tvname, $id, 1); // выбираем все значения данного TV
$arr = explode(",", $tvs[$tvname]); // разбиваем полученную строку на подстроки в массиве

foreach ($arr as $k => $v) {
$output .= "Строка: ".($k + 1).", Значение: ".$v."  // Устанавливаем условие
";}

return $output;
?>

Форматирование дат

День, месяц числом, год

[[+publishedon:strtotime:date=`%d.%m.%Yг.`]]
//30.04.2012г.

День, месяц прописью, год

[[+publishedon:strtotime:date=`%d %b %Y`]]
//30 Apr 2012

Почитать про функцию форматирования даты strftime можно тут.

Для появления русского языка в начале шаблона нужно вызвать сниппет setLocale:

<?php
setlocale(LC_ALL, "ru_RU.UTF-8");

Если нужно установить локаль только для функций времени, то лучше использовать не LC_ALL, а LC_TIME (подробнее о локалях).

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

<?php
$month_arr = array('01' => 'Янв',
                   '02' => 'Фев',
                   '03' => 'Мар',
                   '04' => 'Апр',
                   '05' => 'Мая',
                   '06' => 'Июн',
                   '07' => 'Июл',
                   '08' => 'Авг',
                   '09' => 'Сен',
                   '10' => 'Окт',
                   '11' => 'Ноя',
                   '12' => 'Дек'
                  );
  
$time = strtotime($input);
$month = strftime('%m', $time);
$day = strftime('%d', $time);
$year = strftime('%Y', $time);
    
return "$day $month_arr[$month] $year";

Вызывать вот так:

[[+publishedon:dateRU]]г.
//30 Апр 2012г.

Массовая смена полей ресурсов конкретного родителя

Для массового управления ресурсами есть компонент Butcher, но если нет желания загромождать админку лишними плагинами, можно создать снипет:

<?php
$parentID = "9"; // id родителя
$field = "template"; // название поля которое надо изменить
$fieldValue = "4"; // новое значение

// получаем ресурсы из категории $parentID
$resources = $modx->getCollection('modResource',array('parent' => $parentID));  
// проходим по всем ресурсам устанавливая нужные значения и сохраняем
foreach ($resources as $res) {
    $res->set($field, $fieldValue);                                             
    $res->save();                                                         
}
?>