Модификатор ':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 августа 2016, 12:14
modx.pro
8
5 373
+2
Поблагодарить автора Отправить деньги

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

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

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

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


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