Часто приходится запиперивать оформление вывода в сниппет.
а что делать, если надо по-быстрому вывод переделать? или если вообще требуется сразу несколько выводов да ещё нескольких переменных?
я тут поковырял документацию, сниппеты порассматривал... в общем, думаю, это будет полезно для чайников (типа меня).
ниже примитивная реализация:)
к примеру, сниппет чё-то там "делает", в результате чего имеем:
$snatch_1 = "кусочек_1";
$snatch_2 = "кусочек_2";
$snatch_3 = "кусочек_3";
есть парочка способов вывести кусочки в определённом формате из сниппета.
можно так:
$output .=<<<EOD
<h1>$snatch_1</h1>
<h2>$snatch_2</h2>
<h3>$snatch_3</h3>
EOD;
echo $output;
можно так:
$output .= "<h1>".$snatch_1."</h1><h2>".$snatch_2."</h2><h3>".$snatch_3."</h3>";
echo $output;
элементарный php, хотя я и здесь мог ошибиться:)
а можно сделать так:
создаём chunk, в который впихиваем следующее:
<h1>[vr_1+]</h1>
<h2>[vr_2+]</h2>
<h3>[vr_3+]</h3>
называем его как-нить типа chunk_1.
внутри сниппета делаем следующее:
/*тут чего-то сниппет делает, вычисляя нам значения кусочков*/
$snatch_1 = "кусочек_1";
$snatch_2 = "кусочек_2";
$snatch_3 = "кусочек_3"; // пусть будет так:)
$modx->setPlaceholder('snatch_1', $snatch_1); // это мы определили, что $snatch_1 выводить в поле [+snatch_1+] в чанке
$modx->setPlaceholder('snatch_2', $snatch_2);
$modx->setPlaceholder('snatch_3', $snatch_3);
$output = $modx->getChunk(chunk_1); // это мы заполучили чанк и впихнули туда кусочки
return $output;
чанков может быть несколько, с разными именами, понятное дело... с разными выводами.
делается так:
вставляем в страницу сниппет [[snippet_name?chunk_name=`chunk_1`]]
внутри сниппета делаем следующее:
$output = $modx->getChunk($chunk_name); // получаем внешний параметр
понятно, что если надо сделать другой вывод, то создаём chunk_2, впипериваем [[snippet_name?chunk_name=`chunk_2`]] и всё.
я не стал усложнять, я опустил задание дефолтного чанка и т.д. и т.п., т.е., если вы не задали чанк, то и вывода не будет.
я могу и ошибаться где-то, поправки принимаются на ура, я просто изложил принцип, сам так делаю:)
UPD: особенность!!!
есть одна неудобная особенность, выше я внёс корректировки.
суть: задание плейсхолдеров должно происходить после вычисления функций, то есть, cначала получаем значение $snatch, затем задаём для него место $modx->setPlaceholder(’snatch’, $snatch), а потом вызываем чанк $output = $modx->getChunk($chunk)
не слишком удобно, ибо нельзя тупо определить в начале сниппета местечки под каждую функцию.
не знаю, почему так, это вопрос к php-программерам, надо ковырнуть парсер.
ещё сейчас озабочен, как теперь вывод в цикле производить?