Как в Fenom проверить наличие в массиве?

Как проверить наличие ключа в массиве на Fenom?
То есть нужен аналог php-функции in_array()

Есть массив:
{set $compl = ["19","35","18","20","54"]}

Пробовал следующим образом:
{if '19' in $compl}da{else}net{/if}
Вроде бы подходит, но не тут то было, он подхватывает не всё значение, а только его часть.
То есть с таким же успехом будет работать и этот вариант, хотя и не должен, ложное срабатывание:
{if '1' in $compl} // нет значения "1", зато есть два значения где оно является частью

Пробовал и так
{if '1' in list $compl}
и так:
{if '1' in keys $compl}
— вообще ничего не выводит…
Василий Столейков
02 декабря 2016, 15:37
modx.pro
4
6 221
0
Поблагодарить автора Отправить деньги

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

Василий Столейков
02 декабря 2016, 18:45
1
0
Не хотелось бы писать отдельный сниппет для проверки наличия в массиве не убедившись вначале что Fenom не может такого…
    Василий Наумкин
    02 декабря 2016, 18:52
    1
    +1
    Попробуй в скобочках:
    {if ('1' in list $compl)}
      Василий Столейков
      02 декабря 2016, 21:57
      1
      0
      Нет, тоже не работает как и без скобок.
      Такой вариант выдаёт net, хотя должен выдавать da:
      {if ('19' in list $compl)}da{else}net{/if} // '19' (строчное) точно есть
      Результат точно такой же как и без скобок во всех вышеперечисленных вариантах…
        Василий Наумкин
        02 декабря 2016, 22:00
        0
        Ну вот у меня, код с живого проекта работает:
        {($product.id in list $favorites) ? 'remove' : 'add'}
        Больше идей нет.
          Василий Столейков
          02 декабря 2016, 22:16
          1
          0
          Спасибо, но странно что не работает.
          Мои эксперименты:
          {$compl|print} // ["19","35","18","20","54"]
          
          {var $v = '19'}
          {if ($v in list $compl)}da{else}net{/if} // net
          {($v in list $compl) ? 'da' : 'ne'} // ne
          
          {var $v = '199'}
          {if ($v in list $compl)}da{else}net{/if} // net
          {($v in list $compl) ? 'da' : 'ne'} // ne
          
          {var $v = '1'}
          {if ($v in list $compl)}da{else}net{/if} // net
          {($v in list $compl) ? 'da' : 'ne'} // ne
          
          {var $v = 19} // без кавычек
          {if ($v in $compl)}da{else}net{/if} // net
          {($v in list $compl) ? 'da' : 'ne'} // ne

          В системных настройках по феному всё что можно включено:
          pdotools_fenom_default — 1
          pdotools_fenom_modx — 1
          pdotools_fenom_options — 1
          pdotools_fenom_parser — 1
          pdotools_fenom_php — 1


          Видно в моём случае сделаю маленький костылёк модификатором…
            Василий Наумкин
            02 декабря 2016, 22:21
            +2
            Судя по распечатке, у тебя $compl — json строка. А вот с нормальным массивом
            {set $compl = ["19","35","18","20","54"]}
            {if '19' in $compl}da{else}net{/if}
            выводит da.
              Василий Столейков
              02 декабря 2016, 22:26
              1
              0
              ДА, ДА и снова ДА!!!
              В очередной раз восхищаюсь твоим умением разгадывать чужие загадки!
              Я забыл пропустить через json_decode и создал на пустом месте проблему, извини что подёргал тебя зря, но для меня вся эта информация была полезной, спасибо!

              Теперь всё работает прекрасно!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
8