|
|
Création d’un menu déroulant en PHP et XML
Classe de génération du menu dynamique
Nous allons maintenant créer une classe PHP permettant de générer dynamiquement la télécommande suivant la structure décrite précédemment. La classe décrite ici est en PHP 4.
 |
Publicité
|
Nous allons maintenant créer une classe PHP permettant de générer dynamiquement la télécommande suivant la structure décrite précédemment. La classe décrite ici est en PHP 4, si vous la réalisez en PHP 5 il est important d'intégrer la portée des méthodes et des variables.
Commençons par la mise en place des éléments constituant le futur objet "bouton" :
// Classe Bouton
Class Bouton
{
// Texte du bouton
var $texte;
// Lien du bouton
var $lien;
// Description de la page de destination du bouton
var $desc;
// Niveau de priorité du bouton (non utiliser dans cette version)
var $nv;
// Etat du bouton - page en cours = page du bouton
var $etat;
// True si le bouton est un enfant
var $isenfts;
// Tableau contenant les éventuels enfants
var $enfants;
// Nombre d'enfants
var $nbenfts;
// Marge pour le calcul de la longueur en pixels du texte
var $LENADD = 0;
// Constructeur
function Bouton($strTexte, $strLien, $strDesc, $intNv, $BoolEtat, $BoolEnft)
{
$this->texte = $strTexte;
$this->lien = $strLien;
$this->desc = $strDesc;
$this->nv = $intNv;
$this->etat = $BoolEtat;
$this->isenfts = $BoolEnft;
//
$this->nbenfts = 0;
}
}
Incorporons maintenant à cette classe, deux méthodes nous permettant pour l'une d'insérer un nouvel enfant et pour l'autre de déterminer le plus grand texte dans les boutons enfants.
// Cette méthode va nous permettre d'ajouter des enfants à notre bouton
function AddEnfts($strTexte, $strLien, $strDesc, $BoolEtat)
{
// Incrémente le nombre d'enfants associé au bouton
$this->nbenfts++;
// Créer un objet bouton dans le tableau des enfants du bouton
$this->enfants[] = new Bouton($strTexte, $strLien, $strDesc, $this->nbenfts, $BoolEtat, true);
}
// Méthode permettant de trouver la chaîne la plus longue
function FindMaxEnfts()
{
// Initialisation de la valeur temporaire
$tmpVal = 0;
// Bouclage sur tous les enfants d'un bouton
foreach ($this->enfants as $enfant)
{
// Si le texte est plus long que la variable temporaire, on remplace par la nouvelle valeur
if (strlen($enfant->texte) > $tmpVal)
{
$tmpVal = strlen($enfant->texte);
}
}
// On retourne la valeur
return $tmpVal;
}
Continuons en intégrant les méthodes d'affichage des boutons parents et enfants :
// Méthode écrivant la partie de code HTML appropriée
function EchoTelec()
{
// Si nbenfts = 0, alors il n'y a pas d'enfants
if ($this->nbenfts == 0)
{
// Si nbenfts = true, alors la page en cours est la page du bouton
if ($this->etat)
{
}
else
{
}
// Fermeture du bouton
$this->EndEchoBtn();
}
else
{
// Ecriture du code HTML pour le parent et le début de code des enfants
$this->StartEchoBtnEnft();
// Brassage de tout les enfants et écriture du code HTML
foreach ($this->enfants as $enfant)
{
$this->EchoEnft($enfant);
}
// Fermeture du bouton
$this->EndEchoBtnEnft();
}
}
// Méthode d'écriture du début du bouton sans enfant
function StartEchoBtn()
{
echo "<dl style="width: " . (strlen($this->texte) + $this->LENADD) * 8 . "px;">
";
echo "<dt onmouseover="javascript:montre();" style="width: " . (strlen($this->texte) + $this->LENADD) * 8 . "px;"><a href="" . $this->lien . "" title="" . $this->desc . "" style="width: " . (strlen($this->texte) + $this->LENADD) * 8 . "px;" class="MYMENU">" . $this->texte . "</a></dt>
";
}
// Méthode de fermeture du bouton
function EndEchoBtn()
{
}
// Méthode d'écriture du bouton de la page en cours
function StartEchoTxt()
{
echo "<dl style="width: " . (strlen($this->texte) + $this->LENADD) * 8 . "px;">
";
echo "<dt onmouseover="javascript:montre();" style="width: " . (strlen($this->texte) + $this->LENADD) * 8 . "px;"><span class="MYMENU" style="width: " . (strlen($this->texte) + $this->LENADD) * 8 . "px;">" . $this->texte . "</span></dt>
";
}
// Méthode d'ouverture du bouton parent et des boutons enfants
function StartEchoBtnEnft()
{
echo "<dl style="width: " . (strlen($this->texte) + $this->LENADD) * 8 . "px;">
";
echo "<dt onmouseover="javascript:montre('Prnt" . $this->nv . "');" style="width: " . (strlen($this->texte) + $this->LENADD) * 8 . "px;"><span class="MYMENU" style="width: " . (strlen($this->texte) + $this->LENADD) * 8 . "px;">" . $this->texte . "</span></dt>
";
echo "<dd id="Prnt" . $this->nv . "">
";
echo "<ul style="width: " . ($this->FindMaxEnfts() + $this->LENADD) * 8 . "px;">
";
}
// Méthode de fermeture du bouton parent et des boutons enfants
function EndEchoBtnEnft()
{
echo "</ul>
";
echo "</dd>
";
echo "</dl>
";
}
// Méthode d'écriture HTML des boutons enfants
function EchoEnft($MonEnfnt)
{
echo "<li><a href="" . $MonEnfnt->lien . "" class="MYLIMENU">" . $MonEnfnt->texte . "</a></li>
";
}
Pour le calcul des largeurs des cellules nous prenons donc la longueur de la chaîne texte plus un éventuel coefficient de sécurité, multiplié par huit.
Notre classe PHP est maintenant terminée.
|
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
|
|