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=52ca89108422ada717671cbfaec105f1ca32aea4;hb=1021cd030d57d1b50a4fa57694b7f96339e3eafd;hpb=b4683952aea678cf8e45d95989176073961de136 diff --git a/inc/classes/main/template/menu/class_MenuTemplateEngine.php b/inc/classes/main/template/menu/class_MenuTemplateEngine.php index 52ca8910..e11548fb 100644 --- a/inc/classes/main/template/menu/class_MenuTemplateEngine.php +++ b/inc/classes/main/template/menu/class_MenuTemplateEngine.php @@ -4,7 +4,7 @@ * * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 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.shipsimu.org * @@ -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 */ @@ -133,10 +171,10 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla $templateInstance->setMenuInstance($menuInstance); // Init a variable stacker - $stackerInstance = ObjectFactory::createObjectByConfiguredName('menu_stacker_class'); + $stackInstance = ObjectFactory::createObjectByConfiguredName('menu_stacker_class'); // Set it - $templateInstance->setStackerInstance($stackerInstance); + $templateInstance->setStackInstance($stackInstance); // Return the prepared instance return $templateInstance; @@ -278,7 +316,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla // Assign the found characters to variable and use the last entry from // stack as the name - parent::assignVariable($this->getStackerInstance()->getNamed('current_node'), $characters); + parent::assignVariable($this->getStackInstance()->getNamed('current_node'), $characters); } /** @@ -314,13 +352,13 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function initMenu ($templateDependency = '') { // Get web template engine - $this->setTemplateInstance(ObjectFactory::createObjectByConfiguredName('web_template_class', array($this->getApplicationInstance()))); + $this->setTemplateInstance(ObjectFactory::createObjectByConfiguredName('html_template_class', array($this->getApplicationInstance()))); // Handle the dependency template $this->handleTemplateDependency('menu', $templateDependency); // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'menu'); + $this->getStackInstance()->pushNamed('current_node', 'menu'); } /** @@ -331,7 +369,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startEntryList () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'entry-list'); + $this->getStackInstance()->pushNamed('current_node', 'entry-list'); } /** @@ -341,7 +379,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startBlockHeader () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'block-header'); + $this->getStackInstance()->pushNamed('current_node', 'block-header'); } /** @@ -351,7 +389,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startBlockFooter () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'block-footer'); + $this->getStackInstance()->pushNamed('current_node', 'block-footer'); } /** @@ -361,7 +399,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startBlockList () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'block-list'); + $this->getStackInstance()->pushNamed('current_node', 'block-list'); } /** @@ -371,7 +409,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startBlock () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'block'); + $this->getStackInstance()->pushNamed('current_node', 'block'); } /** @@ -381,7 +419,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startTitle () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'title'); + $this->getStackInstance()->pushNamed('current_node', 'title'); } /** @@ -391,7 +429,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startTitleId () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'title-id'); + $this->getStackInstance()->pushNamed('current_node', 'title-id'); } /** @@ -401,7 +439,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startTitleClass () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'title-class'); + $this->getStackInstance()->pushNamed('current_node', 'title-class'); } /** @@ -411,7 +449,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startTitleText () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'title-text'); + $this->getStackInstance()->pushNamed('current_node', 'title-text'); } /** @@ -421,7 +459,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startEntry () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'entry'); + $this->getStackInstance()->pushNamed('current_node', 'entry'); } /** @@ -431,7 +469,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startEntryId () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'entry-id'); + $this->getStackInstance()->pushNamed('current_node', 'entry-id'); } /** @@ -441,7 +479,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startAnchor () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'anchor'); + $this->getStackInstance()->pushNamed('current_node', 'anchor'); } /** @@ -451,7 +489,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startAnchorId () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'anchor-id'); + $this->getStackInstance()->pushNamed('current_node', 'anchor-id'); } /** @@ -461,7 +499,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startAnchorText () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'anchor-text'); + $this->getStackInstance()->pushNamed('current_node', 'anchor-text'); } /** @@ -471,7 +509,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startAnchorTitle () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'anchor-title'); + $this->getStackInstance()->pushNamed('current_node', 'anchor-title'); } /** @@ -481,7 +519,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startAnchorHref () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'anchor-href'); + $this->getStackInstance()->pushNamed('current_node', 'anchor-href'); } /** @@ -491,7 +529,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startFooterId () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'footer-id'); + $this->getStackInstance()->pushNamed('current_node', 'footer-id'); } /** @@ -501,7 +539,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startFooterClass () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'footer-class'); + $this->getStackInstance()->pushNamed('current_node', 'footer-class'); } /** @@ -511,7 +549,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function startFooterText () { // Push the node name on the stacker - $this->getStackerInstance()->pushNamed('current_node', 'footer-text'); + $this->getStackInstance()->pushNamed('current_node', 'footer-text'); } /** @@ -521,7 +559,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishTitle () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); } /** @@ -531,7 +569,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishTitleId () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); } /** @@ -541,7 +579,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishTitleClass () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); } /** @@ -551,7 +589,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishTitleText () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); } /** @@ -561,7 +599,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishFooterText () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); } /** @@ -571,7 +609,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishFooterClass () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); } /** @@ -581,7 +619,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishFooterId () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); } /** @@ -591,7 +629,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishAnchorHref () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); } /** @@ -601,7 +639,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishAnchorTitle () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); } /** @@ -611,7 +649,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishAnchorText () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); } /** @@ -621,7 +659,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishAnchorId () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); } /** @@ -631,7 +669,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishAnchor () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); } /** @@ -641,7 +679,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishEntryId () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); } /** @@ -651,7 +689,10 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishEntry () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); + + // Render this menu entry + $this->renderMenuEntry(); } /** @@ -661,7 +702,10 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishBlock () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); + + // Render this menu block + $this->renderMenuBlock(); } /** @@ -671,7 +715,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishBlockList () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); } /** @@ -681,7 +725,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishEntryList () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); } /** @@ -691,7 +735,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishBlockHeader () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); } /** @@ -701,7 +745,7 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishBlockFooter () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $this->getStackInstance()->popNamed('current_node'); } /** @@ -711,7 +755,77 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla */ private function finishMenu () { // Pop the last entry - $this->getStackerInstance()->popNamed('current_node'); + $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(); } /** @@ -721,7 +835,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',