Запуск сниппета в инлайн чанках

Готовый модификатор для запуска сниппетов в @INLINE чанках.

$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».
Алексей
16 апреля 2015, 18:19
modx.pro
2
2 182
-2

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

Василий Наумкин
16 апреля 2015, 21:29
0
Выглядит не очень. Гораздо лучше засунуть это в нормальный чанк.
    Сергей Фещуков
    17 апреля 2015, 05:47
    0
    Честно говоря, вообще непонятно зачем так извращаться.
      Алексей
      17 апреля 2015, 08:11
      0
      ладно вам, я же использую jade, и обычно ни одного чанка в проектах
        Виталий Киреев
        17 апреля 2015, 09:04
        +1
        То есть вот этот ужас еще внутри инлайн-чанка, который внутри вызова другого сниппета? Соболезнования тому, кому придется это поддерживать)


          Алексей
          17 апреля 2015, 10:30
          0
          в общем — да. это вызов сниппета msCart с подтягиванием заголовков размеров из отдельной таблицы.
          В корзине у нас обычно 2-3, ну максимум 15 товаров, тут больше решает наглядность решения, чем скорость работы.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          5