Как правило, это буквально пара-тройка строк кода, которые я называю «сниппеточками». Что-то собственного сочинения (прошу строго не судить — я тот ещё программист)), что-то подсмотрено у членов уважаемого сообщества и на PHP-форумах. В любом случае данные фишки помогут сэкономить некоторое количество рабочего времени и автоматизировать рутинные операции. Итак, поехали:
num_format
Идёт в комплекте с Shopkeeper, автор, соответственно, Andchir.
Используется, когда нужно разбить число на разряды:
<?php
if(strlen($input)==0) return '';
$input = floatval(str_replace(array(' ',','), array('','.'), $input));
return number_format($input,(floor($input) == $input ? 0 : 2),'.',' ');
Использование:
[[*price:numformat]]
Было: 12345678
Стало: 12 345 678
last
Удаляет последний символ в строке. Полезен при формировании какой-либо последовательности (к примеру, ID ресурсов через запятую), у которой последний символ вызывает ошибку:
<?php
return mb_substr($input, 0, -1);
Использование:
[[*resources:last]]
Было: 12,4587,45,86,
Стало: 12,4587,45,86
phone
Используется при формировании ссылки с атрибутом tel в выводе телефона на сайте. Удаляет всякие дефисы, скобки и т. д.:
<?php
$p1 = array(" ", "-", "(", ")");
$p2 = array("", "", "", "");
return str_replace($p1, $p2, $input);
Использование:
<a href="tel:[[*phone:phone]]">[[*phone]]</a>
Было: 8 (495) 233-32-32
Стало: 84952333232
title
Убирает лишние символы в строке. Полезно при выводе атрибутов, когда в качестве title или alt используется заголовок ресурса или подобное. Ведь, случается, что клиент называет ресурс (товар, статью и т. д. ) типа: Автоматический анализатор «АА 125-857». В этом случае, если у вас прописано в шаблоне что-то типа
<img src="[[*photo]]" alt="[[*pagetitle]]" />
выведется:
<img src="[[*photo]]" alt="Автоматический анализатор "АА 125-857"" />
Получаются двойные кавычки, что приводит к ошибкам.
Данный модификатор заменяет кавычки на «» и дополнительно убивает символ &:
<?php
$str = preg_replace ("#([^=])\"([^\"]+)\"#", "\\1«\\2»", $input);
return str_replace('&', '', $str);
Использование:
<img src="[[*photo]]" alt="[[*pagetitle:title]]" />
nbsp
Простейший типограф. (сылкой, поскольку тут некоторые теги режутся).
Вставляет неразрывный пробел после предлогов, заменяет тире и т. д.
Использование:
[[*content:nbsp]]
plural
Сниппет, который склоняет числовые определения. То есть, не «1 штук», а «1 штука», «3 штуки» и т. д.
<?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;
}
Использование:
[[plural? &n=`число` &w1=`штука` &w2=`штуки` &w3=`штук` ]]
getGet
Используется для записи в сессию и вывода значения какой-либо переменной в GET-запросе. К примеру, нужно передать на страницу формы заказа название товара, на котором нажата ссылка «Заказать»:
<?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=[[*pagetitle]]">Заказать</a>
В форме:
<input type="hidden" name="item" value="[[!getGet? &var=`item`]]" />
Поскольку всё пишется в сессию, значение подставляется и при перезагрузке страницы после, к примеру, не прошедшей валидацию, формы.
copyYears
Используется в копирайте.
<?php
$year = date("Y");
if($year == $start) {
return $year;
} else {
return ''.$start.' – '.$year.'';
}
Использование:
© [[copyYears? &start=`2015`]]
Выведет в 2015 году: "© 2015", а в 2016 уже: "© 2015 – 2016" и т. д.
Кстати, если у кого-то есть подобные «заначки», делитесь — думаю, это не повредит развитию MODX и ещё больше охарактеризует его, как чрезвычайно гибкий инструмент разработки )).
Михаил 15.06.2015 01:06 #
А если в конце нет запятой?
> title
Чем не устроил модификатор htmlent?
> copyYears
Видел подобное в репозитории, но с настраиваемым разделителем.
> plural
А вот это стоит сохранить.
> getGet
В MODX принято несколько иначе:
И зачем вызывать session_start?
Павел Романов 15.06.2015 16:11 #
Это просто для примера. Не обязательно последовательность какая-то. Это может быть, допустим, [[++site_url]], где нужно убрать слеш в конце, или еще что-то подобное.
Чем не устроил модификатор htmlent?
Я пробовал, но конкретно с кавычками и амперсандом что-то не получилось. Более того, как-то столкнулся с тем, что амперсанд, даже преобразованный в сущность обрабатывался некорректно.
В MODX принято несколько иначе:
Спасибо, не знал. Век живи ))
И зачем вызывать session_start?
Это остался хвост с какого-то старого проекта. Да, можно без него.
Михаил 15.06.2015 16:17 #
> Это просто для примера.
Я к тому, что в конце строки вообще может не быть разделителя, тогда и результат будет неверный. Например, строка «1,14,2,88» станет «1,14,2,8».
Павел Романов 15.06.2015 16:36 #
Михаил 15.06.2015 16:38 #
Воеводский Михаил 15.06.2015 01:16 #
Включить для него событие OnMODXInit или OnHandleRequest. В любом месте добавляем к адресу ?prses=1 и изучаем содержимое массива $_SESSION.
Важно: на готовых сайтах этого плагина не должно быть ни в коем случае.
Михаил 15.06.2015 01:18 #
Воеводский Михаил 15.06.2015 01:23 #
Но зачем такой плагин на готовом сайте? Он нужен для глубокого копания в алгоритмах, которое не предполагается на боевой версии проекта.
Вараника 25.08.2015 18:57 #
Вызов [[+date:dateRU]] года
Антон 14.11.2015 17:24 #
Павел 08.01.2016 13:24 #
Григорий Абрамович 27.08.2015 11:36 #
Павел Романов 28.08.2015 17:29 #
Григорий Абрамович 31.08.2015 09:36 #
Павел Романов 31.08.2015 10:26 #
Вараника 16.09.2015 20:04 #
(подчеркивание убрать, а то сайт не пускает :) )
Увы, регулярные не по мне, так что так, по-индийски :)
Вараника 18.09.2015 16:51 #
Сниппеточка parent-migx
где NameMIGXtvPARENT — имя родительского MIGX
[[+image]] — имя поля с картинкой в MIGX родителя
[[+descript]] — имя поля с описанием в MIGX родителя
Вызов:
[[#[[*parent]].NameMIGXtvPARENT:parent-migx]]
(не забыть установить fastField)
Павел Романов 18.09.2015 17:00 #
Достаточно прямого вызова «getImageList»:
Вараника 18.09.2015 17:57 #
Павел 08.01.2016 13:27 #
gaserge.ru/blog/modx-revolution/filtryi-phx-%28-modifikatoryi-%29-v-modx-revo.html
Павел Романов 08.01.2016 13:51 #
Не думаю, что это проще и быстрее ))
Павел 08.01.2016 13:56 #
Павел Романов 08.01.2016 14:00 #
Вараника 26.04.2016 18:29 #
Павел Романов 26.04.2016 18:34 #
Начиная с 2.4.4 какая-то ерунда с ними (в 2.5.0 то же самое).
Выносите шаблон в чанк, — там уже все работает.
Вараника 26.04.2016 18:58 #
Павел Романов 26.04.2016 19:01 #
Вараника 26.04.2016 20:41 #
Валентина 13.11.2018 14:51 #
Или есть какие-то более актуальные варианты?
Павел Романов 13.11.2018 17:13 #
Валентина 13.11.2018 17:18 #
Павел Романов 13.11.2018 17:31 #
bball23 23.12.2018 08:44 #
Павел Романов 23.12.2018 11:21 #
bball23 23.12.2018 14:34 #
Андрей 16.01.2019 14:56 #
Использовать:
По краям конечно же двойные квадратные скобки (почему-то не получается с ними опубликовать коммент)
Было: 12 345 678
Стало: 12345678
Павел Романов 16.01.2019 15:13 #
Андрей 16.01.2019 15:16 #