MODX. Полезные снипеты
Меню
Отредактировано: 21 Марта 2018
Сниппет «Только для администратора»
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г.