К содержанию

Как упростить условие на Fenom

У меня есть такое условие:
{if $id == '15' OR $id == '31' OR $id == '32' OR $id == '33' OR $id == '34'}
выводится код
{/if}
15 это ID родителя, все остальные ID (31,32,33,34) это дочки этого родителя.

Как упростить условия — показать родителя и всех его потомков без явного указания дочерних ID?

$id == '15' OR $id == '31' OR $id == '32' OR $id == '33' OR $id == '34'

PS. ID родителя постоянен и от него можно отталкиваться.
Александр Янк
Александр Янк
17 января 2018, 09:41
modx.pro
9 270
Реклама

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

Евгений Webinmd
Евгений Webinmd Эксперт
17 января 2018, 12:49
а где условие? в чанке или на странице?
если в чанке, то
{if $parent == '15'}
	выводится код
{/if}

если на странице, то

{if $_modx->resource.parent == '15'}
	выводится код
{/if}
    Александр Янк
    Александр Янк Старожил
    17 января 2018, 12:54
    У меня в шаблоне вот такой код:
    {set $id = $_modx->resource.id}
    
    {if $id == '15' OR $id == '31' OR $id == '32' OR $id == '33' OR $id == '34'}
    код
    {/if}
      Евгений Webinmd
      Евгений Webinmd Эксперт
      17 января 2018, 12:56
      {if $_modx->resource.id== '15' OR $_modx->resource.parent == '15' }
      	код
      {/if}
        Александр Янк
        Александр Янк Старожил
        17 января 2018, 13:02
        Вы очень выручили, спасибо вам большое, подошло!
          Максим Кузнецов
          Максим Кузнецов Проверенный
          17 января 2018, 19:34
          Возможно, вам лучше подойдет модификатор in.

          github.com/fenom-template/fenom/blob/master/docs/ru/mods/in.md
            Александр
            Александр Старожил
            17 января 2018, 20:42
            Только что попробовал с помощью модификатора in найти значение в массиве. И как-то странно он работает.
            Пример отсюда:
            in - оператор проверки наличия подстроки в строке или значения в массиве
            {var $key = '10'}
            // строка
            {if $key | in : 'У меня 10 яблок'}
            Ключ найден
            {/if}
            // массив + тернарный оператор
            {$key | in : [1, 3, 42] ? 'ключ найден' : 'не найден'}
            Со строками всё понятно. С массивом на первый взгляд тоже. Но если переменной $key присвоить значение, например, '0', то это значение будет найдено в массиве:
            {var $key = '0'}
            {$key | in : [1, 3, 42] ? 'ключ найден' : 'не найден'}
            В массиве же нет такого значения. Модификатор in ищет и по значениям и по ключам?
          Maxim
          Maxim Старожил
          17 сентября 2018, 14:48
          Спасибо! Вы мне помогли)
        nuraksha
        nuraksha Старожил
        17 января 2018, 21:53
        Может лучше так
        {set $key = ["15","31" ,"32" ,"33" ,"34"]}
        {if $_modx->resource.id in list $key}
        …
        {/if}
          Александр Янк
          Александр Янк Старожил
          17 января 2018, 22:15
          плох тем, что надо указывать ID всех дочек, а их может быть больше или меньше. Так что пока самый лучший вариант от Евгений Webinmd
      Щукин Дмитрий
      Щукин Дмитрий Старожил
      26 мая 2021, 09:07
      {if $count?}
                      {var $par_rp = $_modx->resource.parent | resource : "parent"}
                      {set $key = ["242", "243","245" ,"249" ,"288" ,"289" ,"290" ,"291"]}
                      {if $_modx->resource.template == 24 OR $par_rp in list $key }
                          {$count} м.
                      {else}
                          {$count} шт.
                      {/if}
                  {else}
                      {ignore}
                          <small>в пути</small>
                      {/ignore}
                  {/if}
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        14