/** Datei: plugins/templater/hooks/templater/render.php **/ * @copyright 2023 Sparky@ARUNOX * @version 1.0.0 * @since 1.0.0 File is created */ use ARUNOX\Core\Hooks; use ARUNOX\Compiler\Templater; Hooks::add( 'templater.render::controlRules', function( $rules ) { $rules[] = [ 'pattern' => '/\[foreach\s+each="(.*?)"\s+as="(.*?)"\]/i', 'replace' => '' ]; $rules[] = [ 'pattern' => '/\[\/foreach\]/i', 'replace' => '' ]; $rules[] = [ 'pattern' => '/\[foreach\s+([^\s]+)\s+as\s+([^\]]+)\]/i', 'replace' => '' ]; $rules[] = [ 'pattern' => '/\[if\s+condition="(.*?)"\]/i', 'replace' => '' ]; $rules[] = [ 'pattern' => '/\[elseif\s+condition="(.*?)"\]/i', 'replace' => '' ]; $rules[] = [ 'pattern' => '/\[else\]/i', 'replace' => '' ]; $rules[] = [ 'pattern' => '/\[\/if\]/i', 'replace' => '' ]; $rules[] = [ 'pattern' => '/\[while\s+condition="(.*?)"\]/i', 'replace' => '' ]; $rules[] = [ 'pattern' => '/\[\/while\]/i', 'replace' => '' ]; return $rules; }); Hooks::add( 'templater::shortcodes', function( $shortcodes ) { $shortcodes["asset/"] = function( $attrs, $content, $data ) { if( $attrs["id"] ) { $attrs["img"] = "https://safespace.plus/uploads/ssp_trofast.png?_=1722332752"; } return ''; }; return $shortcodes; }); Hooks::add( 'templater::shortcodes', function( $shortcodes ) { $shortcodes["foreach"] = function( $attrs, $content, $data ) { $each = $attrs["each"] ?? null; $as = $attrs["as"] ?? null; // show( htmlentities($content), $attrs ); if( !$each || !$as ) return ""; $as = ltrim( $as, "$" ); $each = ltrim( $each, "$" ); $items = Templater::resolveVariable( $each, $data, TRUE ); // show( $each, $items, $attrs ); if( !is_array( $items ) ) return ""; $output = ""; foreach( $items as $item ) { $scope = array_merge( $data, [ $as => $item ] ); $output .= Templater::render( $content, $scope ); } return $output; }; $shortcodes["if"] = function( $attrs, $content, $data ) { $mainExpr = $attrs['condition'] ?? $attrs[0] ?? NULL; if( !$mainExpr ) return ""; // show( $content ); $blocks = []; $content = Templater::tokenize( $content ); $content = Templater::parse( $content ); if( !function_exists( "templaterShortcodeFilterContent" ) ) { function templaterShortcodeFilterContent( $nodes ) { return array_filter( $nodes, fn( $item ) => !key_exists( "name", $item ) || !in_array( $item["name"], ["elseif", "else"] ) ); } } if( !function_exists( "templaterShortcodeCreateBlcoks" ) ) { function templaterShortcodeCreateBlcoks( $nodes, &$blocks = [] ) { $nodes = array_filter( $nodes, fn( $item ) => key_exists( "name", $item ) && in_array( $item["name"], ["elseif", "else"] ) ); foreach( $nodes as $node ) { if( $node["type"] !== Templater::TOKEN_TYPE_NODE ) continue; $blocks[] = [ "type" => $node["name"], "expr" => implode( " ", $node["attrs"] ), "content" => templaterShortcodeFilterContent( $node["children"] ), ]; $blocks = templaterShortcodeCreateBlcoks( $node["children"], $blocks ); } return $blocks; } } $blocks[] = [ "type" => "if", "expr" => implode( " ", $attrs ), "content" => templaterShortcodeFilterContent( $content ), ]; $blocks = templaterShortcodeCreateBlcoks( $content, $blocks ); foreach( $blocks as $block ) { if( $block["type"] === 'else' ) { return Templater::render( $block['content'], $data); } if( Templater::evaluateCondition( $block['expr'], $data) ) { return Templater::render($block['content'], $data); } } }; $shortcodes["blockquote"] = '
[$content!]
'; $shortcodes["button"] ='[$content!]'; $shortcodes["bi/"] = ''; $shortcodes["strong"] = '[$content]'; $shortcodes["spacer/"] = '
'; $shortcodes["mediatext"] = function( $attrs, $content, $data ) { $attrs["img"] = $attrs["img"] ?? NULL; $attrs["assets"] = explode( ",", $attrs["asset"] ?? "" ); // [asset id=$asset class="[$attrs.asset-class-{$index} ?? $attrs.asset-class ?? \'\']" style="[$attrs..asset-style-{$index} ?? $attrs.asset-style ?? \'\']"] return Templater::render('
[if $attrs.img || $attrs.assets ]
[if $attrs.assets ] [foreach each=$attrs.assets as=$asset] [asset id=$asset class="$attrs.asset-class-0 ?? \'\'"] [/foreach] [elseif $attrs.img] [/if]
[/if] [if $content]
[if $attrs.title]

[$attrs.title!]

[/if] [$content!]
[/if]
', array_merge( $data, [ "attrs" => $attrs, "content" => $content, ])); }; return $shortcodes; });