Как писать сниппеты для MODX?

Довольно часто новичкам, которые начинают работать с MODX, приходится сталкиваться с тем, что для решения какой-нибудь элементарной задачи приходится долго искать готовые решения. Сейчас мы разберем, как писать свои сниппеты?


Разберем на небольшом примере.

Часто приходится иметь дело со следующей ситуацией: есть сайт-каталог, товары в каталоге имеют численную характеристику, будь то вес, или чаще всего цена. В том случае, если цена используется для фильтрации товаров, тогда TV параметр должен иметь формата числа, но для пользователей числа надо форматировать. Вот этим мы как раз и займемся.

Есть MODX Revolution, есть TV-параметр

price

, в нем есть значение 5000000 (пять миллионов). Согласитесь, понять 5 миллионов или 500 тысяч — понять довольно сложно, но так как оно численное, с ним удобно работать для сравнения и фильтрации.

Для форматирования числа будем использовать PHP функцию

number_format()

. Вызов сниппета будет примерно выглядеть следующим образом:

[[num_format? &num=`[[*price]]` &dec=`2` &sep=`,` &tho=` `]]

Наш сниппет принимает следующие параметры:


  1. num

    — TV параметр, или число, которое нужно отформатировать;

  2. dec

    — количество символов после запятой;

  3. sep

    — разделитель между целой и дробной частью;

  4. tho

    — разделитель между тысячными разрядами.

Все эти параметры ни что иное, как названия переменных, которые мы можем использовать в сниппете.

Заходим в раздел «Сниппеты» и создаем новый с названием

num_format

.

Вставляем в него следующий код:

if ($num == '') // Значение из TV параметра
$num = 0;

if ($dec == '') // число знаков после запятой
$dec = 2;

if ($sep == '') // разделитель дробной части
$sep = ',';

if ($tho == '') // разделитель тысячого разряда
$tho = ' ';

$output = number_format( $num, $dec, $sep, $tho);
return $output;

Как вы уже наверно заметили, в коде сниппета можно использовать те переменные, которые были определены при его вызове как параметры.

В сниппете можно использовать переменные, которые были определены при его вызове как параметры.

В первых строчках сниппета определяем значения по-умолчанию. Сделано это прежде всего для того, чтобы максимально универсально использовать PHP функцию.

Давайте взглянем на то, что за результат мы получим, если будем вызывать наш сниппет при различных параметрах:

// [[num_format]]
0,00

// [[num_format? &num=`[[*price]]` &dec=`2`]]
5 000 000,00

// [[num_format? &num=`8888` &dec=`3` &sep=`/`]]
8 888/000

При этом очередность перечисления параметров во время вызова сниппета значения не имеет. в отличии от параметров в PHP функции.

Таким образов в написании своих сниппетов для MODX нет абсолютно никаких сложностей. Все работает очень просто и понятно. По такому же принципу работает и Evolution, различаться будет только синтаксис при вызове сниппета,

статья с различиями между Evo и Revo

также есть на сайте.


EnglishRussianUkrainian