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)
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.