Jump to content

[breadcrumb] Réduire le nombre de catégories


Recommended Posts

Bonjour,

 

Je souhaite réduire le nombre de sous-catégories listé par le breadcrumb.

Par exemple, actuellement j'ai ceci:

 

ACCUEIL>UNIVERS BC TECH>NUMÉRIQUE>APPAREILS PHOTO NUMÉRIQUES COMPACTS, BRIDGES & HYBRIDES>APPAREILS PHOTO NUMÉRIQUES BRIDGES

 

Je souhaite obtenir ceci:

 

ACCUEIL>UNIVERS BC TECH>NUMÉRIQUE>...>APPAREILS PHOTO NUMÉRIQUES BRIDGES

 

Une idée ?

 

cdt,

Share this post


Link to post
Share on other sites

  • 3 weeks later...
  • 2 weeks later...

Bonjour,

 

pour avoir modifié le bredcrumb, il me semble de mémoire que tu trouveras en fichier breadcrumb.tpl le classement suivant (notamment pour lié au fait que le premier est toujours le même, et que le dernier n'est jamais cliquable):

> le premier (accueil en général)

> les suivants ( lu> li probablement?)

> le dernier.

 

Tu dois donc pouvoir sans trop de problème supprimer l'un de ces 3 affichages dans le breadcrumb, et tu dois probablement aussi pouvoir modifier en cssles tailles d'écriture pour chacun de ces 3 affichages.

cordialement.

Daniel

Share this post


Link to post
Share on other sites

  • 2 weeks later...

Bonjour,

 

j'ai un peu progressé dans ma recherche avec le code dans classes/Tools.php (ligne 842)

 

/**
* Get the user's journey
*
* @param integer $id_category Category ID
* @param string $path Path end
* @param boolean $linkOntheLastItem Put or not a link on the current category
* @param string [optionnal] $categoryType defined what type of categories is used (products or cms)
*/
public static function getPath($id_category, $path = '', $linkOntheLastItem = false, $categoryType = 'products')
{
 global $link, $cookie;
 if ($id_category == 1)
  return '<span class="navigation_end">'.$path.'</span>';
 $pipe = Configuration::get('PS_NAVIGATION_PIPE');
 if (empty($pipe))
  $pipe = '>';
 $fullPath = '';
 if ($categoryType === 'products')
 {
  $category = Db::getInstance()->getRow('
  SELECT id_category, level_depth, nleft, nright
  FROM '._DB_PREFIX_.'category
  WHERE id_category = '.(int)$id_category);
  if (isset($category['id_category']))
  {
   $categories = Db::getInstance()->ExecuteS('
   SELECT c.id_category, cl.name, cl.link_rewrite
   FROM '._DB_PREFIX_.'category c
   LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = c.id_category)
   WHERE c.nleft <= '.(int)$category['nleft'].' AND c.nright >= '.(int)$category['nright'].' AND cl.id_lang = '.(int)($cookie->id_lang).' AND c.id_category != 1
   ORDER BY c.level_depth ASC
   LIMIT '.(int)$category['level_depth']);
   $n = 1;
   $nCategories = (int)sizeof($categories);
   foreach ($categories AS $category)
   {
 $fullPath .=
 (($n < $nCategories OR $linkOntheLastItem) ? '<a href="'.self::safeOutput($link->getCategoryLink((int)$category['id_category'], $category['link_rewrite'])).'" title="'.htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').'">' : '').
 htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').
 (($n < $nCategories OR $linkOntheLastItem) ? '</a>' : '').
 (($n++ != $nCategories OR !empty($path)) ? '<span class="navigation-pipe">'.$pipe.'</span>' : '');
   }
   return $fullPath.$path;
  }
 }
 elseif ($categoryType === 'CMS')
 {
  $category = new CMSCategory((int)($id_category), (int)($cookie->id_lang));
  if (!Validate::isLoadedObject($category))
   die(self::displayError());
  $categoryLink = $link->getCMSCategoryLink($category);
  if ($path != $category->name)
   $fullPath .= '<a href="'.self::safeOutput($categoryLink).'">'.htmlentities($category->name, ENT_NOQUOTES, 'UTF-8').'</a><span class="navigation-pipe">'.$pipe.'</span>'.$path;
  else
   $fullPath = ($linkOntheLastItem ? '<a href="'.self::safeOutput($categoryLink).'">' : '').htmlentities($path, ENT_NOQUOTES, 'UTF-8').($linkOntheLastItem ? '</a>' : '');
  return self::getPath((int)($category->id_parent), $fullPath, $linkOntheLastItem, $categoryType);
 }
}

 

Dans mon cas , je voudrais faire en sorte de remplacer une partie du path par ... pour que tout reste sur une ligne un peu d'aide ?

Merci d'avance

Share this post


Link to post
Share on other sites

  • 2 weeks later...

Bonjour,

ayant eu le même problème je viens de trouver la solution grace a ce post, j'ai remplacer dans classes/Tools.php

 

return $fullPath.$path;

 

par

 

if (strlen($path) > 30) { //Raccourci la derniere partie
               $path = substr($path, 0, 30);
               $dernier_espace = strrpos($path," ");  //Cherche le dernier espace
               $path_court = substr($path, 0, $dernier_espace)."..."; //Affiche jusqu'au dernier espace
               return $fullPath.$path_court;
               }
               else {
               return $fullPath.$path;    
               }

 

Il suffit de remplacer les deux "30" par le nombre de caractère désiré.

Si ça peut aider quelqu'un.

  • Like 1

Share this post


Link to post
Share on other sites

  • 2 weeks later...

Salut a tous!

 

Mois j'ai un petit soucis : je migre d'un PS 1.3 et PS 1.47 et je m’aperçois que la base category a ete implémentée de deux champs nleft nright... a quoi servent ils?

 

J'ai alors importé mes catégories en laissant ces champs nuls ... du coups mon breacumb ne fonctionne plus.. comment puis je faire pour remédier a ce problème

 

Merci

Share this post


Link to post
Share on other sites

Bonjour,

ayant eu le même problème je viens de trouver la solution grace a ce post, j'ai remplacer dans classes/Tools.php

 

return $fullPath.$path;

 

par

 

if (strlen($path) > 30) { //Raccourci la derniere partie
			$path = substr($path, 0, 30);
			$dernier_espace = strrpos($path," ");  //Cherche le dernier espace
			$path_court = substr($path, 0, $dernier_espace)."..."; //Affiche jusqu'au dernier espace
			return $fullPath.$path_court;
			}
			else {
			return $fullPath.$path;	
			}

 

Il suffit de remplacer les deux "30" par le nombre de caractère désiré.

Si ça peut aider quelqu'un.

 

Bonjour,

 

dans mon cas, en reprenant l'exemple du début, c'est le nom du produit qui est coupé.

Cependant, votre code m'inspire sur une condition sur le nombre de catégorie en utilisant la variable $nCategories

Malheureusement, je ne vois pas la solution ...

 

Si quelqu'un pouvait me donner un coup de pouce

 

Merci d'avance

Share this post


Link to post
Share on other sites

neastea18, je suis désolé, je saute ton poste pour revenir a mon soucis (en plus de ne pas avoir la réponse au tien)

 

Donc personne ne sait comment fonctionne nleft / nright dans la table?

Share this post


Link to post
Share on other sites

  • 4 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More