Programmeur1987
Messages postés80Date d'inscriptionlundi 2 décembre 2002StatutMembreDernière intervention 5 mars 2009
-
25 juil. 2007 à 19:14
Programmeur1987
Messages postés80Date d'inscriptionlundi 2 décembre 2002StatutMembreDernière intervention 5 mars 2009
-
28 juil. 2007 à 18:32
Bonjour, depuis plusieur jour je me casse la tête à tenter de rentre mon menu dynamique c'est pour un espece de magasin en ligne et il récupère les items du menu par Mysql avec ce code
function construit_menu(&$sortie, &$selectionne, $parent=0, $indent="") {
global $SESSION, $wwwroot; $qid mysql_query("SELECT id, parent_id, nom FROM categories WHERE parent_id $parent AND lang = '".$SESSION["lang"]."'");
if ($qid) {
if (mysql_num_rows($qid) > 0) {
while ($cat = mysql_fetch_array($qid)) {
$sortie .= "
<tr><td>
$indenthttp://www.spip-contrib.net/rien.gif
J_G
Messages postés1406Date d'inscriptionmercredi 17 août 2005StatutMembreDernière intervention28 août 200710 25 juil. 2007 à 20:24
Salut...
Voici une façon "propre" de résoudre ce genre de pb... :
<?php
error_reporting(E_ALL | E_STRICT);
class menu {
private $sous_menus;
private $donnees_du_menu;
/*!
* Constructeur d'un objet menu
* @param array $donnees_du_menu : un tableau associatif (issue de mysql_fetch_assoc)
*/
public function __construct( $donnees_du_menu ) {
// on sauve les données en paramêtre pour réutilisation ultérieure
$this->donnees_du_menu = $donnees_du_menu;
// les sous-menus seront contenus dans un tableau
$this->sous_menus = array();
// recherche via MySQL des sous-menus
$res_sous_menus = $this->trouver_sous_menus ( $donnees_du_menu['id'] );
// pour chaque sous menu trouvé
while ( $sous_menu = mysql_fetch_assoc($res_sous_menus) ) {
// l'ajouter au parent (la récursion se fait automatiquement
$this->sous_menus[] = new menu($sous_menu);
}
}
/*!
* Effectue une recherche dans la base de données pour trouver les sous-menus du menu courant
* @return MySQL_result : resultat de la requête!
*/
private function trouver_sous_menus() {
// le menu actuel est le parent des sous-menus
$parent = $this->donnees_du_menu['id'];
// param supplémentaires :
$lang = $_SESSION['lang'];
// construction de la requête
$query "SELECT id, parent_id, nom FROM categories WHERE parent_id $parent AND lang = '$lang'";
// intérrogation de la base
return mysql_query($query);
}
/*!
* Renvoi l'objet sous forme de texte
* @return string : le texte du menu
*/
public function __toString() {
// le menu courant
$str = '<li>'.$donnees_du_menu['nom'];
// si il y a des sous-menus
if ( count($this->sous_menus) ) {
// ouverture d'une sous-liste
$str.= '';
// et écriture des sous-menus
foreach ( $this->sous_menus as $sous_menu ) $str.= $sous_menu->__toString();
$str.= '';
}
// fermeture du menu courant
$str.= '</li>';
// Envoi de cette portion de menu
return $str;
}
}
//! Utilisation :
$menu_general = new menu ( array('id'=>0) );
echo $menu_general;
?>
Note : je n'ai rien vérifé... à toi de faire les tests et d'adapter le code à ton contexte.