Jump to content

[MODULE] Blockcategories modifié pour n'afficher que la catégorie mère de la catégorie active


marty69

Recommended Posts

Bonjour,

 

Humble contribution...

Je commence à avoir de nombreuses catégories, du coup pour plus de lisibilité j'utilise un menu horizontal avec les liens vers les catégories principales. J'ai modifié le module blockcategories pour n'afficher en colonne de gauche que le bloc correspondant à cette catégorie principale.

 

exemple :

 

concrètement j'utilise le menu top de Julien Breux + bloc category de presta en colonne de gauche.

 

J'ai pour l'instant 2 grosses catégories principales (filles de la catégorie principale "accueil")

 

CAT A

----SS-CAT A1

----SS-CAT A2

 

CAT B

----SS-CAT B1

----SS-CAT B2

 

Si par exemple on est dans SS-CAT A1 ou sur un produit de cette catégorie je n' affiche que la branche

 

CAT A

----SS-CAT A1

----SS-CAT A2

 

ci joint le module blockcategories modifié

 

PS : je suis en version 1.3.7 et n'ai testé que sur cette version, mais il est fort probable que cela fonction sur d'autres versions.

 

Mise à jour 11/01/2012 :

- correction du lien sur la catégorie principale

- le module ne s'affiche plus quand on est ni dans une catégorie ni dans une fiche produit

 

Mise à jour 10/01/2012 :

- correction de pb de navigation quand un produit appartient à plusieurs catégories

- correction de pb aléatoires d'affichage quand on est sur un produit

- le module s'affiche maintenant en fonction du résultat de recherche d'un produit

 

(Merci à daYmo)

blockcategories.zip

Edited by marty69 (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 3 weeks later...

oui j'avais fait cela moi aussi depuis le début.

Le seul hic avec ton code c'est que si un produit appartient à plusieurs catégories ... y'a un petit problème de navigation.

 

Par exemple

CAT A

----SS-CAT A1

----SS-CAT A2

 

CAT B

----SS-CAT B1

----SS-CAT B2

 

Si un produit P appartient à la sous catégorie A1 (catégorie par défaut) ET à la sous catégorie B2

Si je navigue dans la catégorie B -> puis sous-catégorie B2 et que je clique dans la liste sur le produit P : l'arbre des catégories change pour afficher la branche

CAT A

----SS-CAT A1

----SS-CAT A2

 

alors que j'étais dans

CAT B

----SS-CAT B1

----SS-CAT B2

 

Alors qu'avec l'arbre dynamique de base cela fonctionne parfaitement...

Link to comment
Share on other sites

Voici le fichier et une bonne version de faire ce que tu fais... en un peu mieux par rapport au problème exposé plus haut.

Si on accède direct à la fiche produit ou via le formulaire de recherche : les catégories affichées sont celles de sa catégorie par défaut.

En revanche si on vient de l'éventuelle 2ème ou nième catégorie dans laquelle est placé ce produit, ce sera bien la branche de cette catégorie qui sera affichée.

 

Cordialement,

Damien

blockcategories.zip

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,

Bravo pour votre boulot

peut être hors sujet, mais comme vous avez travaillé dans le sujet, aurez vous une piste, pour que :

si une catégories contient un seul produit => le lien de cette catégorie envoi directement sur ce produit.

Merci d'avance.

Link to comment
Share on other sites

Bonjour,

 

Une categorie avec un seul produit .... c'est quand même étrange à la base non ?

 

Bien sûr que c'est possible mais il faut modifier pas mal de choses et c'est un comportement quelque peu inhabituel.

Link to comment
Share on other sites

Hello !

 

Désolé je viens de voir qu'il y a des posts dans ce sujet :)

Merci pour la contribution daYmo, effectivement je n'avais pas prévu ce cas de figure. Et puis le dev c'est pas franchement mon gros fort :)

 

Je vais voir ce que ca donne avec tes modifs.

 

ceci dit c'est une version pour PS 1.4 ? ca risque de ne pas fonctionner, je tourne sur 1.3.7

Sans vouloir abuser, pourrais tu en faire une version pour 1.3 ? ou au moins indiquer le code modifié dans ta version pour l'adapter au module pour 1.3 ?

 

Merci pour le partage en tout cas.

Link to comment
Share on other sites

@daYmo (ou quiconque pourrait aider)

 

