X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Ftemplate%2Fmenu%2Fclass_MenuTemplateEngine.php;h=d7c5875ce950e2300353b4a4ed270777e2f0b173;hp=4f3b0f112d4d0503f9fda47da65d3ed3c4c4e9d4;hb=1eec48acf4ae8da969b99668ba76fd3856f1c1d2;hpb=56764dad28dafd1292c9ed125135a3a8115b2147 diff --git a/inc/classes/main/template/menu/class_MenuTemplateEngine.php b/inc/classes/main/template/menu/class_MenuTemplateEngine.php index 4f3b0f11..d7c5875c 100644 --- a/inc/classes/main/template/menu/class_MenuTemplateEngine.php +++ b/inc/classes/main/template/menu/class_MenuTemplateEngine.php @@ -35,15 +35,26 @@ 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', 'block', 'title', - 'anchor', + 'title-id', + 'title-class', + 'title-text', 'design', 'text', 'advert', + 'anchor', + 'anchor-id', + 'anchor-text', + 'anchor-title', + 'anchor-href', ); /** @@ -57,9 +68,9 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla private $curr = array(); /** - * Content from depency + * Content from dependency */ - private $depencyContent = array(); + private $dependencyContent = array(); /** * Protected constructor @@ -130,6 +141,12 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla // Set the menu instance $tplInstance->setMenuInstance($menuInstance); + // Init a variable stacker + $stackerInstance = ObjectFactory::createObjectByConfiguredName('menu_stacker_class'); + + // Set it + $tplInstance->setStackerInstance($stackerInstance); + // Return the prepared instance return $tplInstance; } @@ -268,56 +285,51 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla return false; } // 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->getStackerInstance()->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())); // Then load it - $templateInstance->loadMenuTemplate($templateDepency); + $templateInstance->loadMenuTemplate($templateDependency); // Get an XmlParser instance $templateInstance->renderXmlContent(); // Parse the template's content contents - $this->depencyContent[$node] = $templateInstance->getRawTemplateData(); + $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); - - // 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'); - - // Set its content in this template instance - $this->assignVariable('menu_start', $this->getTemplateInstance()->getRawTemplateData()); + // Code cleaned up... + $this->partialStub('Cleaned because we do not want templates with partly HTML code.'); } /** @@ -326,34 +338,17 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla * @return void */ private function finishMenu () { - // Load the header template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_global_end'); - - // Set the variable group to page - $this->setVariableGroup('menu'); - - // Set its content in this template instance - $this->assignVariable('menu_end', $this->getTemplateInstance()->getRawTemplateData()); + $this->partialStub('Cleaned because we do not want templates with partly HTML code.'); } /** - * Starts the menu entries by loading a (maybe) provided template depency + * Starts the menu entries by loading a (maybe) provided template dependency * - * @param $templateDepency A template to load to satisfy depencies + * @param $templateDependency A template to load to satisfy dependencies * @return void */ - private function startEntryList ($templateDepency = '') { - // Handle the depency template - $this->handleTemplateDepency('entries', $templateDepency); - - // Load the header template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_entries_start'); - - // Set the variable group to page - $this->setVariableGroup('menu'); - - // Set its content in this template instance - $this->assignVariable('entries_start', $this->getTemplateInstance()->getRawTemplateData()); + private function startEntryList ($templateDependency = '') { + $this->partialStub('Cleaned because we do not want templates with partly HTML code.'); } /** @@ -362,117 +357,203 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla * @return void */ private function finishEntryList () { - // Load the header template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_entries_end'); - - // Set the variable group to page - $this->setVariableGroup('menu'); - - // Set its content in this template instance - $this->assignVariable('entries_end', $this->getTemplateInstance()->getRawTemplateData()); + $this->partialStub('Cleaned because we do not want templates with partly HTML code.'); } /** - * Starts the menu header + * Starts the menu block header * * @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 startBlockHeader () { + $this->partialStub('Cleaned because we do not want templates with partly HTML code.'); + } - // Set it in this template engine - $this->setTemplateInstance($templateInstance); - } // END - if + /** + * Finishes the menu block header + * + * @return void + */ + private function finishBlockHeader () { + $this->partialStub('Cleaned because we do not want templates with partly HTML code.'); + } - // Load the header template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_header_start'); + /** + * Starts the menu block footer + * + * @return void + */ + private function startBlockFooter () { + $this->partialStub('Cleaned because we do not want templates with partly HTML code.'); + } - // Set the variable group to page - $this->setVariableGroup('menu'); + /** + * Finishes the menu block footer + * + * @return void + */ + private function finishBlockFooter () { + $this->partialStub('Cleaned because we do not want templates with partly HTML code.'); + } - // Set its content in this template instance - $this->assignVariable('header', $this->getTemplateInstance()->getRawTemplateData()); + /** + * Starts the menu property 'block-list' + * + * @return void + */ + private function startBlockList () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('current_node', 'block-list'); } /** - * Finishes the menu header + * Starts the menu property 'block' * * @return void */ - private function finishHeader () { - // Load the header template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_header_end'); + private function startBlock () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('current_node', 'block'); + } - // Set the variable group to page - $this->setVariableGroup('menu'); + /** + * Starts the menu property 'title' + * + * @return void + */ + private function startTitle () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('current_node', 'title'); + } - // Set its content in this template instance - $this->assignVariable('header_end', $this->getTemplateInstance()->getRawTemplateData()); + /** + * Starts the menu property 'title-id' + * + * @return void + */ + private function startTitleId () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('current_node', 'title-id'); } /** - * Starts the menu footer + * Starts the menu property 'title-class' * * @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 startTitleClass () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('current_node', 'title-class'); + } - // Set it in this template engine - $this->setTemplateInstance($templateInstance); - } // END - if + /** + * Starts the menu property 'title-text' + * + * @return void + */ + private function startTitleText () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('current_node', 'title-text'); + } - // Load the footer template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_footer_start'); + /** + * Starts the menu property 'entry' + * + * @return void + */ + private function startEntry () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('current_node', 'entry'); + } - // Set the variable group to page - $this->setVariableGroup('menu'); + /** + * Starts the menu property 'entry-id' + * + * @return void + */ + private function startEntryId () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('current_node', 'entry-id'); + } - // Set its content in this template instance - $this->assignVariable('footer', $this->getTemplateInstance()->getRawTemplateData()); + /** + * Starts the menu property 'anchor' + * + * @return void + */ + private function startAnchor () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('current_node', 'anchor'); } /** - * Finishes the menu footer + * Starts the menu property 'anchor-id' * * @return void */ - private function finishFooter () { - // Load the footer template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_footer_end'); + private function startAnchorId () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('current_node', 'anchor-id'); + } - // Set the variable group to page - $this->setVariableGroup('menu'); + /** + * Starts the menu property 'anchor-text' + * + * @return void + */ + private function startAnchorText () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('current_node', 'anchor-text'); + } - // Set its content in this template instance - $this->assignVariable('footer_end', $this->getTemplateInstance()->getRawTemplateData()); + /** + * Starts the menu property 'anchor-title' + * + * @return void + */ + private function startAnchorTitle () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('current_node', 'anchor-title'); } /** - * Starts the menu property 'title' + * Starts the menu property 'anchor-href' * - * @param $id Id of the menu - * @param $class The title to add to the menu * @return void */ - private function startTitle ($id, $class) { - // Set id as current - $this->curr['id'] = $id; + private function startAnchorHref () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('current_node', 'anchor-href'); + } - // Load the title template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_title_' . $id . '_start'); + /** + * Starts the menu property 'footer-id' + * + * @return void + */ + private function startFooterId () { + // Push the node name on the stacker + $this->getStackerInstance()->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->getStackerInstance()->pushNamed('current_node', 'footer-class'); + } - // Set its content in this template instance - $this->assignVariable('title_start_' . $this->curr['id'], $this->getTemplateInstance()->getRawTemplateData()); + /** + * Starts the menu property 'footer-text' + * + * @return void + */ + private function startFooterText () { + // Push the node name on the stacker + $this->getStackerInstance()->pushNamed('current_node', 'footer-text'); } /** @@ -481,111 +562,199 @@ class MenuTemplateEngine extends BaseTemplateEngine implements CompileableTempla * @return void */ private function finishTitle () { - // Load the title template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_title_' . $this->curr['id'] . '_end'); - - // Set the variable group to page - $this->setVariableGroup('menu'); - - // Set its content in this template instance - $this->assignVariable('title_end_' . $this->curr['id'], $this->getTemplateInstance()->getRawTemplateData()); + // Pop the last entry + $this->getStackerInstance()->popNamed('current_node'); } /** - * Starts the menu text + * Finishes the title-id node by * * @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 finishTitleId () { + // Pop the last entry + $this->getStackerInstance()->popNamed('current_node'); + } - // Set it in this template engine - $this->setTemplateInstance($templateInstance); - } // END - if + /** + * Finishes the title-class node + * + * @return void + */ + private function finishTitleClass () { + // Pop the last entry + $this->getStackerInstance()->popNamed('current_node'); + } - // Load the text template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_text_start'); + /** + * Finishes the title-class node + * + * @return void + */ + private function finishTitleText () { + // Pop the last entry + $this->getStackerInstance()->popNamed('current_node'); + } - // Set the variable group to page - $this->setVariableGroup('menu'); + /** + * Finishes the footer-text node + * + * @return void + */ + private function finishFooterText () { + // Pop the last entry + $this->getStackerInstance()->popNamed('current_node'); + } - // Set its content in this template instance - $this->assignVariable('text', $this->getTemplateInstance()->getRawTemplateData()); + /** + * Finishes the footer-class node + * + * @return void + */ + private function finishFooterClass () { + // Pop the last entry + $this->getStackerInstance()->popNamed('current_node'); } /** - * Finishes the menu text + * Finishes the footer-id node * * @return void */ - private function finishText () { - // Load the text template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_text_end'); + private function finishFooterId () { + // Pop the last entry + $this->getStackerInstance()->popNamed('current_node'); + } - // Set the variable group to page - $this->setVariableGroup('menu'); + /** + * Finishes the anchor-href node + * + * @return void + */ + private function finishAnchorHref () { + // Pop the last entry + $this->getStackerInstance()->popNamed('current_node'); + } - // Set its content in this template instance - $this->assignVariable('text_end', $this->getTemplateInstance()->getRawTemplateData()); + /** + * Finishes the anchor-title node + * + * @return void + */ + private function finishAnchorTitle () { + // Pop the last entry + $this->getStackerInstance()->popNamed('current_node'); } /** - * Starts the menu property 'entry' + * Finishes the anchor-text node * - * @param $id Id of the menu * @return void */ - private function startEntry ($id) { - // Set id as current - $this->curr['entry_id'] = $id; + private function finishAnchorText () { + // Pop the last entry + $this->getStackerInstance()->popNamed('current_node'); + } - // Load the entry template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_entry_' . $id . '_start'); + /** + * Finishes the anchor-id node + * + * @return void + */ + private function finishAnchorId () { + // Pop the last entry + $this->getStackerInstance()->popNamed('current_node'); + } - // Set the variable group to page - $this->setVariableGroup('menu'); + /** + * Finishes the anchor node + * + * @return void + */ + private function finishAnchor () { + // Pop the last entry + $this->getStackerInstance()->popNamed('current_node'); + } - // Set its content in this template instance - $this->assignVariable('entry_start_' . $this->curr['id'], $this->getTemplateInstance()->getRawTemplateData()); + /** + * Finishes the entry-id node + * + * @return void + */ + private function finishEntryId () { + // Pop the last entry + $this->getStackerInstance()->popNamed('current_node'); } /** - * Finishes the entry node by added another template to the menu + * Finishes the entry node * * @return void */ private function finishEntry () { - // Load the entry template for this page - $this->getTemplateInstance()->loadCodeTemplate('menu_entry_' . $this->curr['entry_id'] . '_end'); + // Pop the last entry + $this->getStackerInstance()->popNamed('current_node'); + } - // Set the variable group to page - $this->setVariableGroup('menu'); + /** + * Finishes the block node + * + * @return void + */ + private function finishBlock () { + // Pop the last entry + $this->getStackerInstance()->popNamed('current_node'); + } - // Set its content in this template instance - $this->assignVariable('entry_end_' . $this->curr['id'], $this->getTemplateInstance()->getRawTemplateData()); + /** + * Finishes the block-list node + * + * @return void + */ + private function finishBlockList () { + // Pop the last entry + $this->getStackerInstance()->popNamed('current_node'); } + /** - * Starts the menu property 'anchor' + * Starts the menu text * - * @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 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'); + + // Set it in this template engine + $this->setTemplateInstance($templateInstance); + } // END - if + + // Load the text template for this page + $this->getTemplateInstance()->loadCodeTemplate('menu_text_start'); + + // Set the variable group to page + $this->setVariableGroup('menu'); + + // Set its content in this template instance + $this->assignVariable('text', $this->getTemplateInstance()->getRawTemplateData()); } /** - * Finishes the anchor node by added another template to the menu + * Finishes the menu text * * @return void */ - private function finishAnchor () { - $this->partialStub('Please implement this method.'); + private function finishText () { + // Load the text template for this page + $this->getTemplateInstance()->loadCodeTemplate('menu_text_end'); + + // Set the variable group to page + $this->setVariableGroup('menu'); + + // Set its content in this template instance + $this->assignVariable('text_end', $this->getTemplateInstance()->getRawTemplateData()); } /**