• MODX

Как в 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

Если возможно, подскажите, какие еще есть способы, более быстрые и «дешевые», чтобы реализовать аналогичное?

Комментарии: 4

Александр Мальцев
Александр Мальцев
Привет!
1 Способ. Можно написать свой фильтр.
1. Для этого нужно создать сниппет myfilter:
<?php
$result = $input;
if ($input > 6000) {
  $result = 'Да';
}
return $result;
2. Указать его в качестве фильтра:
[[+number:myfilter]]
2 Способ. Использовать созданный фильтр в Fenom:
{$number | myfilter}
3 Способ. Написать это просто с помощью Fenom:
{if $number > 6000}
  Да
{else}
  {$number}
{/if} 
Александр
Александр
Александр, спасибо за варианты, первые 2 способа ещё дольше обрабатываются, плюс 1 запрос, обычный модификатор 0 запросов, третий способ на Fenom, тоже плюс один запрос но побыстрее первых двух, если я всё правильно тестанул то модификатор выигрывает по скорости, странно как-то или нет? Как разбить число на разряды, во всех этих способах? И стоит ли использовать феном в месте с стандартным синтаксисом или только что-то одно?
Александр Мальцев
Александр Мальцев
Чтобы число разбить на разряды можно написать свой собственный модификатор.
1. Для этого нужно создать сниппет myfilter:
<?php
$result = $input;
return number_format($result, 0, '.', ' ');
В сниппете для разбивания числа на разряды используется php функция number_format.
2. Далее использовать этот модификатор:
[[+number:myfilter]]
Попробуй всё переписать на Fenom, тогда скорость должна увеличиться. Fenom все элементы обрабатывает за раз. Тем более что в Fenom можно использовать файловый режим и вынести все чанки и сниппеты в файлы, тогда для их получения не нужно будет выполнять дополнительные запросы к базе данных.
Александр
Александр
Спасибо