Description et traitement du fichier XML contenant le mappage du site.
Programmation > PHP
Recherche :   
Actualité Système Salon Concours Outils Programmation Devparadise Programmation HTML .Net JavaScript VBScript ASP PHP Visual Basic Perl Java Active X SQL XML WAP Delphi Graphisme Flash Web Design Promotion Référencement Publicité Valeur de votre site Outils Systèmes Windows Unix Linux Benchmark Hardware Réseaux locaux Droit Sécurité
Création d’un menu déroulant en PHP et XML
  Auteur : Yves PETIT
Utilisation d’un fichier XML pour la création du menu

Description et traitement du fichier XML contenant le mappage du site.

Publicité 
Etudions d'abord la structure du fichier XML que nous allons utiliser :

<?xml version="1.0" encoding="utf-8"?>
<siteMap>
   <siteMapNode
id="" title="" description="" url="" />
   <siteMapNode
id="" title="" description="" url="">
      <siteMapNode
id="" title="" description="" url="" />
      <siteMapNode
id="" title="" description="" url="" />
      <siteMapNode
id="" title="" description="" url="" />
   </siteMapNode>
   <siteMapNode
id="" title="" description="" url="" />
</siteMap>

Ce type de site Map est inspiré d'un contrôle Microsoft .Net. Cette structure appliquée à notre site donnera le schéma suivant :

<?xml version="1.0" encoding="utf-8"?>
<siteMap>

    <siteMapNode id="1" title="Accueil" description="Accueil" url="/index.php" />
    <siteMapNode
    id="2" title="Qui sommes-nous ?" description="Qui sommes-nous ?" url="/presentation.php" />
    <siteMapNode
    id="3" title="Nos Services" description="Nos Services" url="Vide">
      <siteMapNode id="6" title="Développement d'application" description="Développement d'application" url="/devapp.php" />
      <siteMapNode
      id="7" title="Développement Web" description="Développement Web" url="/devweb.php" />
      <siteMapNode
      id="8" title="Intranet et Collaboration" description="Intranet et Collaboration" url="/si.php" />
      <siteMapNode
      id="9" title="Formation" description="Formation" url="/forma.php" />
      <siteMapNode
      id="10" title="Nos Compétences" description="Nos Compétences" url="/comp.php" />
    </siteMapNode>
    <siteMapNode
    id="4" title="Clients / Partenaires" description="Clients / Partenaires" url="/partenaire.php" />
    <siteMapNode
    id="5" title="Où sommes-nous ?" description="Où sommes-nous ?" url="/contact.php" />
</siteMap>

Le mot clé "Vide" dans l'url du bouton "Nos Services" va nous permettre de distinguer les nodes ayant des enfants.

Passons maintenant aux fonctions qui vont nous permettre de lever les événements lors de la lecture du fichier XML.

// Tableau servant à définir le niveau du noeud
$depth = array();
// Numéro du bouton
$numbtn = 0;
// Tableau contenant les boutons
$MesBoutons = array();

// Cette fonction lira le fichier XML et déclenchera les événements
function RecupXML($strFile)
{

    // Création du parser
    $xmlParser = xml_parser_create();
    // Affectation des deux fonctions (voir ci-dessous) pour les deux événements
    xml_set_element_handler($xmlParser, "DebutElementHandler", "FinElementHandler");

    // Ouverture du fichier en lecture seule
    if (!($fp = fopen($strFile, "r")))
    {

      // Si l'ouverture ne réussit pas, fin de l'exécution du script + message d'erreur
      die("Erreur d'ouverture du fichier XML");
    }

    // Lecture du fichier ligne par ligne
    while ($data = fread($fp, 4096))
    {

      // injection du contenu dans le parser
      if (!xml_parse($xmlParser, $data, feof($fp)))
      {
        die(sprintf("erreur XML : %s à la ligne %d", xml_error_string(xml_get_error_code($xmlParser)), xml_get_current_line_number($xmlParser)));
      }
    }
    // Libération du parser
    xml_parser_free($xmlParser);
}