Je pense avoir réussi à faire fonctionner tes modifs sur une version 1.3.7

 

2 autres questions :

 

- le module blockcategories s'affiche (partiellement) sur la page d'accueil. Comment éviter cela (autrement que de cacher le module pour "index.php" dans les parametres du module en back office) ?

 

- Comment afficher le nom de la catégorie principale en titre de bloc plutot que le nom "Catégories" ? j'imagine qu'il faut passer un paramètre au tpl, mais lequel ? existe-t-il déja ?

 

Merci

Link to comment
Share on other sites

Malheureusement, chez moi j'ai le même problème :

 

- il affiche le dernier menu catégorie

- quand je clique sur le header du bloc (lien vers la catégorie principale), ça me renvoie une page blanche... car le ID de la catagorie n'est pas reprise dans le lien...

 

Avez-vous le même problème?

Link to comment
Share on other sites

Sur PS 1.4.6.2 J'ai remplacé le fichier blockcategories.php par celui de Daymo , ca fonctionne pour les categories mais cela me cause une erreur de serveur (Internal Server Error) sur la page d'accueil monsite.com/maboutique/ ou monsite.com/maboutique/fr

Link to comment
Share on other sites

module mis à jour : cf premier post

 

détails :

 

Perso je n'affiche pas le module catégories quand je ne suis pas dans une catégorie ou un produit (ex : une page cms). Dans blockcategories.php rajouter ligne 143 :

else return null;

 

Correction du lien sur la catégorie principale. Dans blockcategories.php rajouter après ligne 193 :

// Add category ID to link rewrite
$rootCateg->link_rewrite = $link->getCategoryLink($main_category, $rootCateg->link_rewrite);

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour!

 

Merci pour cette super contribution, j'utilise le fichier de daymo, fonctionne tres bien sur 1.4.6.2. Par contre si j'ajoute

"else return null;" ligne 195

 

ca plante les liens cms, il reprend le premier lien cms visité pour tous les autres.

Une solution plutôt que de jouer avec les points d'accroche?

 

voici le bout de code où il figure

 

Merci

 

 

 

 

 Tools::enableCache();
 if (!$this->isCached('blockcategories.tpl', $smartyCacheId))
 {
  $maxdepth = Configuration::get('BLOCK_CATEG_MAX_DEPTH');
  if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT c.id_parent, c.id_category, cl.name, cl.description, cl.link_rewrite
FROM `'._DB_PREFIX_.'category` c
LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND `id_lang` = '.$id_lang.')
LEFT JOIN `'._DB_PREFIX_.'category_group` cg ON (cg.`id_category` = c.`id_category`)
WHERE (c.`active` = 1 OR c.`id_category` = 1)
'.((int)($maxdepth) != 0 ? ' AND `level_depth` <= '.(int)($maxdepth) : '').'
AND cg.`id_group` IN ('.pSQL($groups).')
GROUP BY id_category
ORDER BY `level_depth` ASC, c.`position` ASC')
  )
return;

  $resultParents = array();
  $resultIds = array();
  foreach ($result as &$row)
  {
$resultParents[$row['id_parent']][] = &$row;
$resultIds[$row['id_category']] = &$row;
  }
  if (Tools::isSubmit('id_category'))
  {
$cookie->last_visited_category = $id_category;
$smarty->assign('currentCategoryId', $cookie->last_visited_category);  
  }
  elseif (Tools::isSubmit('id_product'))
  {
if (!isset($cookie->last_visited_category) OR !Product::idIsOnCategoryId($id_product, array('0' => array('id_category' => $cookie->last_visited_category))))
{
 $product = new Product($id_product);
 if (isset($product) AND Validate::isLoadedObject($product))
  $cookie->last_visited_category = (int)($product->id_category_default);

}
$smarty->assign('currentCategoryId', (int)($cookie->last_visited_category));  
  }
// appears only on categories page
else return null;


  // Get the level1 parent category of $main_category :
  $main_category=1;

Link to comment
Share on other sites

Bonjour,

 

Comment accedes tu à tes pages CMS ? par un bloc de liens ?

