Jump to content

[Résolu]Bloc navigation à facette en haut du product-list


Recommended Posts

Bonjour à tous !

 

Je sais que le sujet a été évoqué plusieurs fois, mais systématiquement de façon partielle.

Je n'arrive pas à trouver de "tuto" simple et efficace pour réaliser cette manipulation.

 

Ce que je souhaite c'est greffer le bloc navigation à facette en haut de "product-list", juste sous les "Scènes".

 

J'ai des pistes, mais je n'arrive pas à concrétiser.

Est-ce qu'une âme charitable (et qui arrive à comprendre le code) pourrai nous expliquer ?

Je dis nous, car je suis convaincu que ça pourrai aider beaucoup de monde, pour le bloc layered mais aussi d'autres modules.

 

Est-ce que quelqu'un pourrai nous résumer ça simplement ?

Ici pour 1.4

merci de votre aide ;)

 

Edited by jujutte24 (see edit history)
Link to comment
Share on other sites

Salut jujutte24,

 

C'est possible!!

1/ Ajouter un hook {$HOOK_FEATURED_CATEGORY} dans category.tpl de votre thème

2/ Ajouter le hook via override dans ovrride/controller/CategoryController.php

<?php

class CategoryController extends CategoryControllerCore
{
    public function process()
    {
        parent::process();

        self::$smarty->assign('HOOK_FEATURED_CATEGORY', Module::hookExec('categoryFeaturedHook'));
    }
}

?> 

3/ Ajouter le hook categoryFeaturedHook dans votre DB via PHPMYADMIN

4/ Ajouter les lignes suivantes dans blocklayered.php du module à facette.

	public function hookcategoryFeaturedHook($params)
	{
		return $this->generateFiltersBlock($this->getSelectedFilters());
	}

Il ne reste plus qu'a greffer le module sur ce nouveau hook dans l'admin.

 

5/ Pour mettre en forme correctement l'affichage il vous faudra modifier le css et enlever la classe block dans le blocklayered.tpl comme ceci 
<div id="layered_block_left" class="block">

pour arriver à ceci 

<div id="layered_block_left">

Tester sur PS 1.4.7 

 

Ckarone

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

Bonsoir,

 

ckarone vous m'avez devancée pour l'installation dans un hook ! ;-)

Après des modifications de css... impossible de faire apparaître ce bloc correctement (pas d'affichage du curseur de prix et filtres qui ne fonctionnaient pas....)

Finalement, j'ai laissé le module dans la colonne de gauche, je l'ai étendu sur les 2 autres colonnes et cela fonctionne. Il suffit de descendre la colonne centrale et celle de droite avec le css pour que cela s'affiche correctement !!!

Encore un problème résolu !!!;-)

Link to comment
Share on other sites

@jujutte24 votre erreur indique que vous n'avez ajouté le code dans le module ou alors il est mal placé dans le code :

public function hookcategoryFeaturedHook($params)
	{
		return $this->generateFiltersBlock($this->getSelectedFilters());
	} 

@monvidedressing le module fonctionne pourtant bien chez, même le filtre prix !!

 

ckarone

Edited by ckarone (see edit history)
Link to comment
Share on other sites

Product-list.tpl est la liste des produits qui est inclu dans category.tpl, il faut bien ajouter le hook dans category.tpl .

 

Le code à ajouter dans le module est à placé en dessous de ceci 

	public function hookLeftColumn($params)
	{
		return $this->generateFiltersBlock($this->getSelectedFilters());
	}

ce qui donne 

	public function hookRightColumn($params)
	{
		return $this->hookLeftColumn($params);
	}
	public function hookcategoryFeaturedHook($params)
	{
		return $this->generateFiltersBlock($this->getSelectedFilters());
	}

Et pour mettre en forme correctement l'affichage il vous faudra modifier le css et enlever la classe block dans le blocklayered.tpl comme ceci 

<div id="layered_block_left" class="block">

pour arriver à ceci 

<div id="layered_block_left">

Ckarone

Edited by ckarone (see edit history)
Link to comment
Share on other sites

Bon, ça ne marche toujours pas.

 

Le Hook est bien créé dans la BDD, avec les mêmes conditions que le Hook "leftColumn", sauf Liveedit qui n'est pas à 1.

J'ai intégré {$HOOK_FEATURED_CATEGORY} dans la fichier category.tpl, en dessous de scenes, là où je souhaite le placer.

