Générateur de menu multilangue avec controle du niveau d'accés à partir de plan de site xml

Contenu du snippet

Cette classe permet à partir d'un plan de site en xml de generer automatiquement un menu en fonction de la langue et du niveau d'authentification.

Source / Exemple :


<?php
class menu
{
  private $_xml_source;
  private $_language;
  private $_access_level;
  //permet d'afficher le noeud de depart(accueil)
  var $_show_starting_node;
  //constructeur
  function menu($set_xml_source,$set_access_level,$set_language)
  {
    $this->_xml_source=$set_xml_source;
    $this->_access_level=$set_access_level;
    $this->_language=$set_language;    
  }
  //fonction recursive pour parcourir toutes les branches du xml
  private function check_node($node)
  {
    echo('<ul>');
    foreach($node->sitenode as $sitenode)
    {
      if($this->is_in(explode(',',$sitenode['level']),$this->_access_level)==true)
      {
        echo('<li><a href=\'');
        echo($sitenode['url']);
        echo('\' ');
        if(!empty($sitenode['id'])){echo('id=\''.$sitenode['id'].'\' ');}
        if(!empty($sitenode['class'])){echo('class=\''.$sitenode['class'].'\' ');}
        echo('>');
        echo($sitenode[$this->_language]);
        echo('</a>');
        if(!empty($sitenode->sitenode))
        {
          $this->check_node($sitenode);
        }        
        echo('</li>');
      }      
    }
    echo('</ul>');    
  }
  public function display()
  {
    $xml=simplexml_load_file($this->_xml_source);
    if ($this->_show_starting_node==true)
    {
      $this->check_node($xml);
    }
    else
    {
      $this->check_node($xml->sitenode);
    }    
  }   
  private function is_in($tab,$value)
  {
    $return_value=false;
    foreach($tab as $tab_value)
    {
      if($tab_value==$value)
      {
        $return_value=true;        
      }
    }
    return $return_value;
  }
}
?>

XML exemple :

<?xml version="1.0" encoding="utf-8"?>
<sitemap>
  <sitenode url='index.php' fr='Accueil' en='Index' level='0,1,2,3,4,5' >
     <sitenode url='page2.php' fr='Pagefr1' en='Pageen1' level='0,1,2,3,4,5' id='mnu_page2'>
        <sitenode url='page3.php' fr='Pagefr2' en='Pageen2' level='0,1,2,3,4' class='level2' />
        <sitenode url='page4.php' fr='Pagefr3' en='Pageen3' level='0,1,2,3,4' />
     </sitenode>     
     .....
  </sitenode>
</sitemap>

Conclusion :


pour créer le menu :

$menu=new menu('sitemap.xml',$level,$langue);
//affiche le premier noeud(index)
$menu->_show_starting_node=true;
$menu->display();

(on peut passer des classes css et des id dans les attributs du xml)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.