Как в MODX вывести контент в зависимости от условия?

Александр
Александр
879
4
Содержание:
  1. Комментарии
Александр и снова здравствуйте, хотелось бы найти самый оптимальный способ вывода контента в зависимости от условия, к примеру есть поле (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. Александр Мальцев
    10 октября 2019, 15:46
    Привет!
    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} 
    
    1. Александр
      10 октября 2019, 17:03
      Александр, спасибо за варианты, первые 2 способа ещё дольше обрабатываются, плюс 1 запрос, обычный модификатор 0 запросов, третий способ на Fenom, тоже плюс один запрос но побыстрее первых двух, если я всё правильно тестанул то модификатор выигрывает по скорости, странно как-то или нет? Как разбить число на разряды, во всех этих способах? И стоит ли использовать феном в месте с стандартным синтаксисом или только что-то одно?
      1. Александр Мальцев
        11 октября 2019, 13:48
        Чтобы число разбить на разряды можно написать свой собственный модификатор.
        1. Для этого нужно создать сниппет myfilter:
        <?php
        $result = $input;
        return number_format($result, 0, '.', ' ');
        
        В сниппете для разбивания числа на разряды используется php функция number_format.
        2. Далее использовать этот модификатор:
        [[+number:myfilter]]
        
        Попробуй всё переписать на Fenom, тогда скорость должна увеличиться. Fenom все элементы обрабатывает за раз. Тем более что в Fenom можно использовать файловый режим и вынести все чанки и сниппеты в файлы, тогда для их получения не нужно будет выполнять дополнительные запросы к базе данных.
        1. Александр
          11 октября 2019, 17:48
          Спасибо
    Войдите, пожалуйста, в аккаунт, чтобы оставить комментарий.