J'ai coller

public function hookLeftColumn($params)
	{
		return $this->generateFiltersBlock($this->getSelectedFilters());
	}

au bon endroit, et supprimer le "class: bloc" du TPL.

Mais j'ai encore ce message d'erreur. :unsure:

A n'y rien comprendre...

Edited by jujutte24 (see edit history)
Link to comment
Share on other sites

J'ai bien le Hook qui apparait dans le BO dans la liste des Hook,je l'ai nommé "categoryFeatured".

 

Dans le category.tpl, je l'ai placé ici :

{if isset($subcategories)}
		<!-- Subcategories -->
		{$HOOK_FEATURED_CATEGORY}
		<div id="subcategories">
			<!--<h3>{l s='Subcategories'}</h3>-->
			<ul class="inline_list">
			{foreach from=$subcategories item=subcategory}
				<li>
					<a href="{$link->getCategoryLink($subcategory.id_category, $subcategory.link_rewrite)|escape:'htmlall':'UTF-8'}" title="{$subcategory.name|escape:'htmlall':'UTF-8'}">

Ensuite, dans le Blocklayered.php, j'ai ça :

	public function hookLeftColumn($params)
	{
		return $this->generateFiltersBlock($this->getSelectedFilters());
	}
	
	public function hookRightColumn($params)
	{
		return $this->hookLeftColumn($params);
	}
	public function hookcategoryFeaturedHook($params)
	{
		return $this->generateFiltersBlock($this->getSelectedFilters());
	}
	public function hookHeader($params)
	{
		global $smarty, $cookie;
		

et pour finir, dans le blocklayered.tpl, j'ai supprimé le "class":

</script>
<div id="layered_block_left">
	<h4>{l s='Catalog' mod='blocklayered'}</h4>
	<div class="block2_content_navigation">
		<form action="#" id="layered_form">
			<div>

et je bien essayé dans le BO de greffer.

post-309106-0-88155600-1386326750_thumb.jpg

 

Mais ça ne marche pas...

Link to comment
Share on other sites

jujutte24, si vous avez nommé le hook categoryFeatured en bdd , la function doit se nommer hookcategoryFeatured et pas autrement.

 

Au passage dans category.tpl vous devriez sortir le hook de la condition des sous-catégories.

Link to comment
Share on other sites

jujutte24, si vous avez nommé le hook categoryFeatured en bdd , la function doit se nommer hookcategoryFeatured et pas autrement.

 

Au passage dans category.tpl vous devriez sortir le hook de la condition des sous-catégories.

Bonjour,

merci aussi de votre aide.

J'ai donc renommé "hookcategoryFeaturedHook" en "hookcategoryFeatured", et le module ce greffe dessus sans problème !

 

Mais bon, côté front office, toujours rien de visible.

J'ai recodé :

{if isset($subcategories)}
        <!-- Subcategories -->
        {$HOOK_FEATURED_CATEGORY}

en

{$HOOK_FEATURED_CATEGORY}
{if isset($subcategories)}
        <!-- Subcategories -->

Mais rien....

 

Link to comment
Share on other sites

Oui, bien sur ;)

 

J'ai relevé une erreur en activant les logs :

Notice: Undefined index: HOOK_FEATURED_CATEGORY in /home/monsite/public_html/tools/smarty/compile/05b29a00bea620110fdfcca6c5e0d8beeac282f7.file.category.tpl.php on line 73 Notice: Trying to get property of non-object in /home/monsite/public_html/tools/smarty/compile/05b29a00bea620110fdfcca6c5e0d8beeac282f7.file.category.tpl.php on line 73

 

Cordialement

Edited by jujutte24 (see edit history)
Link to comment
Share on other sites

ah, il y a donc un problème dans la déclaration de votre hook

Je ne me souviens pas trop pour Presta 1.4 mais apparemment il faut aussi le déclarer dans le frontController

http://www.prestaphp.com/prestashop-ajouter-un-hook-dans-une-boutique-prestashop-1-4.html

Je vous conseille donc de le faire "proprement" par un override

Comme expliqué ici dans l'etape 2

http://blog.lahaut.info/2011/05/rajouter-un-nouveau-hook-dans-prestashop-1-4-grace-a-loverride/
  • Like 1
Link to comment
Share on other sites

Bon, je suis bloqué sur le CSS.

Il me semble que le module fait appel à plusieurs feuilles de style.

