Lançado Adianti Framework 7.6!
Clique aqui para saber mais
menu

Adianti Solutions

API

Adianti, Framework, PHP, MVC, Active record, Front controller, IDE, RAD, Web, multiplataforma, geração de código, desenvolvimento rápido, relatórios, formulários, listagens, datagrids, gráficos, banco de dados, padrões de projeto, design patterns API do Adianti Framework.
API Docs
code
Selecione a classe

Source for file TMenu.php

Documentation is available at TMenu.php

  1. <?php
  2. namespace Adianti\Widget\Menu;
  3.  
  4. use Adianti\Widget\Menu\TMenuItem;
  5. use Adianti\Widget\Base\TElement;
  6.  
  7. use SimpleXMLElement;
  8.  
  9. /**
  10.  * Menu Widget
  11.  *
  12.  * @version    7.4
  13.  * @package    widget
  14.  * @subpackage menu
  15.  * @author     Pablo Dall'Oglio
  16.  * @copyright  Copyright (c) 2006 Adianti Solutions Ltd. (http://www.adianti.com.br)
  17.  * @license    http://www.adianti.com.br/framework-license
  18.  */
  19. class TMenu extends TElement
  20. {
  21.     private $items;
  22.     private $menu_class;
  23.     private $item_class;
  24.     private $menu_level;
  25.     private $link_class;
  26.     private $item_transformer;
  27.     private $menu_transformer;
  28.     
  29.     /**
  30.      * Class Constructor
  31.      * @param $xml SimpleXMLElement parsed from XML Menu
  32.      */
  33.     public function __construct($xml$permission_callback NULL$menu_level 1$menu_class 'dropdown-menu'$item_class ''$link_class 'dropdown-toggle'$item_transformer null$menu_transformer null)
  34.     {
  35.         parent::__construct('ul');
  36.         $this->items array();
  37.         
  38.         $this->{'class'}  $menu_class " level-{$menu_level}";
  39.         $this->menu_class = $menu_class;
  40.         $this->menu_level = $menu_level;
  41.         $this->item_class = $item_class;
  42.         $this->link_class = $link_class;
  43.         $this->item_transformer = $item_transformer;
  44.         $this->menu_transformer = $menu_transformer;
  45.         
  46.         if ($xml instanceof SimpleXMLElement)
  47.         {
  48.             $this->parse($xml, $permission_callback);
  49.         }
  50.     }
  51.     
  52.     /**
  53.      * Add a MenuItem
  54.      * @param $menuitem A TMenuItem Object
  55.      */
  56.     public function addMenuItem(TMenuItem $menuitem)
  57.     {
  58.         if (!empty($this->item_transformer))
  59.         {
  60.             call_user_func( $this->item_transformer, $menuitem );
  61.         }
  62.         $this->items[] = $menuitem;
  63.     }
  64.     
  65.     /**
  66.      * Return the menu items
  67.      */
  68.     public function getMenuItems()
  69.     {
  70.         return $this->items;
  71.     }
  72.     
  73.     /**
  74.      * Parse a XMLElement reading menu entries
  75.      * @param $xml A SimpleXMLElement Object
  76.      * @param $permission_callback check permission callback
  77.      */
  78.     public function parse($xml, $permission_callback = NULL)
  79.     {
  80.         $i = 0;
  81.         foreach ($xml as $xmlElement)
  82.         {
  83.             $atts     = $xmlElement-> attributes ();
  84.             $label    = (string) $atts['label'];
  85.             $action   = (string) $xmlElement-> action;
  86.             $icon     = (string) $xmlElement-> icon;
  87.             $menu     = NULL;
  88.             $menuItem = new <a href="widget/menu/TMenuItem.html">TMenuItem</a>($label, $action, $icon, $this->menu_level, $this->menu_transformer);
  89.             $menuItem->setLinkClass($this->link_class);
  90.             
  91.             if ($xmlElement-> menu)
  92.             {
  93.                 $menu_atts = $xmlElement-> menu-> attributes ();
  94.                 $menu_class = !empty( $menu_atts['class'] ) ? $menu_atts['class']$this->menu_class;
  95.                 $menu = new <a href="widget/menu/TMenu.html">TMenu</a>($xmlElement-> menu-> menuitem, $permission_callback, $this->menu_level +1, $menu_class, $this->item_class, $this->link_class, $this->item_transformer, $this->menu_transformer);
  96.  
  97.                 foreach (parent::getProperties() as $property => $value)
  98.                 {
  99.                     $menu->setProperty($property, $value);
  100.                 }
  101.  
  102.                 $menuItem->setMenu($menu);
  103.                 if ($this->item_class)
  104.                 {
  105.                     $menuItem->{'class'} = $this->item_class;
  106.                 }
  107.             }
  108.             
  109.             // just child nodes have actions
  110.             if ( $action )
  111.             {
  112.                 if ( !empty($action) AND $permission_callback AND (substr($action,0,7) !== 'http://') AND (substr($action,0,8) !== 'https://'))
  113.                 {
  114.                     // check permission
  115.                     $parts = explode('#', $action);
  116.                     $className = $parts[0];
  117.                     if (call_user_func($permission_callback, $className))
  118.                     {
  119.                         $this->addMenuItem($menuItem);
  120.                     }
  121.                 }
  122.                 else
  123.                 {
  124.                     // menus without permission check
  125.                     $this->addMenuItem($menuItem);
  126.                 }
  127.             }
  128.             // parent nodes are shown just when they have valid children (with permission)
  129.             else if ( isset($menu) AND count($menu->getMenuItems()) > 0)
  130.             {
  131.                 $this->addMenuItem($menuItem);
  132.             }
  133.             
  134.             $i ++;
  135.         }
  136.     }
  137.     
  138. /**    
  139.      * Shows the widget at the screen
  140.      */
  141.     public function show()
  142.     {
  143.         if ($this->items)
  144.         {
  145.             foreach ($this->items as $item)
  146.             {
  147.                 parent::add($item);
  148.             }
  149.         }
  150.         parent::show();
  151.     }