Si oui tes liens sont ils déclarés en liens directs (http://tondomaine/lien) ou relatifs (/lien) ?

si ils sont en relatifs essaie des les passer en liens directs.

Si cela vient bien de la il faudrait pourvoir ajouter le domaine au lien depuis le code ce qui serait plus propre

Link to comment
Share on other sites

Je n'utilise pas ce bloc.

Pour vérifier je l'ai installé sur ma version de dev en local et à priori cela fonctionne. (par contre je n'ai pas activé l'url Rewrinting, peut être que cela joue)

 

Je re-précise aussi que je suis en version 1.3.7

Link to comment
Share on other sites

chez moi ca bug avec ou sans l'url rewriting, par contre ca fonctionne bien si je force la compil de smarty (pas top en prod... lol) bon sinon je mettrai des exceptions dans les points d'accroche, mais j'aime pas quand y a des trucs bizarres..

Link to comment
Share on other sites

  • 7 months later...
  • 2 weeks later...

- Comment afficher le nom de la catégorie principale en titre de bloc plutot que le nom "Catégories" ? j'imagine qu'il faut passer un paramètre au tpl, mais lequel ? existe-t-il déja ?

 

Je cherche précisément à faire cela. Comment as-tu procédé ? Je te remercie par avance :)) J'ai épluché ton fichier et celui de Daymo que j'utilise.. mais je ne vois pas où ça se trouve..

Link to comment
Share on other sites

Bonjour,

Bravo pour votre boulot

peut être hors sujet, mais comme vous avez travaillé dans le sujet, aurez vous une piste, pour que :

si une catégories contient un seul produit => le lien de cette catégorie envoi directement sur ce produit.

Merci d'avance.

 

Bonjour,

 

Votre solution m’intéresse.

J'ai une catégories, contenant 12 sous catégories qui mènent vers mes produits.

Je voudrais, à l'affichage de ma catégorie que mes liens pointent directement vers certains produits et non pas vers les sous-catégories et je pense que votre solution peut me servir.

 

Merci d'avance.

Link to comment
Share on other sites

  • 2 months later...

Bonjour, j'ai un problème avec le module accompagné du cache smarty.

Avec le cache activé, j'ai des problèmes dans les pages fabricant.

Peut importe la page fabricant à laquelle je veux accéder, je tombe toujours sur la même.

En page panier, je me retrouve toujours avec le même produit même si je le supprime du panier et que j'en ajoute un autre.

 

La seule solution est soit de désactiver le module, soit de désactiver le cache smarty ou de supprimer les fichiers dans tools->smarty->cache.

 

Quel peut en être la cause?

 

merci

Link to comment
Share on other sites

  • 4 weeks later...

First of all excuse the translation

 

Try commenting on line 322

 

 $smarty->cache_lifetime = 31536000; // 1 Year
 $display = $this->display(__FILE__, 'blockcategories_footer.tpl', $smartyCacheId);
 Tools::restoreCacheSettings();
 return $display;

 

thus leaving it

 

}
 //$smarty->cache_lifetime = 31536000; // 1 Year
 $display = $this->display(__FILE__, 'blockcategories_footer.tpl', $smartyCacheId);
 Tools::restoreCacheSettings();
 return $display;

 

I hope it works for you.

Link to comment
Share on other sites

  • 1 month later...
  • 2 weeks later...

Petit doute comme même concernant la modification

 

J'ai simplement écrasé mes fichiers (racine/modules/bockcategories/(le php et les 3 tpl)) par les vôtres

Vidé le cache et rafraîchi...

 

C'est bien comme ça qui faut faire ?

Ou j'ai manqué une étape ?

Link to comment
Share on other sites

  • 2 weeks later...
  • 2 weeks later...
  • 2 months later...
  • 1 month later...

bonjour,

 

je suis sur la version 1.5.4.1.

 

j'ai plusieurs catégorie avec 1 seules produits et je souhaite affiché directement le détail du produit (product.tpl).

 

pouvez-vous m'aidé a avancez, par avance merci.

Link to comment
Share on other sites

  • 1 month later...

Bonjour,
 
Tout d'abord, le code ci-dessous fonctionne sur la version 1.5.4.1 de Prestashop.
 
Après une bonne demi-journée de recherche, j'ai finalement bidouillé la fonction "hookLeftColumn" du fichier "/modules/blockcategories/blockcategories.php" pour afficher la catégorie courante à partir du niveau 2.
 
En prenant l'exemple de cette navigation :
 
