В общем, я решил тоже поучаствовать в этом эксперименте, и написать свой парсер на замену. Облегчить его на 100% не получается в любом случае. Во-первых, MODX довольно активно использует его отдельные методы, так что как минимум пустые методы надо прописать. Во-вторых, в тех же шаблонах у нас в параметрах есть необходимые параметры, типа tpl или phptemplates.non-cached, и чтобы они учитывались в системе, пришлось один метод более живым оставить. Вот такой класс у меня получился: <?php
class modWebParser { /** * A reference to the modX instance * @var modX $modx */
public $modx= null;
/**
* @param xPDO $modx A reference to the modX|xPDO instance
*/
function __construct(xPDO &$modx) {
$this->modx =& $modx;
}
public function setProcessingElement($arg = null) {
}
public function processElementTags($parentTag, & $content,
$processUncacheable= false, $removeUnprocessed= false, $prefix= "[[",
$suffix= "]]", $tokens= array (), $depth= 0) {
return $processed;
}
public function collectElementTags($origContent, array &$matches, $prefix= '[[', $suffix= ']]') {
return 0;
}
/**
* Parses an element/tag property string or array definition.
*
* @param string $propSource A valid property string or array source to
* parse.
* @return array An associative array of property values parsed from
* the property string or array definition.
*/
public function parseProperties($propSource) {
$properties= array ();
if (!empty ($propSource)) {
if (is_string($propSource)) {
$properties = $this->parsePropertyString($propSource, true);
} elseif (is_array($propSource)) {
foreach ($propSource as $propName => $property) {
if (is_array($property) && array_key_exists('value', $property)) {
$properties[$propName]= $property['value'];
} else {
$properties[$propName]= $property;
}
}
}
}
return $properties;
}
public function isProcessingUncacheable() {
$result = false;
return $result;
}
public function isRemovingUnprocessed() {
$result = false;
return $result;
}
public function parsePropertyString($string, $valuesOnly = false) {
$properties = array();
return $properties;
}
} Закинул его в core/components/modxsite/model/modxsite/model/modwebparser.class.php В настройках контекста web прописал:
parser_class = modWebParser
parser_class_path = {core_path}components/modxsite/model/modxsite/ В целом все работает, и API MODX-а получается использовать, к примеру {$modx->getOption('site_url')} Попробуйте установить ShopModxBox и погонять с этим парсером и без него. Но здесь надо учитывать, что многое не будет работать в принципе. Лично мне кажется, что овчинка не будет стоить выделки. К примеру, мы не сможем использовать некешируемые блоки через [[!smarty?tpl=....
]] и т.п. Конечно же мы можем просто отрабатывать шаблоны каждый раз, включив кеширование самого Smarty, но это гораздо более заморочено.