// Fonction de traitement à l'ouverture du noeud
function DebutElementHandler($xmlParser, $Nom, $Attributs)
{

    // Liaison avec les 3 variables définies plus haut
    global $MesBoutons;
    global $depth;
    global $numbtn;

    // Si le nœud contient des attributs alors traitement
    if (count($Attributs))
    {

      // Initialisation des variables de retour
      $id = 0;
      $ttr = "";
      $desc = "";
      $url = "";

      // Brassage des attributs
      foreach($Attributs as $key => $value)
      {

        switch($key)
        {
          case 'ID' :
            $id = $value;
            break;
          case 'TITLE' :
            $ttr = utf8_decode($value);
            break;
          case 'DESCRIPTION' :
            $desc = utf8_decode($value);
            break;
          case 'URL' :
            $url = $value;
            break;
        }
      }

      // Ici, si le niveau est égal à 1, et qu'il y a des attributs, c'est un bouton
      if ($depth[$xmlParser] == 1)
      {

        // Création du bouton parent
        $MesBoutons[$numbtn] = new Bouton($ttr, $url, $desc, $id, false, false);
        $numbtn++;
      } else {
        // Sinon création du bouton enfant
        $MesBoutons[$numbtn - 1]->AddEnfts($ttr, $url, $desc, false);
      }
    }

    // Incrémentation du niveau de noeud
    $depth[$xmlParser]++;

}

// Cette fonction intervient lors de la fermeture du noeud
function FinElementHandler($xmlParser, $Nom)
{

    // Liaison avec la variable de niveau
    global $depth;
    // Décrémentation à la fermeture du noeud
    $depth[$xmlParser]--;
}

Maintenant nous n'avons plus qu'à appeler la lecture du fichier XML, ainsi que la méthode d'écriture de la télécommande de la classe Bouton.

// Appel de la fonction de lecture du fichier XML
RecupXML("websitemap.xml");

// Brassage des boutons pour l'écriture du code HTML
foreach ($MesBoutons as $MyBouton)
{

    $MyBouton->EchoTelec();
}

Ce dossier est maintenant terminé, et vous n'avez plus qu'à appliquer ces principes à votre cas particulier. Il est évident que ce code ne représente qu'une méthodologie, un cheminement pour la réalisation d'une télécommande dynamique en XML en PHP. Vous pouvez retrouver l'ensemble des sources de ce dossier dans notre logitech.

Précédent      
Création d’un menu déroulant en PHP et XML
  • Création du menu déroulant
  • Classe de génération du menu dynamique
  • Utilisation d’un fichier XML pour la création du menu
  • A lire aussi sur Devparadise.com :
  • Comment ouvrir un pop-up après validation d’un formulaire par les contrôles d...
  • Création en VB6 d'une DLL ActiveX utilisant GDI+, et appel de cette dernière ...
  • Création d’un menu déroulant en PHP et XML
  • Illustration de l’héritage de classe et de l’implémentation d’interface en c#...
  • La sérialisation (Marshaling) en XML en C# .Net 2.0
  • A télécharger aussi sur Devparadise.com :
  • Comment ouvrir un pop-up après validation d’un formulaire par les contrôles d...
  • SOURCES : Création en VB6 d'une DLL ActiveX utilisant GDI+, et appel de cette...
  • Sources de l'article sur la génération d'un menu avec xml et php
  • Source de l'article sur l’héritage de classe et de l’implémentation
  • Code Source : sérialisation (Marshaling) en C# .Net 2.0

  • © 1997-2009 tous droits réservés Devparadise.com
    Les logos, et marques déposées sont la propriété de leurs détenteurs respectifs.
    Devparadise.com s'est engagé à respecter la confidentialité des données personnelles régies par la loi 78-17 du 6 janvier 1978.
    Déclaration C.N.I.L. n° 621623
    php,xml,class,classe,menu,déroulant,horizontale,li,dd,dt,dl,ul