Les sous sous-rubriques disparaissent

8 messages dans ce sujet

Posté(e) · Signaler ce message

Bonjour,

Ayant migré plusieurs sites PEEL Premium de mes clients sur un nouveau serveur, je viens de remarqué que lorsque le menu d'arborescence des catégories rencontrait des difficultés d'affichage !

En fait, si des sous-rubriques existent dans une sous-catégorie, elle n'apparaît plus ou plutôt le menu se replie.

Voici un exemple :

Catégorie A

- Sous-catégorie A-1

- Sous-catégorie A-2

-Sous catégorie A-2-1

- Sous catégorie A-3

Catégorie B

Catégorie C

En cliquant sur Catégorie A, les sous-catégories A-1,A-2 et A-3 apparaissent bien en déplié.

Mais dès lors que je cliques sur Sous-catégorie A-2 pour afficher ses sous-catégorie, tout le menu se ferme et je me retrouve à voir :

Catégorie A

Catégorie B

Catégorie C

Avez-vous déjà rencontré ce problème ?

Il s'agît d'un pb rencontré sur une version peel premium 4.0 et peel immo.

Voici un site présentant le problème (cliquez sur Guide Nutritionnel puis L'ânesse) sur www.mon-ami-baptiste.com/boutique

merci de votre aide

Jérôme

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour Jérôme,

Ce problème est réglé dans les version de PEEL Premium récentes.

Le problème que vous avez vient a priori de la fonction construit_menu_arborescent_cat, qui est présente dans modeles/xxxx/template.php

Je suppose qu'il faut modifier une requête SQL pour résoudre un problème de récupération de fils de catégorie via parent_id.

Je peux vous aider à corriger si vous me copiez le code de votre version de cette fonction.

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour Gilles,

Voici le code d'un de mes sites (sachant que pour d'autres sites il varie un tut petit peu) :

function construit_menu_arborescent_catego(&$sortie_cat, &$selectionne_cat, $parent_cat=0, $indent_cat=-1) 

{

		 global $wwwroot, $catid;

		 $indent_cat +=1;

		 if(is_array($catid)) $catid=0;

		 // Recherche de tous les noeuds ayant $parent comme noeud parent

		 $qid = mysql_query("SELECT id, parent_id, nb, nom_".$_SESSION['langue']." FROM peel_categories WHERE parent_id = $parent_cat AND etat = '1' ORDER BY position");

		 // Si la requete a abouti

		 if($qid){

			// Pour toutes les entrées

			while($cat = mysql_fetch_array($qid)){

				  // Pour aller plus loin on peut gérer des lignes de suite

				  for($i=0;$i<$indent_cat;$i++){

				  }

				  // Recherche d'enfant pour d&eacute;terminer l'aspect de l'icone (feuille ou dossier)

				  $fils_cat = mysql_query("SELECT id, parent_id, nom_".$_SESSION['langue']." FROM peel_categories WHERE parent_id = ".$cat['id']." AND etat = '1' ORDER BY position");

				  $div_cat = mysql_num_rows($fils_cat);

				  // Si il y a des enfants

				  if ($div_cat) {

					  // Ajout du lien (identique &agrave; construit menu)

					  if($cat['id']==$catid) { $sortie_cat .= "<div class=\"selectionne\">";} else { $sortie_cat .= "<div class=\"arbo\">"; }

					  $sortie_cat .= "<a class='menuleft' href='$wwwroot/ot/".mrpropre($cat['nom_'.$_SESSION['langue'].''])."-" . $cat['id'] .".html'>";

					  // Ajout de l'icone du dossier

					  // Test si le noeud est le noeud actif (id), si oui, ajoute du gras (plus visuel)

					  if($cat['id']==$catid) $sortie_cat .= "<strong>";

					  // Ajoute le nom de la cat&eacute;gorie et d&eacute;bute un calque DIV ayant pour ID l'Id de la cat&eacute;gorie

					  $sortie_cat .=  html_entity_decode($cat['nom_'.$_SESSION['langue'].'']);


					  // Si c'est la feuille active, la met en gras

					  if($cat['id']==$catid) $sortie_cat .= "</strong>";


					 $sortie_cat .= "</a></div><div id=".$cat['id'];

					  // Recherche si le noeud fait partie de l'arborescence du noeud actif

					  parent_noeud_cat($cat['id'],$catid, $actif_cat=0);

					  // Si Oui,

					  if(($cat['id'] == $catid) || ($actif_cat == 1)){

						  // Rends le calque visible

						  $sortie_cat.= " style=\"display:yes;margin-left:1em;\">\n";

					  }

					  else{

						  // Sinon, rends le calque invisible

						  $sortie_cat.= " style=\"display:none\">\n";

					  }

				  }

				  // Sinon, c'est un document 

				  else{

					  // Ajoute le lien (identique &agrave; construit_menu)

					  if($cat['id']==$catid) { $sortie_cat .= "<div class=\"selectionnebis\">";} else { $sortie_cat .= "<div class=\"arbo\">"; }

					  $sortie_cat .= "<a class='menuleft' href='$wwwroot/ot/".mrpropre($cat['nom_'.$_SESSION['langue'].''])."-" . $cat['id'] .".html'>";

					  // Si c'est la feuille active, la met en gras

					  if($cat['id']==$catid) $sortie_cat .= "<strong>";

					  // Ajoute le nom

					  $sortie_cat .= html_entity_decode($cat['nom_'.$_SESSION['langue'].'']);


					  // Si c'est la feuille active, la met en gras

					  if($cat['id']==$catid) $sortie_cat .= "</strong>";


					   $sortie_cat .= "</a></div>";

				  }

				  // Si c'est un noeud (cat&eacute;gorie)

				  if($div_cat){

					 // Appel r&eacute;cursif pour ajout des enfants

					 construit_menu_arborescent_cat($sortie_cat, $selectionne_cat, $cat['id'], $indent_cat);

					 // Ferme le calque

					 $sortie_cat.="</div>";

				  }

			}

		 }

}

