«Сниппеточки» или маленькие помощники разработчика

Опубликовано: 30 Авг 2017

Полностью скопировано отсюда.

Разрабатывая сайты, постоянно сталкиваешься с необходимостью решения небольших задач, под которые писать какие-то дополнения, плагины и т.д. слишком жирно. В случае работы на MODX прекрасно помогают модификаторы или небольшие сниппеты, которые преобразуют исходную строку, выражение, число в нужный формат, либо просто помогают в повседневной работе.
Как правило, это буквально пара-тройка строк кода, которые я называю «сниппеточками». Что-то собственного сочинения (прошу строго не судить — я тот ещё программист)), что-то подсмотрено у членов уважаемого сообщества и на 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="" 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 и ещё больше охарактеризует его, как чрезвычайно гибкий инструмент разработки )).

Комментарии (0)


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




Разрешённые теги: <b><i><br>Добавить новый комментарий: