|
|
Création d’un menu déroulant en PHP et XML
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>
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">
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' :
case 'TITLE' :
$ttr = utf8_decode($value);
break;
case 'DESCRIPTION' :
$desc = utf8_decode($value);
break;
case 'URL' :
}
}
// 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)
{
}
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.
|
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
|
|