Как использовать модификатор с двумя и более if?
Есть задача определять какой culturekey (всего их три) и в зависимости от этого выводить ресурсы, как это реализовать с помощью двух if?
Для двух culturekey выглядеть будет так
[[pdoResources?
&parents=`[[++cultureKey:is=`ru`:then=`3`:else=`12`]]`
…
]]
Как это реализовать для бОльшего числа culturekey, логика такая — если culturekey=ru, то выводим 3, если culturekey=en, то выводим 12, если culturekey=fr, то выводим 21
Спасибо!
Для двух culturekey выглядеть будет так
[[pdoResources?
&parents=`[[++cultureKey:is=`ru`:then=`3`:else=`12`]]`
…
]]
Как это реализовать для бОльшего числа culturekey, логика такая — если culturekey=ru, то выводим 3, если culturekey=en, то выводим 12, если culturekey=fr, то выводим 21
Спасибо!
Комментарии: 15
я использую cниппет switch, он есть в официальном репозитории
как раз натолкнулся на него на англоязычном форуме, а как его вызвать в pdoResources?
[[pdoResources?
&parents=`[!switch? &get=`[[++ cultureKey]]` &c1=`ru` &do1=`3` &c2=`en` &do2=`12` &c3=`fr` &do3=`21` ]]`
…
]]
так?
[[pdoResources?
&parents=`[!switch? &get=`[[++ cultureKey]]` &c1=`ru` &do1=`3` &c2=`en` &do2=`12` &c3=`fr` &do3=`21` ]]`
…
]]
так?
почти, вызывайте pdoResources некешированным
[[!pdoResources?
&parents=`[[!switch? &get=`[[++cultureKey]]` &c1=`ru` &do1=`3` &c2=`en` &do2=`12` &c3=`fr` &do3=`21` ]]`
…
]]
спасибо!
С 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
])}
Там можно опустить присваивание переменной $cult значение ключа языка. Самое забавное, что этот вариант из предложенных здесь самый превосходный и универсальный, но пользоваться Феномом люди почему то боятся, чтоли. =)
я бы тоже побоялся, тут видимо надо знать php, а его не знаю, поэтому мне вариант с модификатором и switch намного понятнее
все рано спасибо за ответ
все рано спасибо за ответ
Кому надо, тот во всю пользуется)
Если еще поизвращаться, то можно вынести присваивание в какой-нибудь глобальный чанк. Тогда переменными можно оперировать везде где вздумается и править только в одном месте придется, если понадобится.
Если еще поизвращаться, то можно вынести присваивание в какой-нибудь глобальный чанк. Тогда переменными можно оперировать везде где вздумается и править только в одном месте придется, если понадобится.
Эт как? Через {insert 'chunk'}?
Например, такой базовый шаблон:
В Head или Navbar прописать:
А в Content и Footer уже использовать:
Однако, стоит проверить детальнее на практике. В теории должно работать.
<!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'
])}
Однако, стоит проверить детальнее на практике. В теории должно работать.
Не то, что боятся просто некоторым лень его изучить) или нету времени на это дело)
сделать свой сниппет с условием
Как вариант, чтобы в случае изменений не носиться по всем шаблонам и не изменять/добавлять условия, вы можете по аналогии с cultureKey добавлять для каждого контекста нужный параметр и выводить просто его.
Например:
web (опции контекста)
— news_container = 1
— gallery_container = 7
— …
system
— news_container = 28
— gallery_container = 47
— …
И в вызове сниппета просто вызывать соответствующий ключ:
Например:
web (опции контекста)
— news_container = 1
— gallery_container = 7
— …
system
— news_container = 28
— gallery_container = 47
— …
И в вызове сниппета просто вызывать соответствующий ключ:
&parents=`[[++news_container]]`
вот это интересное решение, спасибо!
интересно какое из всех решений получается быстрее
интересно какое из всех решений получается быстрее
Это самый правильный вариант. При условии, что все крутится на контекстах.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.