X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Ftemplate%2Fmenu%2Fclass_MenuTemplateEngine.php;h=e11548fb5f7b5bbf698f7b32c266cbc8d024988c;hp=4f1dd50dd2baed10de46227287fd4e644ba7d6ce;hb=1021cd030d57d1b50a4fa57694b7f96339e3eafd;hpb=c3021952494266e05bfa9046baf9bcd11bfe7d13;ds=sidebyside diff --git a/inc/classes/main/template/menu/class_MenuTemplateEngine.php b/inc/classes/main/template/menu/class_MenuTemplateEngine.php index 4f1dd50d..e11548fb 100644 --- a/inc/classes/main/template/menu/class_MenuTemplateEngine.php +++ b/inc/classes/main/template/menu/class_MenuTemplateEngine.php @@ -57,6 +57,44 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla 'anchor-href', ); + /** + * Variables for a menu entry + */ + private $menuEntryVariables = array( + // List entry + 'entry_id', + // Anchor + 'anchor-id', + 'anchor-text', + 'anchor-title', + 'anchor-href', + ); + + /** + * Variables for a menu block + */ + private $menuBlockVariables = array( + // Title + 'title_id', + 'title_class', + 'title_text', + // Content is taken from menuEntries + // Footer + 'footer_id', + 'footer_class', + 'footer_text', + ); + + /** + * Rendered menu entries + */ + private $menuEntries = array(); + + /** + * Rendered menu blocks + */ + private $menuBlocks = array(); + /** * Menu instance */ @@ -652,6 +690,9 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla private function finishEntry () { // Pop the last entry $this->getStackInstance()->popNamed('current_node'); + + // Render this menu entry + $this->renderMenuEntry(); } /** @@ -662,6 +703,9 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla private function finishBlock () { // Pop the last entry $this->getStackInstance()->popNamed('current_node'); + + // Render this menu block + $this->renderMenuBlock(); } /** @@ -714,6 +758,76 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla $this->getStackInstance()->popNamed('current_node'); } + /** + * Renders this menu entry, as every block all variables got overwritten + * with data from next entry. + * + * @todo 'anchor_href' may needs expanding with full URL + * @return void + */ + private function renderMenuEntry () { + // Prepare template engine + $templateInstance = $this->prepareTemplateInstance(); + + // Load menu entry template + $templateInstance->loadCodeTemplate('menu_entry'); + + // Copy all variables over to it + foreach ($this->menuEntryVariables as $variableName) { + // Copy variable + $variableValue = $this->readVariable($variableName); + + // ... into the instance + $templateInstance->assignVariable($variableName, $variableValue); + } // END - foreach + + // Compile template + variables + $templateInstance->compileTemplate(); + $templateInstance->compileVariables(); + + // Remember it here + $this->menuEntries[$this->readVariable('entry_id')] = $templateInstance->getRawTemplateData(); + } + + /** + * Renders this menu block, as next block all data is overwritten with + * next block. + * + * @return void + */ + private function renderMenuBlock () { + // Init block content + $blockContent = implode('', $this->menuEntries); + + // Prepare template engine + $templateInstance = $this->prepareTemplateInstance(); + + // Load menu entry template + $templateInstance->loadCodeTemplate('menu_block'); + + // Copy all variables over to it + foreach ($this->menuBlockVariables as $variableName) { + // Copy variable + $variableValue = $this->readVariable($variableName); + + // ... into the instance + $templateInstance->assignVariable($variableName, $variableValue); + } // END - foreach + + // Assign block content + $templateInstance->assignVariable('block_content', $blockContent); + + // Compile template + variables + $templateInstance->compileTemplate(); + $templateInstance->compileVariables(); + + // Remember it here + array_push($this->menuBlocks, $templateInstance->getRawTemplateData()); + + // Reset rendered menu entries array + $this->menuEntries = array(); + } + /** * Getter for menu cache file (FQFN) *