le global.css du thème, et la feuille de style du module lui-même.

 

J'ai donc réussi à modifier l'image de fond du module, ça ca ne pose pas de problème, mais je voudrai le contraindre, dans la colonne centrale, à s'afficher sur 2 colonnes.

 

Actuellement, il ce comporte comme sur la colonne de gauche. Un bloc, avec les champs l'un en dessous de l'autre.

Il prend toute la largueur de la colonne centrale (+/-750px). Ce qu'il faudrait, c'est que les champs de recherche soient positionnés en deux blocs, un à gauche et un à droite. Que ça "s'équilibre" en fonction du nombre de champs disponibles pour la catégorie concernée.

Voici son visuel actuel :

 

post-309106-0-04168000-1386840701_thumb.jpg

 

et voici ce qui serait top (enfin, à affiner):

post-309106-0-40168100-1386841023_thumb.jpg

 

Link to comment
Share on other sites

Le "truc", c'est que je n'ai pas laissé le module sur ce hook tant qu'il n'est pas nickel.

De plus, j'utilise un module de compression du css via Apache, et vous ne pourrez pas isoler les css depuis le navigateur...

 

je vais tenter de poursuivre seul. je vous donnerai le rendu final.

++

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour à tous,

 

Je souhaite faire exactement la même chose donc le topic est parfait pour moi.

 

J'ai fait toutes les manipulations comme gentiment donné par ckarone. A ce stade, la navigation à facette apparait bien dans le hook au niveau de la catégorie (c'est déjà bien) mais par contre, les sliders ne s'affichent pas et surtout  les différents filtres du navigateur ne marchent pas (quand on clique dessus rien ne se passe).

 

Pour information, j'ai laissé un hook_left pour le navigateur à facette qui lui fonctionne bien.

URL où voir le problème : http://tornabad.com/serveurTest1/8-chaussures-badminton

 

 

Quelqu'un a-t-il eu le même problème et pourrait me dire comment il s'en est sorti ?

 

Merci beaucoup

 

Salut jujutte24,

 

C'est possible!!

1/ Ajouter un hook {$HOOK_FEATURED_CATEGORY} dans category.tpl de votre thème

2/ Ajouter le hook via override dans ovrride/controller/CategoryController.php

<?php

class CategoryController extends CategoryControllerCore
{
    public function process()
    {
        parent::process();

        self::$smarty->assign('HOOK_FEATURED_CATEGORY', Module::hookExec('categoryFeaturedHook'));
    }
}

?> 

3/ Ajouter le hook categoryFeaturedHook dans votre DB via PHPMYADMIN

4/ Ajouter les lignes suivantes dans blocklayered.php du module à facette.

	public function hookcategoryFeaturedHook($params)
	{
		return $this->generateFiltersBlock($this->getSelectedFilters());
	}

Il ne reste plus qu'a greffer le module sur ce nouveau hook dans l'admin.

 

5/ Pour mettre en forme correctement l'affichage il vous faudra modifier le css et enlever la classe block dans le blocklayered.tpl comme ceci 
<div id="layered_block_left" class="block">

pour arriver à ceci 

<div id="layered_block_left">

Tester sur PS 1.4.7 

 

Ckarone

Link to comment
Share on other sites

Bonjour,

 

Merci pour la réponse rapide,

 

En version, j'utilise prestashop 1.4.9 et voici votre procédure que j'ai suivi :

1/ Ajouter un hook {$HOOK_FEATURED_CATEGORY} dans category.tpl de votre thème

2/ Ajouter le hook via override dans ovrride/controller/CategoryController.php -> mon override correspond exactement à votre fichier

3/ Ajouter le hook categoryFeaturedHook dans votre DB via PHPMYADMIN

4/ Ajouter le public function hookcategoryFeaturedHook  dans blocklayered.php du module à facette comme indiqué

5/ Modif du blocklayered.tpl

 

6/ J'ai également ajouté au niveau du blocklayered.php, dans la fonction install, après les hook existants :

&& $this->registerHook('categoryFeaturedHook'))

 

Le test a été fait avec et sans le 6) mais cela ne fonctionnait dans aucun des cas.

 

Merci d'avance pour toute aide

 

Galadrum

 

Vu que cela ne fonctionnait pas, j'ai tenté de modifier aussi le FrontController_php (enfin l'override) mais sans succès donc j'ai supprimé ces modifications

