diff --git a/events.xml b/events.xml index 95423a17b34c08022e76e847bcd98e8522df0012..384338ea573ed9b55821b071aafdc849adbd5695 100644 --- a/events.xml +++ b/events.xml @@ -4,4 +4,5 @@ <event on="onSmartyInit" fire="\QUI\Bricks\Events::onSmartyInit"/> <event on="onPackageSetup" fire="\QUI\Bricks\Events::onPackageSetup"/> <event on="onDeleteProject" fire="\QUI\Bricks\Events::onDeleteProject"/> + <event on="onOutputParseEnd" fire="\QUI\Bricks\Events::onOutputParseEnd"/> </events> diff --git a/src/QUI/Bricks/Events.php b/src/QUI/Bricks/Events.php index 9542424892ddec021ea10da29effb78a0b1e8517..13f45d27209b6a2c917f1d573b5feb48e160c0e2 100644 --- a/src/QUI/Bricks/Events.php +++ b/src/QUI/Bricks/Events.php @@ -301,4 +301,59 @@ public static function onPackageSetup(QUI\Package\Package $Package) QUI\System\Log::writeException($Exception); } } + + //region output filter + + /** + * @param $content + */ + public static function onOutputParseEnd(&$content) + { + if (\strpos($content, '{{brick id=') === false) { + return; + } + + // search css files + $content = \preg_replace_callback( + '#{{brick ([^}}]*)}}#', + ['QUI\Bricks\Events', "outputParsing"], + $content + ); + } + + /** + * @param $match + */ + public static function outputParsing($match) + { + $params = $match[0]; + $params = \str_replace('{{brick', '', $params); + $params = \trim($params, '}}'); + $params = \trim($params); + $params = \explode(' ', $params); + + $attributes = []; + + foreach ($params as $param) { + $a = \explode('=', $param); + + $attributes[$a[0]] = $a[1]; + } + + if (!isset($attributes['id'])) { + return $match[0]; + } + + try { + $brickId = (int)$attributes['id']; + $Brick = Manager::init()->getBrickById($brickId); + + return $Brick->create(); + } catch (\Exception $Exception) { + } + + return $match[0]; + } + + //endregion }