/** 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"] = '