Merci

Jérôme

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Je vous propose une adaptation de la fonction qui devrait aller dans la bonne direction, mais je vous laisse bien sûr compléter le code car le code de cette fonction dans sa version la plus récente est assez différent de celui-ci.

Bonjour Gilles,

Voici le code d'un de mes sites (sachant que pour d'autres sites il varie un tut petit peu) :

function construit_menu_arborescent_catego(&$sortie_cat, &$selectionne_cat, $parent_cat=0, $indent_cat=-1) 
{
global $wwwroot, $catid;
$indent_cat +=1;
if(is_array($catid)) $catid=0;
// Recherche de tous les noeuds ayant $parent comme noeud parent
$qid = mysql_query("SELECT id, parent_id, nb, nom_".$_SESSION['langue']." FROM peel_categories WHERE parent_id = $parent_cat AND etat = '1' ORDER BY position");
// Si la requete a abouti
if($qid){
// Pour toutes les entr&eacute;es
while($cat = mysql_fetch_array($qid)){
// Pour aller plus loin on peut g&eacute;rer des lignes de suite
for($i=0;$i<$indent_cat;$i++){
}
// Recherche d'enfant pour d&eacute;terminer l'aspect de l'icone (feuille ou dossier)
$fils_cat = mysql_query("SELECT id, parent_id, nom_".$_SESSION['langue']." FROM peel_categories WHERE parent_id = ".$cat['id']." AND etat = '1' ORDER BY [color="#FF0000"] ORDER BY IF(c.id='".$catid."',1,0) DESC, c.position ASC"); [/color]");
[s] $div_cat = mysql_num_rows($fils_cat);
[/s]
[color="#FF0000"] if(!empty($fils_cat)){
$div_cat = mysql_fetch_assoc($fils_cat);
}else{
$div_cat = false;
}
[/color] // Si il y a des enfants
if ($div_cat) {
// Ajout du lien (identique &agrave; construit menu)
if($cat['id']==$catid) { $sortie_cat .= "<div class=\"selectionne\">";} else { $sortie_cat .= "<div class=\"arbo\">"; }
$sortie_cat .= "<a class='menuleft' href='$wwwroot/ot/".mrpropre($cat['nom_'.$_SESSION['langue'].''])."-" . $cat['id'] .".html'>";
// Ajout de l'icone du dossier
// Test si le noeud est le noeud actif (id), si oui, ajoute du gras (plus visuel)
if($cat['id']==$catid) $sortie_cat .= "<strong>";
// Ajoute le nom de la cat&eacute;gorie et d&eacute;bute un calque DIV ayant pour ID l'Id de la cat&eacute;gorie
$sortie_cat .= html_entity_decode($cat['nom_'.$_SESSION['langue'].'']);

// Si c'est la feuille active, la met en gras
if($cat['id']==$catid) $sortie_cat .= "</strong>";

$sortie_cat .= "</a></div><div id=".$cat['id'];
// Recherche si le noeud fait partie de l'arborescence du noeud actif
parent_noeud_cat($cat['id'],$catid, $actif_cat=0);
// Si Oui,
if(($cat['id'] == $catid) || ($actif_cat == 1) [color="#FF0000"] || $div_cat['id']==$catid [/color]){
// Rends le calque visible
$sortie_cat.= " style=\"display:yes;margin-left:1em;\">\n";
}
else{
// Sinon, rends le calque invisible
$sortie_cat.= " style=\"display:none\">\n";
}
}
// Sinon, c'est un document
else{
// Ajoute le lien (identique &agrave; construit_menu)
if($cat['id']==$catid) { $sortie_cat .= "<div class=\"selectionnebis\">";} else { $sortie_cat .= "<div class=\"arbo\">"; }
$sortie_cat .= "<a class='menuleft' href='$wwwroot/ot/".mrpropre($cat['nom_'.$_SESSION['langue'].''])."-" . $cat['id'] .".html'>";
// Si c'est la feuille active, la met en gras
if($cat['id']==$catid) $sortie_cat .= "<strong>";
// Ajoute le nom
$sortie_cat .= html_entity_decode($cat['nom_'.$_SESSION['langue'].'']);

// Si c'est la feuille active, la met en gras
if($cat['id']==$catid) $sortie_cat .= "</strong>";

$sortie_cat .= "</a></div>";
}
// Si c'est un noeud (cat&eacute;gorie)
if($div_cat){
// Appel r&eacute;cursif pour ajout des enfants
construit_menu_arborescent_cat($sortie_cat, $selectionne_cat, $cat['id'], $indent_cat);
// Ferme le calque
$sortie_cat.="</div>";
}
}
}
}[/code]

Merci

Jérôme

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Les (pour mettre en rouge) et les (pour barrer) ne fonctionnent pas quand on affiche du code, mais je pense que c'est quand même lisible donc je vous laisse regarder les portions ajoutées dans

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

Je suis pas sur que ça marchera.

$cat['id'], $catid et $div_cat['id'] ne seront jamais "égaux" en meme temps.

La récursivité en PHP 5 semble différente dans la "conservation" des valeurs de variables par rapport à PHP 4

Donc vous aurez en réalité un seul niveau de sous catégorie où il sera possible "de déplier" le menu. Dès que la premiere sous-sous-catégorie sera appellée la catégorie parente immédiate sera théoriquement visible mais elle même est fille de la catégorie de niveau n-2 et parente de la catégorie n (elle est au niveau n-1 par rapport à n) qui elle ne sera pas égale à $cat['id'], $cat_id ou $div_cat['id'] donc elle sera masquée.

En fait il faut soit revoir la fonction dans son ensemble soit inclure une touche de javascript (via Ajax ou en dur sans Ajax).

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

Bonjour,

Je suis pas sur que ça marchera.

$cat['id'], $catid et $div_cat['id'] ne seront jamais "égaux" en meme temps.

La récursivité en PHP 5 semble différente dans la "conservation" des valeurs de variables par rapport à PHP 4

Donc vous aurez en réalité un seul niveau de sous catégorie où il sera possible "de déplier" le menu. Dès que la premiere sous-sous-catégorie sera appellée la catégorie parente immédiate sera théoriquement visible mais elle même est fille de la catégorie de niveau n-2 et parente de la catégorie n (elle est au niveau n-1 par rapport à n) qui elle ne sera pas égale à $cat['id'], $cat_id ou $div_cat['id'] donc elle sera masquée.

En fait il faut soit revoir la fonction dans son ensemble soit inclure une touche de javascript (via Ajax ou en dur sans Ajax).

Bonjour,

je suis confronté au même problème. Quelqu'un aurait la fonction modifiée svp? (ou une piste) J'ai pas mal de sous catégories et de sous-sous-catégories.

Merci d'avance !

Partager ce message


Lien à poster
Partager sur d’autres sites

Posté(e) · Signaler ce message

J'ai fait les modifs sur le fichier. Cependant, les catégories ne se déplient plus du coup.

Quelqu'un pourrait m'aider? Ca fait lgtps que je n'ai plus fait de php.. je suis rouillé ;)

je vous joins le code de la fonction:

function construit_menu_arborescent_cat(&$sortie_cat, &$selectionne_cat, $parent_cat=0, $indent_cat=-1)
{
global $wwwroot, $catid;
$indent_cat +=1;
if(is_array($catid)) $catid=0;
// Recherche de tous les noeuds ayant $parent comme noeud parent
$qid = mysql_query("SELECT c.id, c.parent_id, c.nom_".$_SESSION['langue']." FROM peel_categories c WHERE c.parent_id = '$parent_cat' AND c.etat = '1' ORDER BY c.position");
// Si la requete a abouti
if($qid){
// Pour toutes les entr&eacute;es
while($cat = mysql_fetch_array($qid)){
// Boucle pour ajouter l'indentation (une image vide)
// Pour aller plus loin on peut g&eacute;rer des lignes de suite
for($i=0;$i<$indent_cat;$i++){
$sortie_cat .= "<img src='$wwwroot/images/mnu_empty.gif' border=0>";
}
// Recherche d'enfant pour d&eacute;terminer l'aspect de l'icone (feuille ou dossier)
$fils_cat = mysql_query("SELECT c.id, c.parent_id, c.nom_".$_SESSION['langue']." FROM peel_categories c WHERE c.parent_id = '".$cat['id']."' AND c.etat = '1' ORDER BY c.position ORDER BY IF(c.id='".$catid."',1,0) DESC, c.position ASC");

/* $div_cat = mysql_num_rows($fils_cat); */

if(!empty($fils_cat)){
$div_cat = mysql_fetch_assoc($fils_cat);
}else{
$div_cat = false;
}

// Si il y a des enfants
if ($div_cat) {
// Ajout de l'icone du dossier
$sortie_cat .= "<img src=\"$wwwroot/images/menplus.gif\" border=\"0\">&nbsp;";
// Ajout du lien (identiqueà construit menu)
$sortie_cat .= "<a href=\"$wwwroot/achat/index.php?catid=" . $cat['id'] ."\">";

// Test si le noeud est le noeud actif (id), si oui, ajoute du gras (plus visuel)
if($cat['id']==$catid) $sortie_cat .= "<b>";
// Ajoute le nom de la cat&eacute;gorie et d&eacute;bute un calque DIV ayant pour ID l'Id de la cat&eacute;gorie
$sortie_cat .= html_entity_decode($cat['nom_'.$_SESSION['langue'].'']);

$nb = calcul_nbprod_parcat($cat['id']);

if (!empty($nb)) {$sortie_cat .= " (".$nb.") "; }

$sortie_cat .= "</a></b><br /><DIV id=".$cat['id'];
// Recherche si le noeud fait partie de l'arborescence du noeud actif
parent_noeud_cat($cat['id'],$catid, $actif_cat=0);
// Si Oui,
if(($cat['id'] == $catid) || ($actif_cat == 1 || $div_cat['id']==$catid)){
// Rends le calque visible
$sortie_cat.= " style=\"display:yes\">\n";
}
else{
// Sinon, rends le calque invisible
$sortie_cat.= " style=\"display:none\">\n";
}
}
// Sinon, c'est un document
else{
// Ajoute l'image du document
$sortie_cat .= "<img src='$wwwroot/images/menminus.gif' border=0>&nbsp;";
// Ajoute le lien (identique &agrave; construit_menu)
$sortie_cat .= "<a href=\"$wwwroot/achat/index.php?catid=" . $cat['id'] ."\">";
// Si c'est la feuille active, la met en gras
if($cat['id']==$catid) $sortie_cat .= "<b>";
// Ajoute le nom
$sortie_cat .= html_entity_decode($cat['nom_'.$_SESSION['langue'].'']);

$nb = calcul_nbprod_parcat($cat['id']);

if (!empty($nb)) {$sortie_cat .= " (".$nb.") "; }

$sortie_cat .= "</a></b><br />";
}
// Si c'est un noeud (cat&eacute;gorie)
if($div_cat){
// Appel r&eacute;cursif pour ajout des enfants
construit_menu_arborescent_cat($sortie_cat, $selectionne_cat, $cat['id'], $indent_cat);
// Ferme le calque
$sortie_cat.="</div>";
}
}
}
}[/codebox]

merci !

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant

Twitter Advisto ecommerce

Facebook PEEL Shopping