begin process at 2012 02 12 19:28:22
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Xml

 > GÉNÉRATEUR DE MENU MULTILANGUE AVEC CONTROLE DU NIVEAU D'ACCÉS À PARTIR DE PLAN DE SITE XML

GÉNÉRATEUR DE MENU MULTILANGUE AVEC CONTROLE DU NIVEAU D'ACCÉS À PARTIR DE PLAN DE SITE XML


 Information sur la source

Note :
Aucune note
Catégorie :Xml Classé sous :xml, plan, simplexml, recursive, sitemap Niveau :Débutant Date de création :09/03/2007 Date de mise à jour :09/03/2007 11:11:49 Vu :7 873

Auteur : lilippx

Ecrire un message privé
Site perso
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

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

  • <?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>
<?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;
$men u->display();

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


 Historique

09 mars 2007 11:11:49 :
un peu d'orthographe

 Sources de la même categorie

OBTENIR LES TAUX DE CHANGE DU JOUR EN EUROS par oallais
Source avec Zip AFFICHER LES FILM EN SALLE par slhuilli
Source avec Zip Source avec une capture MINI-PROCESSEUR XPROC (PIPELINE XML) par ordiman85
Source avec Zip Source avec une capture XML MAPPING TO CLASS OBJECTS / CHARGEMENT / PARSING / MODIFI... par aKheNathOn
Source avec Zip Source avec une capture VIEWER POUR JALBUM SKIN CHAMELEON LIVRE D'OR par ym_trainz

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture VOIR QUI VISITE VOTRE SITE par Dariumis
Source avec Zip AFFICHER LES FILM EN SALLE par slhuilli
Source avec Zip Source avec une capture EUROCODE, DIMENSIONNEMENT DE POTEAUX MÉTALIQUES, XML, CSS3 &... par nacedo57400
Source avec Zip Source avec une capture MANGATEQUE ADMINISTRABLE SANS BDD, UTILISATION DE SIMPLEXML par nacedo57400
Source avec Zip SITEMAP AU STANDARD NNS 1.0 par gorgonite

Commentaires et avis

Commentaire de lilippx le 09/03/2007 15:22:01

Petite contrainte, simpleXML n'accepte que de l'utf-8 en entrée et génère du utf-8 en sortie.
Si vous voulez espérer du iso-8859-1 en sortie, modifier la ligne 30 pour :
echo(utf8_decode($sitenode[$this->_language]));

à quand un monde sans utf-8?.....

Commentaire de jean84 le 10/03/2007 01:34:34

Avec DOM tout simplement ? Non je plaisante (quoi que ...) ^^
Je vois pas trop quoi dire sur ta classe, je ne connais pas du tout simpleXML, je suis un adepte de DOM.
Un petit truc quand meme : dans ta boucle foreach dans la fonction menu::check_node(), evite d'utiliser a repetition echo.
Dans un cas extreme, tu pourrais utiliser ob_start() & ob_flush() avant et apres pour eviter de solliciter autant de fois le navigateur. A chaque tour de boucle, tu executes une dizaines de fois cette fonction ce qui a pour effet d'envoyer une dizaine de fois au navigateur du texte.
Essaye de buffeurise (je sais pas trop si sa se dit :p) toute ta boucle avant de l'envoyer, tu y gagneras en perf.

private function check_node($node)
{
$Buffer = '<ul>';
foreach($node->sitenode as $sitenode)
{
if($this->is_in(explode(',',$sitenode['level']),$this->_access_level)==true)
{
$Buffer . = '<li><a href=\'';
$Buffer .= $sitenode['url'];
$Buffer .= '\' ';

if(!empty($sitenode['id']))
$Buffer .= 'id=\''.$sitenode['id'].'\' ';
if(!empty($sitenode['class']))
$Buffer .= 'class=\''.$sitenode['class'].'\' ';

$Buffer .= '>';
$Buffer .= $sitenode[$this->_language];
$Buffer .= '</a>';

if(!empty($sitenode->sitenode))
{
$this->check_node($sitenode);
}
$Buffer .= '</li>';
}
}
return $Buffer.'</ul>':
}

Sa sera plus rapide ! Et sinon, quelle doit etre la srtucture de ton document XML ?

@++

Commentaire de lilippx le 10/03/2007 09:31:30

salut, merci pour ce petit conseil.
Sinon, pour la structure du xml, y'a un exemple en bas de la source.
pour que ce soit plus propre, j'aurrais pu faire :
<sitenode id='....' class='....'>
    <language id='fr' url='....' value=''/>
    <language id='en' url='....' value=''/>
    <sitenode>
         <language id='fr' url='....' value='.....'/>
         <language id='en' url='....' value='......'/>
    </sitenode>
</sitenode>

ca permettrai de passer la langue par  $_GET plus facilement.
voilà bonne journée

Commentaire de garfield90 le 12/03/2007 20:49:49

ta function is_in peut etre remplacer : regardes in_array => http://fr.php.net/in_array

Commentaire de lilippx le 13/03/2007 08:52:01

salut,
je me disais bien que ca devait deja exister...
j'aurrais du chercher.
merci

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Lecture XML via simplexml_load_file() génère une erreur "Input is not proper UTF-8, indicate encoding !" [ par karpediem ] Bonjour @ toutezéatous,J'ai un petit pb lorsque j'essaie de lire un fichier XML qui m'est transmis par un prestataire. C'est ma première expérience de Pb avec SEO [ par Al3x_Oo ] Bonjour, J'ai un problème avec SEO sur mon forum. J'ai installé GYM SITEMAPS pour pouvoir créer un sitemap pour les moteurs de recherches mais ça n SimpleXML [ par fabienfs ] Bonsoir, Je débute avec SimpleXML et j'ai du mal à lire la syntaxe de mon XML. Voici mon XML : [code=xml] PLAYLIST <item ui Erreur xml [ par ouzb ] Bonjour a tous les developpeurs: J'envoi des données d'une chaine xml sur mon serveur.Mais j'ai ces fenres d'erreurs : [color=red]Warning: simplexml_ Php extraction de donnée [ par isiselo ] Bonjour, Voilà je vous explique mon problème J'ai un outil sur lequel sont stockés des données xml,je dois récupérer automatiquement ses données XML remplir un combobox en php et Dom à partir d'un fichier xml [ par leilameherzi ] Bonsoir à tous, je suis entrain de gérer un fichier XML avec PHP5 en utilisant DOM. Pour la manipulation des éléments du fichier XML, j'ai besoin de Web service + Soap + XML [ par j3r3m067 ] Bjr à tous, Voilà je dois développer un web service avec le protocole SOAP. Mon web service doit: [list] * Envoyer un fichier XML présent sur un répe Open Document XML : Accéder à un attribut d'un element [ par jmb44 ] Bonjour, J'ai un petit soucis concernant l'accès à un attribut d'un document XML (format opendocument) : je voulais utiliser simpleXML mais je n'ai r je cherche bon plan pour aprendre vite le php ou au moin pouvoir tester mes scripte :) [ par sliper69 ] [b]hello je commence à apprendre le php c'est vachement compliquer [^^happy3] et je cherche un site ou ils expliquent tout depuis le stricte début [^^ Envoi et reception de fichier XML sur un serveur [ par j3r3m067 ] Bonjour à tous, je dois envoyer un fichier XML sur un serveur distant en HTTP/POST, en focntion de la réponse du serveur je dois répondre un autre fi


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,607 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales