Модификатор ':mod' на Fenom


У MODX есть встроенный модификатор mod: [[+number:mod]]
modulus,mod — Возвращает модуль числа (по умолчанию: %2, возвращает 0 или 1).

На Fenom не нашел такого модификатора, и пришлось повторить его логику создав собственный модификатор, может кому-нибудь пригодится.

На основе кода родного модификатора (тыкнул носом Владимир, за что ему спасибо) создаём новый сниппет mod, который будем использовать как модификатор на феноме:

<?php
if (empty($options))
    $options = 2;
return (float)$input % (float)$options;

Пример использования:
Мне нужно было переписать следующее выражение в чанке на Fenom:
<div class="our_services_block [[+idx:mod=`3`:eq=`0`:then=`mr`]]">
Результат:
<div class="our_services_block {if $idx|mod:3 == 0}mr{/if}">
В итоге, как и ожидалось, к каждому третьему результату добавляется класс mr, что и требовалось доказать!

===> UPD: оказывается не нужно никаких сниппетов, феном всё понимает сам, пример от Василия:

{$idx % 3 ? 'mr' : ''}

а вот в контексте нашего примера:

<div class="our_services_block{if ($idx % 3) == 0} mr{/if}">

P.S. Fenom рулит!
18 august 2016, 15:14    Василий Столейков   G+  
6    569 +2

Comments (7)

  1. Василий Наумкин 18 august 2016, 15:15 # +4
    Fenom не нужен этот модификатор, потому что он сам по себе понимает %.
    {$idx % 3 ? 'mr' : ''}
    1. Василий Столейков 18 august 2016, 15:21 # 0
      Ага, возможно… Только я сам по себе не понимаю что это за проценты %… )))

      Я по мозгам гуманитарий и до сих пор не понимаю что значит «модуль числа» и для чего он нужен (хотя пялился в разные формулы в статьях, но не дошло), поэтому пришлось выкрутиться таким образом.
      А можно пример этого же выражения, но на чистом феноме?

      (float)$input % (float)$options;


      Спасибо за пример!
      1. Алексей Ерохин 25 august 2016, 17:19 # +1
        В рамках математики просто модуль немного другое понятие, а в данном случае это деление по модулю, оно же — остаток от деления (надеюсь это у вас не вызовет вопросов)
        по умолчанию: %2, возвращает 0 или 1
        %3: 0,1,2.
        И так далее.
        php.net/manual/ru/language.operators.arithmetic.php
        1. Василий Столейков 26 august 2016, 10:23 # 0
          Спасибо за объяснение, теперь кажется начал понимать! А то никак не мог связать математический модуль с тем, что мне нужно… ))
      2. Василий Столейков 18 august 2016, 15:33 # 0
        Странно, но твой пример не срабатывает:
        <div class="our_services_block{$idx % 3 ? ' mr' : ''}">
        
        Даже в логи феном ничего не пишет — просто прерывает выполнение страницы как только доходит до этого места…
        1. Василий Столейков 18 august 2016, 15:36 # 0
          Прошу прощения, всё работает. Вот рабочий вариант:
          <div class="our_services_block{if ($idx % 3) == 0} mr{/if}">
          
          1. Василий Наумкин 18 august 2016, 16:03 # 0
            Наверное, нужно просто скобки добавить:
            <div class="our_services_block{($idx % 3) ? ' mr' : ''}">
        You need to login to create comments.