Accueil
 -- categorie 1
    -- sous-categorie 1-1
    -- sous-categorie 1-2
       -- sous-categorie 1-2-A
       -- sous-categorie 1-2-B
       -- sous-categorie 1-2-C
    -- sous-categorie 1-3
       -- sous-categorie 1-3-A
       -- sous-categorie 1-3-B
    -- sous-categorie 1-4
    -- sous-categorie 1-5
 -- categorie 2
 -- categorie 3
    -- sous-categorie 3-1
    -- sous-categorie 3-2
    -- sous-categorie 3-3
       -- sous-categorie 3-3-A
       -- sous-categorie 3-3-B
 -- categorie 4
 
Scénario 1 : On est sur "categorie 1", on affiche : 
 
 -- categorie 1 (selected)
    -- sous-categorie 1-1
    -- sous-categorie 1-2
    -- sous-categorie 1-3
    -- sous-categorie 1-4
    -- sous-categorie 1-5
 
Scénario 2 : On est sur "categorie 3", on affiche : 
 
 -- categorie 3 (selected)
    -- sous-categorie 3-1
    -- sous-categorie 3-2
    -- sous-categorie 3-3
 
Scénario 3 : On est sur "categorie 1-3", on affiche : 
 
 -- categorie 1
    -- sous-categorie 1-1
    -- sous-categorie 1-2
    -- sous-categorie 1-3 (selected)
       -- sous-categorie 1-3-A
       -- sous-categorie 1-3-B
    -- sous-categorie 1-4
    -- sous-categorie 1-5
 
... Et ainsi de suite en fonction de la profondeur...
 
Voici la fonction :

 

public function hookLeftColumn($params)
{
$id_customer = (int)$params['cookie']->id_customer;
// Get all groups for this customer and concatenate them as a string: "1,2,3..."
// It is necessary to keep the group query separate from the main select query because it is used for the cache
$groups = $id_customer ? implode(', ', Customer::getGroupsStatic($id_customer)) : Configuration::get('PS_UNIDENTIFIED_GROUP');
$id_product = (int)Tools::getValue('id_product', 0);
$id_category = (int)Tools::getValue('id_category', 0);
$id_lang = (int)$params['cookie']->id_lang;
$smartyCacheId = 'blockcategories|'.$this->context->shop->id.'_'.$groups.'_'.$id_lang.'_'.$id_product.'_'.$id_category;
$this->context->smarty->cache_lifetime = 31536000; // 1 Year
Tools::enableCache();
if (!$this->isCached('blockcategories.tpl', $smartyCacheId))
{
$maxdepth = Configuration::get('BLOCK_CATEG_MAX_DEPTH');
if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
SELECT c.id_parent, c.id_category, cl.name, cl.description, cl.link_rewrite
FROM `'._DB_PREFIX_.'category` c
INNER JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND cl.`id_lang` = '.$id_lang.Shop::addSqlRestrictionOnLang('cl').')
INNER JOIN `'._DB_PREFIX_.'category_shop` cs ON (cs.`id_category` = c.`id_category` AND cs.`id_shop` = '.(int)$this->context->shop->id.')
WHERE (c.`active` = 1 OR c.`id_category` = '.(int)Configuration::get('PS_HOME_CATEGORY').')
AND c.`id_category` != '.(int)Configuration::get('PS_ROOT_CATEGORY').'
'.((int)$maxdepth != 0 ? ' AND `level_depth` <= '.(int)$maxdepth : '').'
AND c.id_category IN (SELECT id_category FROM `'._DB_PREFIX_.'category_group` WHERE `id_group` IN ('.pSQL($groups).'))
ORDER BY `level_depth` ASC, '.(Configuration::get('BLOCK_CATEG_SORT') ? 'cl.`name`' : 'cs.`position`').' '.(Configuration::get('BLOCK_CATEG_SORT_WAY') ? 'DESC' : 'ASC')))
return Tools::restoreCacheSettings();
 
$resultParents = array();
$resultIds = array();
 
foreach ($result as &$row)
{
$resultParents[$row['id_parent']][] = &$row;
$resultIds[$row['id_category']] = &$row;
}
 
$blockCategTree = $this->getTree($resultParents, $resultIds, Configuration::get('BLOCK_CATEG_MAX_DEPTH'));
 
$isDhtml = (Configuration::get('BLOCK_CATEG_DHTML') == 1 ? true : false);
if (Tools::isSubmit('id_category'))
{
$this->context->cookie->last_visited_category = $id_category;
$this->smarty->assign('currentCategoryId', $this->context->cookie->last_visited_category);
}
if (Tools::isSubmit('id_product'))
{
if (!isset($this->context->cookie->last_visited_category)
|| !Product::idIsOnCategoryId($id_product, array('0' => array('id_category' => $this->context->cookie->last_visited_category)))
|| !Category::inShopStatic($this->context->cookie->last_visited_category, $this->context->shop))
{
$product = new Product($id_product);
if (isset($product) && Validate::isLoadedObject($product))
$this->context->cookie->last_visited_category = (int)$product->id_category_default;
}
$this->smarty->assign('currentCategoryId', (int)$this->context->cookie->last_visited_category);
}
 
$oCategory = new CategoryCore((int)$this->context->cookie->last_visited_category, $id_lang);
$sCurrentCateogry = $oCategory->id;
$parentId = $oCategory->id_parent;
 
if ( $parentId != 2 ) // Je fais un test sur 2 car c'est l'ID de la Home chez moi
{
while ( $parentId != 2)
{
$oCategory = new CategoryCore($parentId,$id_lang);
$sCatId = $oCategory->id;
$parentId = $oCategory->id_parent;
}
$blockCategTree = $this->getTree($resultParents, $resultIds, Configuration::get('BLOCK_CATEG_MAX_DEPTH'), $sCatId);
}
else
$blockCategTree = $this->getTree($resultParents, $resultIds, Configuration::get('BLOCK_CATEG_MAX_DEPTH'), $sCurrentCateogry);
 
 
unset($resultParents, $resultIds);
 
$this->smarty->assign('blockCategTree', $blockCategTree);
 
if (file_exists(_PS_THEME_DIR_.'modules/blockcategories/blockcategories.tpl'))
$this->smarty->assign('branche_tpl_path', _PS_THEME_DIR_.'modules/blockcategories/category-tree-branch.tpl');
else
$this->smarty->assign('branche_tpl_path', _PS_MODULE_DIR_.'blockcategories/category-tree-branch.tpl');
$this->smarty->assign('isDhtml', $isDhtml);
}
$display = $this->display(__FILE__, 'blockcategories.tpl', $smartyCacheId);
Tools::restoreCacheSettings();
return $display;
}
 
