X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Ftemplate%2Fmenu%2Fclass_MenuTemplateEngine.php;h=62997fa86258deb1507480cd99bc8a86ef558af2;hp=fdcaf207a81cf70a74892afa27fd279c5bb3bf35;hb=51b361bbb129164973badaa4480c1aaa2306685d;hpb=2c7ab1828223d7cf023ffec9468e859f8c5ea5d8 diff --git a/inc/classes/main/template/menu/class_MenuTemplateEngine.php b/inc/classes/main/template/menu/class_MenuTemplateEngine.php index fdcaf207..62997fa8 100644 --- a/inc/classes/main/template/menu/class_MenuTemplateEngine.php +++ b/inc/classes/main/template/menu/class_MenuTemplateEngine.php @@ -2,11 +2,11 @@ /** * A Menu template engine class * - * @author Roland Haeder + * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 Core Developer Team + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team * @license GNU GPL 3.0 or any newer version - * @link http://www.ship-simu.org + * @link http://www.shipsimu.org * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -35,9 +35,10 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla private $subNodes = array( 'entry-list', 'entry', + 'entry-id', 'entries-content', - 'header', - 'footer', + 'block-header', + 'block-footer', 'footer-id', 'footer-class', 'footer-text', @@ -56,10 +57,48 @@ 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 */ - private $menuInstance = null; + private $menuInstance = NULL; /** * Current main node @@ -67,9 +106,9 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla private $curr = array(); /** - * Content from depency + * Content from dependency */ - private $depencyContent = array(); + private $dependencyContent = array(); /** * Protected constructor @@ -84,9 +123,8 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla /** * Creates an instance of the class TemplateEngine and prepares it for usage * - * @param $appInstance A manageable application - * @param $menuInstance A RenderableMenu instance - * @return $tplInstance An instance of TemplateEngine + * @param $menuInstance A RenderableMenu instance + * @return $templateInstance An instance of TemplateEngine * @throws BasePathIsEmptyException If the provided $templateBasePath is empty * @throws InvalidBasePathStringException If $templateBasePath is no string * @throws BasePathIsNoDirectoryException If $templateBasePath is no @@ -94,54 +132,52 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla * @throws BasePathReadProtectedException If $templateBasePath is * read-protected */ - public final static function createMenuTemplateEngine (ManageableApplication $appInstance, RenderableMenu $menuInstance) { + public static final function createMenuTemplateEngine (RenderableMenu $menuInstance) { // Get a new instance - $tplInstance = new MenuTemplateEngine(); + $templateInstance = new MenuTemplateEngine(); - // Get language and file I/O instances from application - $langInstance = $appInstance->getLanguageInstance(); - $ioInstance = $appInstance->getFileIoInstance(); + // Get the application instance from registry + $applicationInstance = Registry::getRegistry()->getInstance('app'); // Determine base path - $templateBasePath = $tplInstance->getConfigInstance()->getConfigEntry('application_base_path') . $appInstance->getRequestInstance()->getRequestElement('app') . '/'; + $templateBasePath = $templateInstance->getConfigInstance()->getConfigEntry('application_base_path') . $applicationInstance->getRequestInstance()->getRequestElement('app') . '/'; // Is the base path valid? if (empty($templateBasePath)) { // Base path is empty - throw new BasePathIsEmptyException($tplInstance, self::EXCEPTION_UNEXPECTED_EMPTY_STRING); + throw new BasePathIsEmptyException($templateInstance, self::EXCEPTION_UNEXPECTED_EMPTY_STRING); } elseif (!is_string($templateBasePath)) { // Is not a string - throw new InvalidBasePathStringException(array($tplInstance, $templateBasePath), self::EXCEPTION_INVALID_STRING); + throw new InvalidBasePathStringException(array($templateInstance, $templateBasePath), self::EXCEPTION_INVALID_STRING); } elseif (!is_dir($templateBasePath)) { // Is not a path - throw new BasePathIsNoDirectoryException(array($tplInstance, $templateBasePath), self::EXCEPTION_INVALID_PATH_NAME); + throw new BasePathIsNoDirectoryException(array($templateInstance, $templateBasePath), self::EXCEPTION_INVALID_PATH_NAME); } elseif (!is_readable($templateBasePath)) { // Is not readable - throw new BasePathReadProtectedException(array($tplInstance, $templateBasePath), self::EXCEPTION_READ_PROTECED_PATH); + throw new BasePathReadProtectedException(array($templateInstance, $templateBasePath), self::EXCEPTION_READ_PROTECED_PATH); } - // Get configuration instance - $configInstance = FrameworkConfiguration::getInstance(); - // Set the base path - $tplInstance->setTemplateBasePath($templateBasePath); - - // Set the language and IO instances - $tplInstance->setLanguageInstance($langInstance); - $tplInstance->setFileIoInstance($ioInstance); + $templateInstance->setTemplateBasePath($templateBasePath); // Set template extensions - $tplInstance->setRawTemplateExtension($configInstance->getConfigEntry('raw_template_extension')); - $tplInstance->setCodeTemplateExtension($configInstance->getConfigEntry('menu_template_extension')); + $templateInstance->setRawTemplateExtension($templateInstance->getConfigInstance()->getConfigEntry('raw_template_extension')); + $templateInstance->setCodeTemplateExtension($templateInstance->getConfigInstance()->getConfigEntry('menu_template_extension')); // Absolute output path for compiled templates - $tplInstance->setCompileOutputPath($configInstance->getConfigEntry('base_path') . $configInstance->getConfigEntry('compile_output_path')); + $templateInstance->setCompileOutputPath($templateInstance->getConfigInstance()->getConfigEntry('base_path') . $templateInstance->getConfigInstance()->getConfigEntry('compile_output_path')); // Set the menu instance - $tplInstance->setMenuInstance($menuInstance); + $templateInstance->setMenuInstance($menuInstance); + + // Init a variable stacker + $stackInstance = ObjectFactory::createObjectByConfiguredName('menu_stacker_class'); + + // Set it + $templateInstance->setStackInstance($stackInstance); // Return the prepared instance - return $tplInstance; + return $templateInstance; } /** @@ -241,7 +277,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla * @return void * @throws XmlNodeMismatchException If current main node mismatches the closing one */ - public function endElement ($resource, $nodeName) { + public function finishElement ($resource, $nodeName) { // Make all lower-case $nodeName = strtolower($nodeName); @@ -275,308 +311,542 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla // Is this string empty? if (empty($characters)) { // Then skip it silently - return false; + return; } // END - if - // Unfinished work! - $this->partialStub('Handling extra characters is not yet supported! length='.strlen($characters)); + // Assign the found characters to variable and use the last entry from + // stack as the name + parent::assignVariable($this->getStackInstance()->getNamed('current_node'), $characters); } /** - * Handles the template depency for given node + * Handles the template dependency for given node * - * @param $node The node we should load a depency template - * @param $templateDepency A template to load to satisfy depencies + * @param $node The node we should load a dependency template + * @param $templateDependency A template to load to satisfy dependencies * @return void */ - private function handleTemplateDepency ($node, $templateDepency) { - // Is the template depency set? - if ((!empty($templateDepency)) && (!isset($this->depencyContent[$node]))) { + private function handleTemplateDependency ($node, $templateDependency) { + // Is the template dependency set? + if ((!empty($templateDependency)) && (!isset($this->dependencyContent[$node]))) { // Get a temporay menu template instance - $templateInstance = ObjectFactory::createObjectByConfiguredName('menu_template_class', array($this->getApplicationInstance(), $this->getMenuInstance())); + $templateInstance = ObjectFactory::createObjectByConfiguredName('menu_template_class', array($this->getMenuInstance())); // Then load it - $templateInstance->loadMenuTemplate($templateDepency); + $templateInstance->loadMenuTemplate($templateDependency); - // Get an XmlParser instance + // Parse the XML content $templateInstance->renderXmlContent(); - // Parse the template's content contents - $this->depencyContent[$node] = $templateInstance->getRawTemplateData(); + // Save the parsed raw content in our dependency array + $this->dependencyContent[$node] = $templateInstance->getRawTemplateData(); } // END - if } /** * Intializes the menu * - * @param $templateDepency A template to load to satisfy depencies + * @param $templateDependency A template to load to satisfy dependencies * @return void * @todo Add cache creation here */ - private function initMenu ($templateDepency = '') { + private function initMenu ($templateDependency = '') { // Get web template engine - $this->setTemplateInstance(ObjectFactory::createObjectByConfiguredName('web_template_class', array($this->getApplicationInstance()))); - - // Handle the depency template - $this->handleTemplateDepency('menu', $templateDepency); + $this->setTemplateInstance(ObjectFactory::createObjectByConfiguredName('html_template_class', array($this->getApplicationInstance()))); - // Load the header template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_global_start'); + // Handle the dependency template + $this->handleTemplateDependency('menu', $templateDependency); - // Set the variable group to page - $this->setVariableGroup('menu'); + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'menu'); + } - // Set its content in this template instance - $this->assignVariable('menu_start', $this->getTemplateInstance()->getRawTemplateData()); + /** + * Starts the menu entries + * + * @param $templateDependency A template to load to satisfy dependencies + * @return void + */ + private function startEntryList () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'entry-list'); } /** - * Finishes the menu + * Starts the menu block header * * @return void */ - private function finishMenu () { - // Load the header template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_global_end'); + private function startBlockHeader () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'block-header'); + } - // Set the variable group to page - $this->setVariableGroup('menu'); + /** + * Starts the menu block footer + * + * @return void + */ + private function startBlockFooter () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'block-footer'); + } - // Set its content in this template instance - $this->assignVariable('menu_end', $this->getTemplateInstance()->getRawTemplateData()); + /** + * Starts the menu property 'block-list' + * + * @return void + */ + private function startBlockList () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'block-list'); } /** - * Starts the menu entries by loading a (maybe) provided template depency + * Starts the menu property 'block' * - * @param $templateDepency A template to load to satisfy depencies * @return void */ - private function startEntryList ($templateDepency = '') { - // Handle the depency template - $this->handleTemplateDepency('entries', $templateDepency); + private function startBlock () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'block'); + } - // Load the header template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_entries_start'); + /** + * Starts the menu property 'title' + * + * @return void + */ + private function startTitle () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'title'); + } - // Set the variable group to page - $this->setVariableGroup('menu'); + /** + * Starts the menu property 'title-id' + * + * @return void + */ + private function startTitleId () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'title-id'); + } - // Set its content in this template instance - $this->assignVariable('entries_start', $this->getTemplateInstance()->getRawTemplateData()); + /** + * Starts the menu property 'title-class' + * + * @return void + */ + private function startTitleClass () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'title-class'); } /** - * Finishes the menu entries + * Starts the menu property 'title-text' * * @return void */ - private function finishEntryList () { - // Load the header template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_entries_end'); + private function startTitleText () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'title-text'); + } - // Set the variable group to page - $this->setVariableGroup('menu'); + /** + * Starts the menu property 'entry' + * + * @return void + */ + private function startEntry () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'entry'); + } - // Set its content in this template instance - $this->assignVariable('entries_end', $this->getTemplateInstance()->getRawTemplateData()); + /** + * Starts the menu property 'entry-id' + * + * @return void + */ + private function startEntryId () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'entry-id'); } /** - * Starts the menu header + * Starts the menu property 'anchor' * * @return void */ - private function startHeader () { - // Do we have a template instance? - if (is_null($this->getTemplateInstance())) { - // Init template instance for underlaying web templates - $templateInstance = ObjectFactory::createObjectByConfiguredName('web_template_class'); + private function startAnchor () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'anchor'); + } - // Set it in this template engine - $this->setTemplateInstance($templateInstance); - } // END - if + /** + * Starts the menu property 'anchor-id' + * + * @return void + */ + private function startAnchorId () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'anchor-id'); + } - // Load the header template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_header_start'); + /** + * Starts the menu property 'anchor-text' + * + * @return void + */ + private function startAnchorText () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'anchor-text'); + } - // Set the variable group to page - $this->setVariableGroup('menu'); + /** + * Starts the menu property 'anchor-title' + * + * @return void + */ + private function startAnchorTitle () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'anchor-title'); + } - // Set its content in this template instance - $this->assignVariable('header', $this->getTemplateInstance()->getRawTemplateData()); + /** + * Starts the menu property 'anchor-href' + * + * @return void + */ + private function startAnchorHref () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'anchor-href'); } /** - * Finishes the menu header + * Starts the menu property 'footer-id' * * @return void */ - private function finishHeader () { - // Load the header template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_header_end'); + private function startFooterId () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'footer-id'); + } - // Set the variable group to page - $this->setVariableGroup('menu'); + /** + * Starts the menu property 'footer-class' + * + * @return void + */ + private function startFooterClass () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'footer-class'); + } - // Set its content in this template instance - $this->assignVariable('header_end', $this->getTemplateInstance()->getRawTemplateData()); + /** + * Starts the menu property 'footer-text' + * + * @return void + */ + private function startFooterText () { + // Push the node name on the stacker + $this->getStackInstance()->pushNamed('current_node', 'footer-text'); } /** - * Starts the menu footer + * Finishes the title node by added another template to the menu * * @return void */ - private function startFooter () { - // Do we have a template instance? - if (is_null($this->getTemplateInstance())) { - // Init template instance for underlaying web templates - $templateInstance = ObjectFactory::createObjectByConfiguredName('web_template_class'); + private function finishTitle () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); + } - // Set it in this template engine - $this->setTemplateInstance($templateInstance); - } // END - if + /** + * Finishes the title-id node by + * + * @return void + */ + private function finishTitleId () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); + } - // Load the footer template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_footer_start'); + /** + * Finishes the title-class node + * + * @return void + */ + private function finishTitleClass () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); + } - // Set the variable group to page - $this->setVariableGroup('menu'); + /** + * Finishes the title-class node + * + * @return void + */ + private function finishTitleText () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); + } - // Set its content in this template instance - $this->assignVariable('footer', $this->getTemplateInstance()->getRawTemplateData()); + /** + * Finishes the footer-text node + * + * @return void + */ + private function finishFooterText () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); } /** - * Finishes the menu footer + * Finishes the footer-class node * * @return void */ - private function finishFooter () { - // Load the footer template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_footer_end'); + private function finishFooterClass () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); + } - // Set the variable group to page - $this->setVariableGroup('menu'); + /** + * Finishes the footer-id node + * + * @return void + */ + private function finishFooterId () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); + } - // Set its content in this template instance - $this->assignVariable('footer_end', $this->getTemplateInstance()->getRawTemplateData()); + /** + * Finishes the anchor-href node + * + * @return void + */ + private function finishAnchorHref () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); } /** - * Starts the menu property 'title' + * Finishes the anchor-title node * * @return void */ - private function startTitle () { - $this->partialStub('Cleared due to XML rewrite.'); + private function finishAnchorTitle () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); } /** - * Finishes the title node by added another template to the menu + * Finishes the anchor-text node * * @return void */ - private function finishTitle () { - $this->partialStub('Cleared due to XML rewrite.'); + private function finishAnchorText () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); } /** - * Starts the menu text + * Finishes the anchor-id node * * @return void */ - private function startText () { - // Do we have a template instance? - if (is_null($this->getTemplateInstance())) { - // Init template instance for underlaying web templates - $templateInstance = ObjectFactory::createObjectByConfiguredName('web_template_class'); + private function finishAnchorId () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); + } - // Set it in this template engine - $this->setTemplateInstance($templateInstance); - } // END - if + /** + * Finishes the anchor node + * + * @return void + */ + private function finishAnchor () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); + } - // Load the text template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_text_start'); + /** + * Finishes the entry-id node + * + * @return void + */ + private function finishEntryId () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); + } - // Set the variable group to page - $this->setVariableGroup('menu'); + /** + * Finishes the entry node + * + * @return void + */ + private function finishEntry () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); - // Set its content in this template instance - $this->assignVariable('text', $this->getTemplateInstance()->getRawTemplateData()); + // Render this menu entry + $this->renderMenuEntry(); } /** - * Finishes the menu text + * Finishes the block node * * @return void */ - private function finishText () { - // Load the text template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_text_end'); + private function finishBlock () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); - // Set the variable group to page - $this->setVariableGroup('menu'); + // Render this menu block + $this->renderMenuBlock(); + } - // Set its content in this template instance - $this->assignVariable('text_end', $this->getTemplateInstance()->getRawTemplateData()); + /** + * Finishes the block-list node + * + * @return void + */ + private function finishBlockList () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); } /** - * Starts the menu property 'entry' + * Finishes the menu entries * - * @param $id Id of the menu * @return void */ - private function startEntry ($id) { - // Set id as current - $this->curr['entry_id'] = $id; + private function finishEntryList () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); + } - // Load the entry template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_entry_' . $id . '_start'); + /** + * Finishes the menu block header + * + * @return void + */ + private function finishBlockHeader () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); + } - // Set the variable group to page - $this->setVariableGroup('menu'); + /** + * Finishes the menu block footer + * + * @return void + */ + private function finishBlockFooter () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); + } - // Set its content in this template instance - $this->assignVariable('entry_start_' . $this->curr['id'], $this->getTemplateInstance()->getRawTemplateData()); + /** + * Finishes the menu + * + * @return void + */ + private function finishMenu () { + // Pop the last entry + $this->getStackInstance()->popNamed('current_node'); } /** - * Finishes the entry node by added another template to the menu + * Renders this menu entry, as every block all variables got overwritten + * with data from next entry. * * @return void */ - private function finishEntry () { - // Load the entry template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_entry_' . $this->curr['entry_id'] . '_end'); + private function renderMenuEntry () { + // Prepare template engine + $templateInstance = $this->prepareTemplateInstance(); + + // Load menu entry template + $templateInstance->loadCodeTemplate('menu_entry'); - // Set the variable group to page - $this->setVariableGroup('menu'); + // Copy all variables over to it + foreach ($this->menuEntryVariables as $variableName) { + // Copy variable + $variableValue = $this->readVariable($variableName); - // Set its content in this template instance - $this->assignVariable('entry_end_' . $this->curr['id'], $this->getTemplateInstance()->getRawTemplateData()); + // Is the key 'anchor-href'? + if ($variableName == 'anchor-href') { + // Expand variable with URL then + $variableValue = '{?base_url?}/' . $variableValue; + } // END - if + + // ... 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(); } + /** - * Starts the menu property 'anchor' + * Renders this menu block, as next block all data is overwritten with + * next block. * - * @param $id Id of the anchor - * @param $link Link text of the anchor - * @param $title Link title of the anchor * @return void */ - private function startAnchor () { - $this->partialStub('Please implement this method.'); + 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(); } /** - * Finishes the anchor node by added another template to the menu + * "Getter" for menu content * - * @return void + * @return $menuContent Returned menu content */ - private function finishAnchor () { - $this->partialStub('Please implement this method.'); + public function getMenuContent () { + // Implode menuBlocks + $menuContent = implode('', $this->menuBlocks); + + // Clean variable + $this->menuBlocks = array(); + + // And return it + return $menuContent; } /** @@ -586,7 +856,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ public function getMenuCacheFqfn () { // Get the FQFN ready - $fqfn = sprintf("%s%s%s/%s.%s", + $fqfn = sprintf('%s%s%s/%s.%s', $this->getConfigInstance()->getConfigEntry('base_path'), $this->getGenericBasePath(), 'menus/_cache',