Fi1osof 31 июля 2013 0 0
Интересный вопрос прозвучал на Хабре: «Может ли один спиппет быть продолжением другого по php коду?».

Вообще это фишка интересная. К примеру вы хотите вызвать некий сниппет, к примеру [[mySnippet?param1=`var1` ¶ms2=`var2`]], а внутри этого снипета есть вызовы других сниппетов и/или чанков, в которые надо передать изначальные параметры.

И вот полезная информация:

Как и в любом элементе (чанк, сниппет и т.п.), внутри сниппета есть параметр $scriptProperties. Он как раз и содержит переданные параметры.

Вы его можете передать как аргумент в последующий сниппет, к примеру внутри своего сниппета вызвать $modx->runSnippet($name, $scriptProperties); (и так сколько угодно вложенностей.). При этом по ходу можно переопределять и/или дополнять $scriptProperties.

Много ясностей внесет кеш-функция тестового сниппета:
<?php
function elements_modsnippet_35($scriptProperties= array()) {
    global $modx;
    // Если переданный параметр - массив
    if (is_array($scriptProperties)) {
        //  "Распаковываем" этот массив, преобразуя его элементы в php-параметры
        // В нашем случае это будут $param1='var1'; и $param2='var2';
         extract($scriptProperties, EXTR_SKIP);
    }
    // Можем вывести результат, чтобы убедиться, что это массив параметров 
    print_R($scriptProperties); 
    exit;    // exit для  отладки, и убираем, чтобы продолжить код

    // Передаем  параметры дальше
    if(empty($tpl)){
        return $modx->runSnippet('nextSnippet', $scriptProperties);
    }
    else{
        return $modx->getChunk($tpl, $scriptProperties);
    }
}
0 комментариев
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.