---------
 
Et une micro modif au .tpl qui se trouve dans le même répertoire "/modules/blockcategories/blockcategories.tpl" : 
 
<!-- Block categories module -->
<div id="categories_block_left" class="block">
<!-- <p class="title_block">{l s='Categories' mod='blockcategories'}</p> -->
<h4>{$blockCategTree.name}</h4>
<div class="block_content">
<ul class="tree {if $isDhtml}dhtml{/if}">
{foreach from=$blockCategTree.children item=child name=blockCategTree}
{if $smarty.foreach.blockCategTree.last}
{include file="$branche_tpl_path" node=$child last='true'}
{else}
{include file="$branche_tpl_path" node=$child}
{/if}
{/foreach}
</ul>
{* Javascript moved here to fix bug #PSCFI-151 *}
<script type="text/javascript">
// <![CDATA[
// we hide the tree only if JavaScript is activated
$('div#categories_block_left ul.dhtml').hide();
// ]]>
</script>
</div>
</div>
<!-- /Block categories module -->
 
---------
 
En espérant que cela serve ;)
 
Hideo
Edited by hideo (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 3 months later...

Oui je confirme c'est génial !!

ça fonctionne nickel...

 

Petite détail qui serait bien de faire c'est de rajouter le titre de la famille en haut de l'arbre 

 

Ca fait longtemps que je ne suis pas remis dans le code

pouvez vous me dire comment on peut appeler ce nom ?

Link to comment
Share on other sites

Oui je confirme c'est génial !!

ça fonctionne nickel...

 

Petite détail qui serait bien de faire c'est de rajouter le titre de la famille en haut de l'arbre 

 

Ca fait longtemps que je ne suis pas remis dans le code

pouvez vous me dire comment on peut appeler ce nom ?

 

C'est déjà inclus dans le code, sur cette ligne : <h4>{$blockCategTree.name}</h4>

Link to comment
Share on other sites

  • 2 weeks later...
  • 6 months later...

 

Bonjour,

 

Tout d'abord, le code ci-dessous fonctionne sur la version 1.5.4.1 de Prestashop.

 

Après une bonne demi-journée de recherche, j'ai finalement bidouillé la fonction "hookLeftColumn" du fichier "/modules/blockcategories/blockcategories.php" pour afficher la catégorie courante à partir du niveau 2.

 

En prenant l'exemple de cette navigation :

 

Accueil

 -- categorie 1

    -- sous-categorie 1-1

    -- sous-categorie 1-2

       -- sous-categorie 1-2-A

       -- sous-categorie 1-2-B

       -- sous-categorie 1-2-C

    -- sous-categorie 1-3

       -- sous-categorie 1-3-A

       -- sous-categorie 1-3-B

    -- sous-categorie 1-4

    -- sous-categorie 1-5

 -- categorie 2

 -- categorie 3

    -- sous-categorie 3-1

    -- sous-categorie 3-2

    -- sous-categorie 3-3

       -- sous-categorie 3-3-A

       -- sous-categorie 3-3-B

 -- categorie 4

 

Scénario 1 : On est sur "categorie 1", on affiche : 

 

 -- categorie 1 (selected)

    -- sous-categorie 1-1

    -- sous-categorie 1-2

    -- sous-categorie 1-3

    -- sous-categorie 1-4

    -- sous-categorie 1-5

 

Scénario 2 : On est sur "categorie 3", on affiche : 

 

 -- categorie 3 (selected)

    -- sous-categorie 3-1

    -- sous-categorie 3-2

    -- sous-categorie 3-3

 

Scénario 3 : On est sur "categorie 1-3", on affiche : 

 

 -- categorie 1

    -- sous-categorie 1-1

    -- sous-categorie 1-2

    -- sous-categorie 1-3 (selected)

       -- sous-categorie 1-3-A

       -- sous-categorie 1-3-B

    -- sous-categorie 1-4

    -- sous-categorie 1-5

 

... Et ainsi de suite en fonction de la profondeur...

 

Voici la fonction :

 

public function hookLeftColumn($params)
{
$id_customer = (int)$params['cookie']->id_customer;
// Get all groups for this customer and concatenate them as a string: "1,2,3..."
// It is necessary to keep the group query separate from the main select query because it is used for the cache
$groups = $id_customer ? implode(', ', Customer::getGroupsStatic($id_customer)) : Configuration::get('PS_UNIDENTIFIED_GROUP');
$id_product = (int)Tools::getValue('id_product', 0);
$id_category = (int)Tools::getValue('id_category', 0);
$id_lang = (int)$params['cookie']->id_lang;
$smartyCacheId = 'blockcategories|'.$this->context->shop->id.'_'.$groups.'_'.$id_lang.'_'.$id_product.'_'.$id_category;
$this->context->smarty->cache_lifetime = 31536000; // 1 Year
Tools::enableCache();
if (!$this->isCached('blockcategories.tpl', $smartyCacheId))
{
$maxdepth = Configuration::get('BLOCK_CATEG_MAX_DEPTH');
if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
SELECT c.id_parent, c.id_category, cl.name, cl.description, cl.link_rewrite
FROM `'._DB_PREFIX_.'category` c
INNER JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND cl.`id_lang` = '.$id_lang.Shop::addSqlRestrictionOnLang('cl').')
INNER JOIN `'._DB_PREFIX_.'category_shop` cs ON (cs.`id_category` = c.`id_category` AND cs.`id_shop` = '.(int)$this->context->shop->id.')
WHERE (c.`active` = 1 OR c.`id_category` = '.(int)Configuration::get('PS_HOME_CATEGORY').')
AND c.`id_category` != '.(int)Configuration::get('PS_ROOT_CATEGORY').'
'.((int)$maxdepth != 0 ? ' AND `level_depth` <= '.(int)$maxdepth : '').'
AND c.id_category IN (SELECT id_category FROM `'._DB_PREFIX_.'category_group` WHERE `id_group` IN ('.pSQL($groups).'))
ORDER BY `level_depth` ASC, '.(Configuration::get('BLOCK_CATEG_SORT') ? 'cl.`name`' : 'cs.`position`').' '.(Configuration::get('BLOCK_CATEG_SORT_WAY') ? 'DESC' : 'ASC')))
return Tools::restoreCacheSettings();
 
$resultParents = array();
$resultIds = array();
 
foreach ($result as &$row)
{
$resultParents[$row['id_parent']][] = &$row;
$resultIds[$row['id_category']] = &$row;
}
 
$blockCategTree = $this->getTree($resultParents, $resultIds, Configuration::get('BLOCK_CATEG_MAX_DEPTH'));
 
$isDhtml = (Configuration::get('BLOCK_CATEG_DHTML') == 1 ? true : false);
if (Tools::isSubmit('id_category'))
{
$this->context->cookie->last_visited_category = $id_category;
$this->smarty->assign('currentCategoryId', $this->context->cookie->last_visited_category);
}
if (Tools::isSubmit('id_product'))
{
if (!isset($this->context->cookie->last_visited_category)
|| !Product::idIsOnCategoryId($id_product, array('0' => array('id_category' => $this->context->cookie->last_visited_category)))
|| !Category::inShopStatic($this->context->cookie->last_visited_category, $this->context->shop))
{
$product = new Product($id_product);
if (isset($product) && Validate::isLoadedObject($product))
$this->context->cookie->last_visited_category = (int)$product->id_category_default;
}
$this->smarty->assign('currentCategoryId', (int)$this->context->cookie->last_visited_category);
}
 
$oCategory = new CategoryCore((int)$this->context->cookie->last_visited_category, $id_lang);
$sCurrentCateogry = $oCategory->id;
$parentId = $oCategory->id_parent;
 
if ( $parentId != 2 ) // Je fais un test sur 2 car c'est l'ID de la Home chez moi
{
while ( $parentId != 2)
{
$oCategory = new CategoryCore($parentId,$id_lang);
$sCatId = $oCategory->id;
$parentId = $oCategory->id_parent;
}
$blockCategTree = $this->getTree($resultParents, $resultIds, Configuration::get('BLOCK_CATEG_MAX_DEPTH'), $sCatId);
}
else
$blockCategTree = $this->getTree($resultParents, $resultIds, Configuration::get('BLOCK_CATEG_MAX_DEPTH'), $sCurrentCateogry);
 
 
unset($resultParents, $resultIds);
 
$this->smarty->assign('blockCategTree', $blockCategTree);
 
if (file_exists(_PS_THEME_DIR_.'modules/blockcategories/blockcategories.tpl'))
$this->smarty->assign('branche_tpl_path', _PS_THEME_DIR_.'modules/blockcategories/category-tree-branch.tpl');
else
$this->smarty->assign('branche_tpl_path', _PS_MODULE_DIR_.'blockcategories/category-tree-branch.tpl');
$this->smarty->assign('isDhtml', $isDhtml);
}
$display = $this->display(__FILE__, 'blockcategories.tpl', $smartyCacheId);
Tools::restoreCacheSettings();
return $display;
}
 
