Added very basic support (unfinished) for menu rendering
authorRoland Haeder <roland@mxchange.org>
Sun, 5 Apr 2015 20:06:38 +0000 (22:06 +0200)
committerRoland Haeder <roland@mxchange.org>
Sun, 5 Apr 2015 20:06:38 +0000 (22:06 +0200)
Signed-off-by: Roland Häder <roland@mxchange.org>
inc/classes/interfaces/menu/class_RenderableMenu.php
inc/classes/main/menu/class_BaseMenu.php
inc/classes/main/template/class_BaseTemplateEngine.php
inc/classes/main/template/menu/class_MenuTemplateEngine.php

index bf0a3abae9d61fcd86a5c663ce0d987b75c9a932..8b0281c2e403184b3c0e834bb79d10cd2ebef389 100644 (file)
@@ -31,7 +31,7 @@ interface RenderableMenu extends FrameworkInterface {
        function renderMenu ();
 
        /**
-        * Transfers the rendered menu to a given templatex engine by assigning
+        * Transfers the rendered menu to a given template engine by assigning
         * the rendered content with a template variable.
         *
         * @2param      $templateInstance       An instance of a CompileableTemplate class
index 38d7157e029f5a760884c9346459e07c8f6f2787..fa32207b36aa7bf6ab7612a48379942d3ae8a0fc 100644 (file)
@@ -52,29 +52,34 @@ class BaseMenu extends BaseFrameworkSystem {
                // Get the 'page' from request instance
                $page = $this->getApplicationInstance()->getRequestInstance()->getRequestElement('page');
 
+               // If page is empty, choose default
+               if (empty($page)) {
+                       // Use default page as none has been specified
+                       $page = $this->getConfigInstance()->getConfigEntry('default_' . $this->getApplicationInstance()->getAppShortName() . '_' . self::getResponseTypeFromSystem() . '_command');
+               } // END - if
+
                // Load the menu template for this page
                try {
                        $templateInstance->loadMenuTemplate($page . '_menu_entries');
                } catch (FileIoException $e) {
-                       // @TODO Should we log it here? We should, because it will be silently ignored.
+                       // Log exception @TODO Maybe to intrusive?
+                       self::createDebugInstance(__CLASS__)->debugOutput('[' . __METHOD__ . ':' . __LINE__ . ']: Exception caught: ' . $e->__toString() . ', with message: ' . $e->getMessage());
                }
 
-               // Get the prepared content
-               $menuContent = $templateInstance->getRawTemplateData();
-
-               // Render it here
-               $templateInstance->renderXmlContent($menuContent);
+               // Render template data here
+               $templateInstance->renderXmlContent();
                //exit(__METHOD__ . ':!OK');
        }
 
        /**
-        * Transfers the rendered menu to a given templatex engine by assigning
+        * Transfers the rendered menu to a given template engine by assigning
         * the rendered content with a template variable.
         *
         * @param       $templateInstance       An instance of a CompileableTemplate class
         * @return      void
         */
        public function transferContentToTemplateEngine (CompileableTemplate $templateInstance) {
+               $this->debugInstance();
                $this->partialStub('templateInstance=' . $templateInstance->__toString());
        }
 }
index 11e3acc63fe8a13d11576371e5969b52a91bd45b..4f896266b3d292cd8b98bde19178472aac2e649e 100644 (file)
@@ -1550,7 +1550,7 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
                // Get a XmlParser instance
                $parserInstance = ObjectFactory::createObjectByConfiguredName('xml_parser_class', array($this));
 
-               // Check if we have XML compacting enabled
+               // Check if XML compacting is enabled
                if ($this->isXmlCompactingEnabled()) {
                        // Yes, so get a decorator class for transparent compacting
                        $parserInstance = ObjectFactory::createObjectByConfiguredName('deco_compacting_xml_parser_class', array($parserInstance));
index 4f1dd50dd2baed10de46227287fd4e644ba7d6ce..e11548fb5f7b5bbf698f7b32c266cbc8d024988c 100644 (file)
@@ -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)
         *