Код сниппета «year» следующий (см. синтаксис языка PHP):
<?php
echo date('Y');
“?>” прописывать не нужно. Если пропишите, то парсер MODX всё равно её проигнорирует. В принципе, и объявление PHP скрипта в виде “<?php” можно не прописывать, код будет исполняться корректно и без этого. Но для наглядности я привык прописывать это указание на то, что перед нами скрипт на языке PHP.
Если вы используете парсер fenom и у вас включена настройка pdotools_fenom_php, то вы можете вывести текущий год так.
{'' | date : 'Y'}
Вывод сниппетов аналогичен чанкам, для вызова не кэшируемого сниппета используем :
Copyright 2019 - . Все права защищены.
В код выведется: Copyright 2019-2020 Название сайта. Все права защищены.
Где название сайта берется из системных настроек: site_name
Если нужен не кэшируемый вывод, то вызывается всегда по аналогии — с восклицательным знаком вначале [.
Вышеприведенный код на fenom.
Copyright 2019 - {'year' | snippet} {$_modx->config.site_name}. Все права защищены.
или
Copyright 2019 - {'' | date : 'Y'} {$_modx->config.site_name}. Все права защищены.
Сниппеты могут иметь параметры — php-переменные, которые можно инициализировать во время вызова.
Например усложним код нашего сниппета, до
<?php
$year = date("Y");
if($year == $start) {
return $year;
} else {
return ''.$start.' – '.$year.'';
}
Здесь мы добавили параметр start, следовательно, можем указать:
Copyright . Все права защищены.
В код выведется то же самое, что и в предыдущем случае.
Указываются параметры в вызове сниппета после знака вопроса (?).
В случае с феном вызов будет следующим.
{'year' | snippet : [
'start' => '2019'
]}
Если вы не знаете PHP особо не переживайте, его знание для создания среднестатистического сайта не требуется. Тем более есть куча готовых решений.
Вариант 1. (numformat)
<?php
if(strlen($input)==0) return '';
$input = floatval(str_replace(array(' ',','), array('','.'), $input));
return number_format($input,(floor($input) == $input ? 0 : 2),'.',' ');
Использование:
Было: 33354567
Стало: 33 354 567
Вариант 2. (nPrice)
<?php
if ($price == "")
$price_output = $modx->resource->getTVValue('Price');
else
$price_output = $price;
return number_format($price_output, 0, '', ' ' );
Использование:
В месте, где у Вас выводится цифровое поле (цена), вставляем (пусть будет TV с именем price):
[[nPrice?price=``]]
Ну или если у вас магазин на minishop2 то, вместо вывода пишем:
[[nPrice?price=``]]
last
<?php
return mb_substr($input, 0, -1);
Примечание: Полезно при формировании каких-либо последовательностей (например, ID ресурсов через запятую), у которой последний символ вызывает ошибку.
Использование:
Было: 33,35,45,67,
Стало: 33,35,45,67
phone
<?php
$p1 = array(" ", "-", "(", ")");
$p2 = array("", "", "", "");
return str_replace($p1, $p2, $input);
Примечание: Удаляются скобки, дефисы и т. д.
Использование:
<a href="tel:"></a>
на fenom можно без создания сниппета вывести, так.
<a href="tel:{$_modx->config.phone | preg_replace : '/[^0-9+]/' : ''}"> {$_modx->config.phone}</a>
Было: 8 (927) 778-45-45
Стало: 89277784545
plural
<?php
if($n!=''){
$plural = $n%10==1&&$n%100!=11?$w1:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$w2:$w3);
return $plural;
}
Примечание: Данное решение позволяет склонять числовые определения. То есть, не «1 штук», а «1 штука», «3 штуки» и т. д.
Использование:
title
<?php
$str = preg_replace ("#([^=])\"([^\"]+)\"#", "\\1«\\2»", $input);
return str_replace('&', '', $str);
Данный снииппет полезен тем, что зачастую заказчики в pagetitle вводят название ресурса типа О компании «Рога и копыта» и в код выводятся двойные кавычки, если такие кавычки вывести в meta или в img, например так:
<img src="" alt=""/>
выведется:
<img src="путь к изображению" alt="О компании "Рога и копыта""/>
Получаются двойные кавычки, что приводит к ошибкам.
Данный модификатор заменяет кавычки на «» и дополнительно убивает символ &.
Использование:
<img src="" alt="" />
getGet
<?php
$get = htmlentities(trim(strip_tags((string) $_GET[$var])), ENT_QUOTES, 'UTF-8', false);
session_start();
if ($get == '' ) {
return $_SESSION[$var];
}
else {
$_SESSION[$var] = $get;
return $_SESSION[$var];
}
Для чего он: Например нужно передать на страницу формы заказа название товара, на котором нажата ссылка «Купить».
Примечание: Можно в первой строке вместо $GET[$var] прописать $_REQUEST[$var] — тогда будет работать и с GET и с POST.
Использование:
Ссылка:
<a href="[[~id? &item=``]]">Заказать</a>
В форме:
<input type="hidden" name="item" value="" />
Поскольку всё пишется в сессию, значение подставляется и при перезагрузке страницы после, к примеру, не прошедшей валидацию, формы.