From f1b79e6ddd004b36b4a46c6bc120f687cdf5bc59 Mon Sep 17 00:00:00 2001 From: touol Date: Thu, 14 Nov 2019 23:09:10 +0700 Subject: [PATCH] MODX_SOFT_MODE for MODX, when compiling a Fenom tag error, enables the output of this tag as is. To inverse JS / JSON. --- src/Fenom/Template.php | 44 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/src/Fenom/Template.php b/src/Fenom/Template.php index 0e060a4..12b7b19 100644 --- a/src/Fenom/Template.php +++ b/src/Fenom/Template.php @@ -123,7 +123,9 @@ class Template extends Render * @var int crc32 of the template name */ private $_crc = 0; - + + private $_log = ""; //for MODX log in MODX_SOFT_MODE + /** * @param Fenom $fenom Template storage * @param int $options @@ -137,7 +139,24 @@ class Template extends Render $this->_filters = $this->_fenom->getFilters(); $this->_tag_filters = $this->_fenom->getTagFilters(); } - + + /** + * Add log for MODX log in MODX_SOFT_MODE + * @param string $message + */ + private function log($message) + { + $this->_log .= $message."\r\n"; + } + + /** + * Get log for MODX log in MODX_SOFT_MODE + */ + public function getError() + { + return $this->_log; + } + /** * Get tag stack size * @return int @@ -271,9 +290,24 @@ class Template extends Render if ($tokens->isIncomplete()) { // all strings finished? $need_more = true; } else { - $this->_appendCode($this->parseTag($tokens), '{' . $tag . '}'); // start the tag lexer - if ($tokens->key()) { // if tokenizer have tokens - throws exceptions - throw new CompileException("Unexpected token '" . $tokens->current() . "' in {$this} line {$this->_line}, near '{" . $tokens->getSnippetAsString(0, 0) . "' <- there", 0, E_ERROR, $this->_name, $this->_line); + $soft_mode = $this->_options & Fenom::MODX_SOFT_MODE; + if($soft_mode){ + try{ + $code = $this->parseTag($tokens); + if ($tokens->key()) { // if tokenizer have tokens - throws exceptions + throw new CompileException("Unexpected token '" . $tokens->current() . "' in {$this} line {$this->_line}, near '{" . $tokens->getSnippetAsString(0, 0) . "' <- there", 0, E_ERROR, $this->_name, $this->_line); + } + $this->_appendCode($code, '{' . $tag . '}'); // start the tag lexer + }catch (\Exception $e){ + $this->_appendText('{' . $tag . '}'); + $this->log($e->getMessage()); + } + }else{ + $code = $this->parseTag($tokens); + $this->_appendCode($code, '{' . $tag . '}'); // start the tag lexer + if ($tokens->key()) { // if tokenizer have tokens - throws exceptions + throw new CompileException("Unexpected token '" . $tokens->current() . "' in {$this} line {$this->_line}, near '{" . $tokens->getSnippetAsString(0, 0) . "' <- there", 0, E_ERROR, $this->_name, $this->_line); + } } } } while ($need_more);