Передача PropertySet в шаблоны Smarty

Предлагаю для большего удобства в использовании modxSmarty добавить в функции расширений processor, chunk и snippet возможность передавать в них стандартные наборы параметров.

На данный момент это делается в коде: {snippet name=«Wayfinder» params=«startId=12&outerClass=myclass»} или сначала формируем массив или строку в JSON и передаем в функцию.

Но ведь в MODX есть прекрасный механизм наборов параметров с удобным интерфейсом в админке. Ведь удобнее было бы написать так: {snippet name=«Wayfinder» propset=«set1,set2,set3» params=«some_params»} где set1,set2,… — это наборы параметров PropertySet.

Для того, чтобы это добавить требуется внести некоторые изменения в функции:

  • core/components/modxsmarty/smarty_plugins/function.chunk.php
  • core/components/modxsmarty/smarty_plugins/function.snippet.php
  • core/components/modxsmarty/smarty_plugins/function.processor.php

Во всех этих функциях нужно сразу после блока

if(isset($params['params'])){
        $scriptProperties = $params['params'];
        // Check if String
        if(is_string($scriptProperties)){
            $scriptProperties = $modx->parser->parseProperties($scriptProperties);
        }
    }

добавить блок

if (isset($params['propset'])) {  //есть параметр propset
        $p=$params['propset']; 
        $psets=explode(" ,@",$p); //разобьем на составляющие
        $sp=array();
        foreach($psets as $p) {
         $props=$modx->getObject('modPropertySet',array('name'=>$p))->getProperties();
         if(is_array($props)){
            $sp=$props+$sp; //наборы параметров, указанные правее в списке, более значимы
         }
        $scriptProperties+=$sp; //добавим свойства
        }
    }

И мы имеем все удобства пользования наборами параметров.