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

Signaler
Messages postés
149
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
15 septembre 2007
-
Messages postés
149
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
15 septembre 2007
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41798-generateur-de-menu-multilangue-avec-controle-du-niveau-d-acces-a-partir-de-plan-de-site-xml

Messages postés
149
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
15 septembre 2007

salut,
je me disais bien que ca devait deja exister...
j'aurrais du chercher.
merci
Messages postés
388
Date d'inscription
lundi 7 juillet 2003
Statut
Webmaster
Dernière intervention
10 février 2009

ta function is_in peut etre remplacer : regardes in_array => http://fr.php.net/in_array
Messages postés
149
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
15 septembre 2007

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
Messages postés
449
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009

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 = '';
foreach($node->sitenode as $sitenode)
{
if($this->is_in(explode(',',$sitenode['level']),$this->_access_level)==true)
{
$Buffer . = '<li>';
$Buffer .= $sitenode[$this->_language];
$Buffer .= '';

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

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

@++
Messages postés
149
Date d'inscription
samedi 19 mars 2005
Statut
Membre
Dernière intervention
15 septembre 2007

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