• 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) Написать свой фильтр.

a) Для этого нужно создать сниппет `myfilter:

<?php
$result = $input;
if ($input > 6000) {
  $result = 'Да';
}
return $result;

b) Указать его в качестве фильтра:

[[+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 можно использовать файловый режим и вынести все чанки и сниппеты в файлы, тогда для их получения не нужно будет выполнять дополнительные запросы к базе данных.

Аноним
Аноним
Спасибо