Как в MODX вывести контент в зависимости от условия?
Здравствуйте, хотелось бы найти самый оптимальный способ вывода контента в зависимости от условия.
К примеру есть полеnumber
. Оно имеет числовые значения: 1000
, 2000
, 3000
, 4000
и так до десяти тысяч. Но, это не особо важно. Но, всё же опишу все мелочи. Нужно вывести слово Да
, если значение присвоенное ресурсу в тв, больше 6000
. Если меньше, выводим те значения которые присвоены ресурсам.
Знаю только один простой вариант:
[[+number:ge=`6000`:then=`Да`:else=`[[+number]]`]]
Время разбора: 0,0010831
в debugParser.
<?php
if(strlen($input)==0) return '';
$input = floatval(str_replace(array(' ',','), array('','.'), $input));
return number_format($input,(floor($input) == $input ? 0 : 2),'.',' ');
Вызывая так:
[[+number:ge=`6000`:then=`Да`:else=`[[+number:название сниппета]]`]]
Слишком прожорливый:
- Время выполнения запросов:
0,0001402
- Время разбора:
0,025019
Если возможно, подскажите, какие еще есть способы, более быстрые и «дешевые», чтобы реализовать аналогичное?
1 Способ. Можно написать свой фильтр.
1. Для этого нужно создать сниппет myfilter:
2. Указать его в качестве фильтра:
2 Способ. Использовать созданный фильтр в Fenom:
3 Способ. Написать это просто с помощью Fenom:
1. Для этого нужно создать сниппет myfilter:
В сниппете для разбивания числа на разряды используется php функция number_format.
2. Далее использовать этот модификатор:
Попробуй всё переписать на Fenom, тогда скорость должна увеличиться. Fenom все элементы обрабатывает за раз. Тем более что в Fenom можно использовать файловый режим и вынести все чанки и сниппеты в файлы, тогда для их получения не нужно будет выполнять дополнительные запросы к базе данных.