Запуск сниппета в инлайн чанках
Готовый модификатор для запуска сниппетов в @INLINE чанках.
Сниппет принимает JSON массив с параметрами, главный из них snippetRun — название запускаемого сниппета. Все остальные параметры распарсиваются и передаются непосредственно запускаемому сниппету, попутно заменяя $input плейсхолдером на котором вызывается модификатор, т.е. в данном примере строка
$options = str_replace('$input',$input,$options);
$options = json_decode($options,true);
return $modx->runSnippet($options['snippetRun'],$options);
Пример вызова:{{+option.sizes:inlineSnippetRun=`{
"snippetRun":"pdoResources",
"class":"msSizes",
"tpl":"@INLINE {{+sizes}}",
"where":"{\"id:IN\":[$input]}",
"select":"{\"msSizes\":\"msSizes.size as sizes\"}",
"sortby":"",
"limit":1,
"showLog":0
}`
}}
Как работает?Сниппет принимает JSON массив с параметрами, главный из них snippetRun — название запускаемого сниппета. Все остальные параметры распарсиваются и передаются непосредственно запускаемому сниппету, попутно заменяя $input плейсхолдером на котором вызывается модификатор, т.е. в данном примере строка
"where":"{\"id:IN\":[$input]}",
эквивалентна строке"where":"{\"id:IN\":[{{+option.sizes}}]}",
Будьте внимательны: JSON не любит отсутствие запятой между элементами, а также я никак не мог передать знак "=" для условия where, решил просто заменить его на «IN». Комментарии: 5
Выглядит не очень. Гораздо лучше засунуть это в нормальный чанк.
Честно говоря, вообще непонятно зачем так извращаться.
ладно вам, я же использую jade, и обычно ни одного чанка в проектах
То есть вот этот ужас еще внутри инлайн-чанка, который внутри вызова другого сниппета? Соболезнования тому, кому придется это поддерживать)
в общем — да. это вызов сниппета msCart с подтягиванием заголовков размеров из отдельной таблицы.
В корзине у нас обычно 2-3, ну максимум 15 товаров, тут больше решает наглядность решения, чем скорость работы.
В корзине у нас обычно 2-3, ну максимум 15 товаров, тут больше решает наглядность решения, чем скорость работы.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.