---------
 
Et une micro modif au .tpl qui se trouve dans le même répertoire "/modules/blockcategories/blockcategories.tpl" : 
 
<!-- Block categories module -->
<div id="categories_block_left" class="block">
<!-- <p class="title_block">{l s='Categories' mod='blockcategories'}</p> -->
<h4>{$blockCategTree.name}</h4>
<div class="block_content">
<ul class="tree {if $isDhtml}dhtml{/if}">
{foreach from=$blockCategTree.children item=child name=blockCategTree}
{if $smarty.foreach.blockCategTree.last}
{include file="$branche_tpl_path" node=$child last='true'}
{else}
{include file="$branche_tpl_path" node=$child}
{/if}
{/foreach}
</ul>
{* Javascript moved here to fix bug #PSCFI-151 *}
<script type="text/javascript">
// <![CDATA[
// we hide the tree only if JavaScript is activated
$('div#categories_block_left ul.dhtml').hide();
// ]]>
</script>
</div>
</div>
<!-- /Block categories module -->
 
---------
 
En espérant que cela serve ;)
 
Hideo

 

Bonjour,

 

Votre code fonctionne pour la version 1.5.6 mais cela ralentit considérablement le site jusqu'à saturation....

Sur mon site j'ai en plus le bloc navigation à facette qui tourne. Serait-ce du à cela ?

J'ai remis le bloccategories d'origine et hop tout refonctionne ....

Pouvez vous m'aider pour voir ce problème ?

 

JMA

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...