В общем, я решил тоже поучаствовать в этом эксперименте, и написать свой парсер на замену. Облегчить его на 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, но это гораздо более заморочено.