Как использовать модификатор с двумя и более if?

Есть задача определять какой culturekey (всего их три) и в зависимости от этого выводить ресурсы, как это реализовать с помощью двух if?

Для двух culturekey выглядеть будет так
[[pdoResources?
&parents=`[[++cultureKey:is=`ru`:then=`3`:else=`12`]]`

]]

Как это реализовать для бОльшего числа culturekey, логика такая — если culturekey=ru, то выводим 3, если culturekey=en, то выводим 12, если culturekey=fr, то выводим 21

Спасибо!
anton
11 января 2016, 22:25
modx.pro
2
1 667
0

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

Евгений Webinmd
12 января 2016, 01:30
+1
я использую cниппет switch, он есть в официальном репозитории
    anton
    12 января 2016, 01:46
    0
    как раз натолкнулся на него на англоязычном форуме, а как его вызвать в pdoResources?
    [[pdoResources?
    &parents=`[!switch? &get=`[[++ cultureKey]]` &c1=`ru` &do1=`3` &c2=`en` &do2=`12` &c3=`fr` &do3=`21` ]]`

    ]]

    так?
      Евгений Webinmd
      12 января 2016, 01:49
      0
      почти, вызывайте pdoResources некешированным

      [[!pdoResources?
      &parents=`[[!switch? &get=`[[++cultureKey]]` &c1=`ru` &do1=`3` &c2=`en` &do2=`12` &c3=`fr` &do3=`21` ]]`
      …
      ]]
        anton
        12 января 2016, 13:02
        0
        спасибо!
    Виталий Серый
    12 января 2016, 02:04
    +1
    С Fenom-ом можно наворотить что-то вроде такого.
    {set $cult = $_modx->config.cultureKey}
    {set $parent = [
        "ru" => "3",
        "en" => "12",
        "fr" => "21",
        "de" => "30",
        "jp" => "39",
        "sg" => "48",
        "tk" => "57",
    ]}
    {$_modx->runSnippet('pdoResources',[
            'parents' => $parent.$cult
    ])}
      Павел Гвоздь
      12 января 2016, 07:44
      +2
      Там можно опустить присваивание переменной $cult значение ключа языка. Самое забавное, что этот вариант из предложенных здесь самый превосходный и универсальный, но пользоваться Феномом люди почему то боятся, чтоли. =)
        anton
        12 января 2016, 13:01
        0
        я бы тоже побоялся, тут видимо надо знать php, а его не знаю, поэтому мне вариант с модификатором и switch намного понятнее

        все рано спасибо за ответ
          Виталий Серый
          12 января 2016, 13:41
          0
          Кому надо, тот во всю пользуется)
          Если еще поизвращаться, то можно вынести присваивание в какой-нибудь глобальный чанк. Тогда переменными можно оперировать везде где вздумается и править только в одном месте придется, если понадобится.
            Павел Гвоздь
            12 января 2016, 13:45
            0
            Эт как? Через {insert 'chunk'}?
              Виталий Серый
              12 января 2016, 14:00
              0
              Например, такой базовый шаблон:
              <!DOCTYPE html>
              <html lang="en">
              	<head>
              		[[$Head]]
              	</head>
              	<body>
                  		{block 'navbar'}
                  			[[$Navbar]]
                  		{/block}
              		{block 'content'}
              			[[$Content]]
              		{/block}
              		{block 'footer'}
                      		[[$Footer]]
              		{/block}
              	</body>
              </html>

              В Head или Navbar прописать:
              {set $cult = $_modx->config.cultureKey}
              {set $parent = [
                  "ru" => "3",
                  "en" => "12",
                  "fr" => "21",
                  "de" => "30",
                  "jp" => "39",
                  "sg" => "48",
                  "tk" => "57",
              ]}

              А в Content и Footer уже использовать:
              {$_modx->runSnippet('pdoResources',[
                      'parents' => $parent.$cult
              	'tpl' => 'tpl.incontent.row'
              ])}
              
              -------------------------------------------------
              
              {$_modx->runSnippet('pdoResources',[
                      'parents' => $parent.$cult
              	'tpl' => 'tpl.infooter.row'
              ])}

              Однако, стоит проверить детальнее на практике. В теории должно работать.
            Дмитрий Середюк
            19 января 2016, 07:52
            +1
            Не то, что боятся просто некоторым лень его изучить) или нету времени на это дело)
          Konstantin
          12 января 2016, 02:23
          0
          сделать свой сниппет с условием
            Максим Кузнецов
            12 января 2016, 03:00
            +2
            Как вариант, чтобы в случае изменений не носиться по всем шаблонам и не изменять/добавлять условия, вы можете по аналогии с cultureKey добавлять для каждого контекста нужный параметр и выводить просто его.

            Например:
            web (опции контекста)
            — news_container = 1
            — gallery_container = 7
            — …
            system
            — news_container = 28
            — gallery_container = 47
            — …

            И в вызове сниппета просто вызывать соответствующий ключ:
            &parents=`[[++news_container]]`
              anton
              12 января 2016, 13:02
              0
              вот это интересное решение, спасибо!

              интересно какое из всех решений получается быстрее
                Виталий Серый
                12 января 2016, 13:33
                +1
                Это самый правильный вариант. При условии, что все крутится на контекстах.
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              15