Link to comment
Share on other sites

Après avoir suivi d'autres tutos qui correspondent également à ce qui a été dit ici, cela ne fonctionne toujours pas.

Je pense que le problème est dans l'override du CategoryController.php

 

Voila ma fonction global : 

<?php
 
class CategoryController extends CategoryControllerCore
{
    public function process()
    {
        parent::process();
 
       self::$smarty->assign('HOOK_FEATURED_CATEGORY', Module::hookExec('categoryFeaturedHook'));
 
    }
}
 
?> 
 
J'aimerai bien également essayé directement dans le code sans l'override mais dans le categorycontroller, il n'y a aucun hook de mis donc je ne sais pas du tout quoi mettre.
Si quelqu'un a une idée, je suis preneur.
Link to comment
Share on other sites

la c'est un problème de javascript.

product_list se recharge bien, mais le paramètre de tri n'est pas passé. (on le voit d'ailleurs dans l'URL, si vous faites le test avec la navigation à facettes de la colonne de gauche, le paramètre choisi s'inscrit en fin d'URL)

Pouvez vous faire un test sur le thème d'origine pour voir si cela est lié au thème ?

 

edit : et en desactivant celui de la colonne de gauche pour n'en laisser qu'un ?

Edited by ChDUP (see edit history)
Link to comment
Share on other sites

@ckarone: dans module/position, j'ai bien le hook qui apparait (avec le module navigation à facette greffé dessus).

categoryFeaturedHook

Le cache a bien été vidé et la compilation est forcée à chaque fois sur mon serveur de test.

 

@ChDUP : merci pour m'avoir éclairer déjà dessus pour identifier le problème Javascript, c'est vrai que l'URL ne se modifie pas quand on utilise le hook dans la category.

En changeant de thème, le problème perdure.... 

Je ne vois pas d'erreurs javascript pourtant lorsque je teste

Link to comment
Share on other sites

Merci beaucoup pour vos réponses, je vais persévérer en regardant surtout de ce côté et essayer de trouver ce qui cloche.

 

Edit : bon je ne vois pas où peut être le problème avec mes compétences limités. Je vais me résigner à l'utiliser sur la gauche alors au lieu de le mettre au centre.

Edited by Galadrum (see edit history)
Link to comment
Share on other sites

@jujutte24 : merci pour l'idée mais en modifiant le code comme indiqué plus rien ne s'affiche, donc il ne va plus chercher le hook.

Et comme partout il a été déclaré au niveau du nom avec FeaturedHook à la fin, je ne comprends pas pourquoi il faudrait l'enlever...

Je cherche toujours alors :)

Link to comment
Share on other sites

Oui, excuses moi, c'est "categoryFeaturedHook" au lieu de "hookcategoryFeaturedHook", j'ai inversé les deux "hook".

 

Mais si tu regardes bien les messages plus haut, j'ai fait cette erreur de frappe. et en la modifiant ça  a fonctionné chez moi.

 

à l'étape 4, tu appel bien le Hook "hookcategoryFeaturedHook", alors que tu l'as nommé "FEATURED_CATEGORY"

 

Tu as fait une erreur de frappe, retire le hookcategoryFeaturedHook et ça devrait fonctionner

Link to comment
Share on other sites

J'avais également essayé cette modification mais sans succès, j'arrive même plus à greffer mon module avec cette modif.

Et quand je regarde les fonctions des autres hook (left column par exemple), la fonction se nomme bien 

 

public function hookLeftColumn($params)
{
return $this->generateFiltersBlock($this->getSelectedFilters());
}
 
avec un nom en bdd pour le hook qui est : leftColumn (je sais pas si c'est lié)
Link to comment
Share on other sites

  • 3 years later...

Bonjour, 

-Je me tourne vers vous car je m'arrache cheveux et poils depuis 2 jours sur l'affichage de mon en-tête..

-J'ai quasiment réussi à tout replacer (après un petit accident), cependant un problème avec "bloc de recherche rapide" persiste ! Ma barre de recherche est bien trop large et empiète sur mes colonnes de gauche et droite, je ne sais comment changer son aspect car je suis un NOOBi :( . Pour vous dire je ne sais même pas où taper du code sur prestashop :'(.

Pouvez-vous m'aider ?

Merci
 

post-1368436-0-20868300-1486545552_thumb.jpg

Link to comment
Share on other sites

  • 2 years 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
×
×
  • Create New...