par
aelurus » 07 avr. 2007, 16:26
J'ai volontairement bloquer mon code a trois sous niveau par soucis d'affichage. Ta piste de récursivité est surement une bonne piste pour optimiser la chose mais je pense dans ce cas la etre bloquer au meme probleme la logique de lecture de mon tableau...
Voici mon usine a gaz en sql :
<?
$time_start = getmicrotime();
//affichage des menus
$sql = mysql_query("SELECT id_menu, titre, ordre FROM `menu` WHERE `parent`=0 ORDER BY `ordre` ASC LIMIT 0, 6 ");
while($menu=mysql_fetch_assoc($sql))
{
echo"\t<ul>\r";
echo "\t\t\t<li><a href='#' >(M)".htmlentities($menu[titre])."</a> N°($menu[ordre])\r";
//article
$sqlarticle = mysql_query("SELECT `id_article`,`auteur`,`date`,`texte`,`titre`,`date_maj`,`appartenance`,`ordre` FROM `article` WHERE `appartenance`='$menu[id_menu]' ORDER BY `ordre` ASC ");
if (!mysql_numrows($sqlarticle) == 0 ) echo"\t\t\t\t<ul>\r";
while($article=mysql_fetch_assoc($sqlarticle))
{
echo "\t<li><a href='#' >(A)".htmlentities($article[titre])."</a> N°($menu[ordre].$article[ordre])<br /> ";
}
if (!mysql_numrows($sqlarticle) == 0 ) echo"\t\t\t\t</ul> \r";
$sqlsm = mysql_query("SELECT id_menu, parent, titre, ordre FROM `menu` WHERE `parent`='$menu[id_menu]' ORDER BY `ordre` ASC ");
//sousmenu premier niveau
if (!mysql_numrows($sqlsm) == 0 ) echo"\t\t\t\t<ul>\r";
while($sousmenu=mysql_fetch_assoc($sqlsm))
{
echo "\t\t<li><a href='#'class='daddy' >(SM)".$sousmenu[titre]."</a> N°($menu[ordre].$sousmenu[ordre])\r";
//article deuxieme niveau
$sqlarticle1 = mysql_query("SELECT `id_article`,`auteur`,`date`,`texte`,`titre`,`date_maj`,`appartenance`,`ordre` FROM `article` WHERE `appartenance`='$sousmenu[id_menu]' ORDER BY `ordre` ASC ");
if (!mysql_numrows($sqlarticle1) == 0 ) echo"\t\t\t<ul>\r";
while($article1=mysql_fetch_assoc($sqlarticle1))
{
echo "\t\t\t<li><a href='#' >(A)".htmlentities($article1[titre])."</a> N°($menu[ordre].$sousmenu[ordre].$article1[ordre]) ";
}
if (!mysql_numrows($sqlarticle1) == 0 ) echo"\t\t\t</ul> \r";
//sousmenu deuxieme niveau
$sqlssm = mysql_query("SELECT id_menu, parent, titre, ordre FROM `menu` WHERE `parent`='$sousmenu[id_menu]' ORDER BY `ordre` ASC ");
if (!mysql_numrows($sqlssm) == 0 ) echo"\t\t\t\t<ul>\r";
while($sous_sousmenu=mysql_fetch_assoc($sqlssm))
{
echo "<li><a href='#'class='daddy' >(SSM)".$sous_sousmenu[titre]."</a> N°($menu[ordre].$sousmenu[ordre].$sous_sousmenu[ordre])\r";
//article troisieme niveau
$sqlarticle2 = mysql_query("SELECT `id_article`,`auteur`,`date`,`texte`,`titre`,`date_maj`,`appartenance`,`ordre` FROM `article` WHERE `appartenance`='$sous_sousmenu[id_menu]' ORDER BY `ordre` ASC ");
if (!mysql_numrows($sqlarticle2) == 0 ) echo"\t<ul>\r";
while($article2=mysql_fetch_assoc($sqlarticle2))
{
echo "<li><a href='#' >(A)".htmlentities($article2[titre])."</a> N°($menu[ordre].$sous_sousmenumenu[ordre].$article2[ordre]) ";
}
if (!mysql_numrows($sqlarticle2) == 0 ) echo"</ul>\r";
}
if (!mysql_numrows($sqlssm) == 0 ) echo"</ul>\r";
}
if (!mysql_numrows($sqlsm) == 0 ) echo"\t\t\t\t</ul>\r";
echo"</ul>\r";
}
$time_end = getmicrotime();
$time = substr(($time_end - $time_start),0,9);
$message.="<p class='tempgene'>Script droit générée en ".$time." s</p>";
?>
J'en ai deja pas mal sué pour obtenir ce code valide w3c qui me genrer la bonne structure de <ul> et de <li>.
Mais je crois que pour le serveur c'est aussi une grosse usine a gaz mon truc, donc je voulais simplement faire une requette qui me construise le tableau du menu, la sa fonctionne je dirais, mais je ne trouve pas comment faire le lien dans la lecture du tableau entre la cle parent et la cle id_menu...
J'ai volontairement bloquer mon code a trois sous niveau par soucis d'affichage. Ta piste de récursivité est surement une bonne piste pour optimiser la chose mais je pense dans ce cas la etre bloquer au meme probleme la logique de lecture de mon tableau...
Voici mon usine a gaz en sql : [php]<?
$time_start = getmicrotime();
//affichage des menus
$sql = mysql_query("SELECT id_menu, titre, ordre FROM `menu` WHERE `parent`=0 ORDER BY `ordre` ASC LIMIT 0, 6 ");
while($menu=mysql_fetch_assoc($sql))
{
echo"\t<ul>\r";
echo "\t\t\t<li><a href='#' >(M)".htmlentities($menu[titre])."</a> N°($menu[ordre])\r";
//article
$sqlarticle = mysql_query("SELECT `id_article`,`auteur`,`date`,`texte`,`titre`,`date_maj`,`appartenance`,`ordre` FROM `article` WHERE `appartenance`='$menu[id_menu]' ORDER BY `ordre` ASC ");
if (!mysql_numrows($sqlarticle) == 0 ) echo"\t\t\t\t<ul>\r";
while($article=mysql_fetch_assoc($sqlarticle))
{
echo "\t<li><a href='#' >(A)".htmlentities($article[titre])."</a> N°($menu[ordre].$article[ordre])<br /> ";
}
if (!mysql_numrows($sqlarticle) == 0 ) echo"\t\t\t\t</ul> \r";
$sqlsm = mysql_query("SELECT id_menu, parent, titre, ordre FROM `menu` WHERE `parent`='$menu[id_menu]' ORDER BY `ordre` ASC ");
//sousmenu premier niveau
if (!mysql_numrows($sqlsm) == 0 ) echo"\t\t\t\t<ul>\r";
while($sousmenu=mysql_fetch_assoc($sqlsm))
{
echo "\t\t<li><a href='#'class='daddy' >(SM)".$sousmenu[titre]."</a> N°($menu[ordre].$sousmenu[ordre])\r";
//article deuxieme niveau
$sqlarticle1 = mysql_query("SELECT `id_article`,`auteur`,`date`,`texte`,`titre`,`date_maj`,`appartenance`,`ordre` FROM `article` WHERE `appartenance`='$sousmenu[id_menu]' ORDER BY `ordre` ASC ");
if (!mysql_numrows($sqlarticle1) == 0 ) echo"\t\t\t<ul>\r";
while($article1=mysql_fetch_assoc($sqlarticle1))
{
echo "\t\t\t<li><a href='#' >(A)".htmlentities($article1[titre])."</a> N°($menu[ordre].$sousmenu[ordre].$article1[ordre]) ";
}
if (!mysql_numrows($sqlarticle1) == 0 ) echo"\t\t\t</ul> \r";
//sousmenu deuxieme niveau
$sqlssm = mysql_query("SELECT id_menu, parent, titre, ordre FROM `menu` WHERE `parent`='$sousmenu[id_menu]' ORDER BY `ordre` ASC ");
if (!mysql_numrows($sqlssm) == 0 ) echo"\t\t\t\t<ul>\r";
while($sous_sousmenu=mysql_fetch_assoc($sqlssm))
{
echo "<li><a href='#'class='daddy' >(SSM)".$sous_sousmenu[titre]."</a> N°($menu[ordre].$sousmenu[ordre].$sous_sousmenu[ordre])\r";
//article troisieme niveau
$sqlarticle2 = mysql_query("SELECT `id_article`,`auteur`,`date`,`texte`,`titre`,`date_maj`,`appartenance`,`ordre` FROM `article` WHERE `appartenance`='$sous_sousmenu[id_menu]' ORDER BY `ordre` ASC ");
if (!mysql_numrows($sqlarticle2) == 0 ) echo"\t<ul>\r";
while($article2=mysql_fetch_assoc($sqlarticle2))
{
echo "<li><a href='#' >(A)".htmlentities($article2[titre])."</a> N°($menu[ordre].$sous_sousmenumenu[ordre].$article2[ordre]) ";
}
if (!mysql_numrows($sqlarticle2) == 0 ) echo"</ul>\r";
}
if (!mysql_numrows($sqlssm) == 0 ) echo"</ul>\r";
}
if (!mysql_numrows($sqlsm) == 0 ) echo"\t\t\t\t</ul>\r";
echo"</ul>\r";
}
$time_end = getmicrotime();
$time = substr(($time_end - $time_start),0,9);
$message.="<p class='tempgene'>Script droit générée en ".$time." s</p>";
?>
[/php]
J'en ai deja pas mal sué pour obtenir ce code valide w3c qui me genrer la bonne structure de <ul> et de <li>.
Mais je crois que pour le serveur c'est aussi une grosse usine a gaz mon truc, donc je voulais simplement faire une requette qui me construise le tableau du menu, la sa fonctionne je dirais, mais je ne trouve pas comment faire le lien dans la lecture du tableau entre la cle parent et la cle id_menu...