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

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

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

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

Для форматирования числа будем использовать PHP функцию number_format. Вызов сниппета будет примерно выглядеть следующим образом:

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

  1. num — TV параметр, или число, которое нужно отформатировать;
  2. dec — количество символов после запятой;
  3. sep — разделитель между целой и дробной частью;
  4. tho — разделитель между тысячными разрядами.

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

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

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

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

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

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

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

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

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

  1. Автор, спасибо. Думаю данный сниппет тут выступает только в качестве примера, но именно разделение разрядов в числах я и искал. ) Так, как немного знаком с PHP, данный урок дал понятие о том, как PHP скрипты внедряются и используются в Modx (в котором только начинаю работу). Благодаря Вашему уроку двух зайцев одним выстрелом. Спасибо.

    Orange
    • Спасибо за отзыв! Буду стараться больше писать про MODX!

      Дмитрий Ильичев (Автор)
  2. а сколько вообще кода можно запихивать в сниппет? нигде не нашел , существуют ли лимиты и что делать если например сниппет выходит на 700 строк и под 40000 символов?

    Сереня
    • Если кода много, то лучше всего запихнуть его в отдельный файл, закинуть на сайт, а в коде сниппета просто подключить этот файл через include_once например. И редактировать удобно, и код аккуратный.

      Дмитрий Ильичев (Автор)
  3. Спасибо, Димон!
    Твой простой сниппет решил мой сложный вопрос)

    Роман
  4. Добрый день!
    Тут приведен самый наипростейший пример, конечно такой не сложно делать. Хотя тоже интересно. А я вот хочу работать с БД, точнее с пользователями, где найти и как обращаться к базе и какие переменные использовать? Вот в чем трудность.

    Владимир
    • Привет!
      В этом случае нужно обратиться к API. Документация находится на https://docs.modx.com
      Например, чтобы получить имя пользователя, достаточно просто:

      Дмитрий Ильичев (Автор)

Оставить комментарий