Blog de Portekoi : Programmation et Astuces

Programmation Cobol, Php, Asp, Java et DotNet…

Superfish et Php

Vous désirez installer SuperFish sur votre site Php avec des menus provenant de votre base de données?

Rien de plus simple.

Un exemple ici :
http://www.portekoi.com/menu/index.php

Sur cette page, vous pourrez ajouter un menu très simplement là où vous le désirez.

Du côté de Php, il suffit :

1/ De créer la table qui contiendra notre menu :

CREATE TABLE `tab_menu` (
  `m_id` bigint(20) NOT NULL auto_increment,
  `m_title` varchar(40) NOT NULL,
  `m_id_parent` bigint(20) NOT NULL,
  `m_affiche` int(11) NOT NULL,
  `m_profondeur` int(11) NOT NULL,
  PRIMARY KEY  (`m_id`)
) ENGINE=MyISAM AUTO_INCREMENT=29 DEFAULT CHARSET=latin1 AUTO_INCREMENT=29 ;

Une explication :

m_id : ID unique du menu
m_title : Titre (libellé) du menu
m_id_parent : ID du parent. 1 Si Titre principal / 0 pour le niveau invisible « Root »
m_affiche : Menu actif ou non
m_profondeur : Niveau du menu pour indentation dans le menu déroulant (optionnel)

Ensuite, j’ai ajouté une fonction dites « récursive » à savoir qu’elle s’appelle elle-même. Je ne vais pas détailler ce principe de programmation mais schématiquement, c’est comme si vous preniez une boite en carton qui contiendrait une boite en carton et ainsi de suite jusqu’au niveau le plus bas.

Dans notre exemple, il s’agit de menu qui contiendra un autre menu etc :

function PutMenu($Fct_idCat, $Fct_IdParent){
	
	/*On sélectionne les menus dont le parent est égal à l'ID transmis dans la fonction. Pour le premier appel, nous mettrons 0 qui correspond au niveau le plus haut de nos menus.*/
	$sql = "select m_id, m_title, m_id_parent from tab_menu where m_id_parent = '" . $Fct_idCat . "'";
	$requete = mysql_query($sql);
	while($tab = mysql_fetch_array($requete)){
		/*On récupère le parent du menu*/
		$Fct_IdParent = $tab['m_id_parent'];
		
		/*Pour cet ID parent, on va chercher s'il a des menus enfants*/	
		$S_sql = "select m_id from tab_menu where m_id_parent = '" .  $tab['m_id'] . "'";
		$S_requete = mysql_query($S_sql);
		if(mysql_num_rows($S_requete) > 0){
			 $Fct_IdParent = "1";
			 $bool_close = true;
		}else{
			$Fct_IdParent = "0";
			 $bool_close = false;	
		}		 
		
		/*On gère les ID parents à 1, menu principaux*/
		if($Fct_IdParent == "1"){
			echo "
  • " . $tab['m_title'] . "\n"; echo "
      \n"; }else{ echo "
    • " . $tab['m_title'] . "
    • \n"; } /*On rappelle notre fonction : récursivité*/ PutMenu($tab['m_id'], $Fct_IdParent); /*Si l'on peut fermer le menu parent, on le ferme*/ if ($bool_close){ echo "
    \n" ; $bool_close = false; } } }
  • A vous de modifier cette fonction pour l’affichage 🙂

    Pour l’afficher :

    ";
    	PutMenu(1, 0);
    	echo "";
    ?>
    

    Affichage dans le menu déroulant :

    function DisplaySelect($Fct_idCat, $Fct_IdParent){
    	
    	/*On va chercher le menu pour le mettre dans un menu déroulant*/
    	$sql = "select m_id, m_title, m_id_parent, m_profondeur from tab_menu where m_id_parent = '" . $Fct_idCat . "'";
    	//echo $sql;
    	$requete = mysql_query($sql);
    	while($tab = mysql_fetch_array($requete)){
    		/*On récupère le parent*/
    		$Fct_IdParent = $tab['m_id_parent'];
    			
    		$S_sql = "select m_id from tab_menu where m_id_parent = '" .  $tab['m_id'] . "'";
    		$S_requete = mysql_query($S_sql);
    		
    		/*La profondeur nous sert pour l'indentation*/
    		echo "";
    		
    		DisplaySelect($tab['m_id'], $Fct_IdParent);
    		
    	}
    }
    

    Pour l’afficher :

    
    

    Et voilà 🙂 A vous de compléter tout cela avec vos propres fonctions…

    Laisser un commentaire

    Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *