Jump to content

"Dupliquer" le module categorie


Recommended Posts

Bonjour

je voudrais disposer de plusieurs module 'blockcategorie" comme dans le thème par défaut de Prestashop afin d'obtenir
quelque chose qui ressemblerait à ceci Effectivement si j'ai plusieurs bloc de catégorie et que je "bride" la requête sql dans blockcategories.php je pense que j'obtiendrai plusieurs blocs distincts.
La où ça se complique c'est que je n'arrive pas à créer la duplication de ce module malgré la modification sur le conf.xml du thème et autres tentatives.
Donc est-ce que quelqu'un a la solution pour "dupliquer" un module ou alors connait un module qui me permettrait de gérer mon menu comme dans le projet donné en lien.

Merci d'avance.

Link to comment
Share on other sites

  • 1 month later...

Bonsoir

Je cherche à faire exactement la même chose, mais mes essais sont pour l'instant infructueux...
Pour ma part, je veux avoir 5 catégories et X ss-catégories.
J'avais penser toucher au code au niveau de la requete sql pour designer directement une catégorie et duplique le module pour chaqu'une des catégories mais pas moyen de m'y retrouver :s


Donc si quelqu'un a une solution, merci d'avance

Link to comment
Share on other sites

en fait j'ai trouvé une solution envoie moi un PM je te donnerai la solution provisoire que j'ai trouvé avant de mettre en ligne le module modifié pour que ce soit administrable


Vive la communauté!!! :(

Pourquoi ne pas partager ici au lieu de passer par MP...

J'allais te filer la solutions (un lien sur le forum) du duplicate de modules (catégories pas testé) mais du coup j'hésite....

( en faisant une recherche sur le forum cela est trés bien expliqué.)

V++

Atch
Link to comment
Share on other sites

Bonjour

Toi t'as choisi le jour ou j'arrête de fumer pour venir me gaver.
Si tu lis ENTIEREMENT le post tu verras "avant de mettre en ligne le module modifié pour que ce soit administrable" bah oui je préfère vosu fournier une version administrable et potable de ce que j'ai fait plutôt qu'un bout de code rapiécé. en attendant la personne avait l'air pressée (moi j'attendais toujours qu'un jour quelqu'un me réponde soit dit en passant) donc je lui propose quelque chose de plus bancal juste par MP.

Hésite tant que tu veux je ne suis pas juge de conscience et ce n'est plus un problème.

Link to comment
Share on other sites

Bonjour

Toi t'as choisi le jour ou j'arrête de fumer pour venir me gaver.


LOL ... t'as pas oublié ton Patch ce matin, ça aide au début.

Non mais ton bout de code aurait peut etre permis à certains de t'aider à le compléter ou de donner la voie à suivre à d'autres...

Bon je file m'en griller une...... bahh qu'est ce que je dis là, je fume pas.

V++

Atch
Link to comment
Share on other sites

Comme promis

Dans blockcategories.php

J'ai remplacé cette ligne:
$blockCategTree = $this->getTree($resultParents, $resultIds);

par ces lignes, chacunes corresponds à un bloc distinct, le fait de ne pas passer de paramètre dans l'original fait que la categorie par défaut est 0 la categorie "parent" , si tu organise des sous categories parentes de 0 tu peux faire ce qu'il y a ci-dessous.

$blockCategTree = $this->getTree($resultParents, $resultIds,8);
$blockCategTree2 = $this->getTree($resultParents, $resultIds,9);
$blockCategTree3 = $this->getTree($resultParents, $resultIds,29);
$blockCategTree4 = $this->getTree($resultParents, $resultIds,39);

après il faut l'affecter au tpl toujours dans ce fichier et donc adapter en onction du nombre de blocs en ajoutant à $smarty->assign('blockCategTree', $blockCategTree); ça:


$smarty->assign('blockCategTree2', $blockCategTree2);
$smarty->assign('blockCategTree3', $blockCategTree3);
$smarty->assign('blockCategTree4', $blockCategTree4);

pour le rendre administrable il suffirait de passer ces deux appels de fonctions dans une boucle qui récupèrerait les id des catégories ayant pour parent 0. (mais c'est plsu rapide comme ça et j'ai pas le temps).

Enfin il reste à adapter le blockcategories.tpl . Juste un exemple pour mon bloc2 que tu colles à la suite

PLATEAU REPAS




  • {foreach from=$blockCategTree2.children item=child name=blockCategTree2}
    {if $smarty.foreach.blockCategTree2.last}
    {include file=$branche_tpl_path node=$child last='true'}
    {else}
    {include file=$branche_tpl_path node=$child}
    {/if}
    {/foreach}



là par contre il faudrait réfléchir à comment le rendre plus administrable et ne pas dupliquer du code, mais bon il y a le cache, et on a rarement 1500 blocs donc c'est gérable.
Link to comment
Share on other sites

@ornythorink
Merci pour cette infos
Par contre ,sans vouloir etre rabajoie auriez vous un fichier .zip des modifications que vous avez apporter
car perso ( je n'ai pas la science infuse ) :)
et le faite de voir un résultat final et son " mode d'emploi " me permet de comprend plus facilement
cela me serais d'une grande utilité

En espérant que vous pussiez répondre à ma demande

Sinon est ce que la modification ,at'elle était apporté sur une version d prestashop V1.0.0.8 ou une V.1.1 ??

cdlt,

Link to comment
Share on other sites

Bonjour,
Vous désirez mettre vos sous-catégories dans des blocs différents?
Il s'agit de la présentation du résultat que vous désirez changer, pas les données ?
Si j'ai compris votre problème, cette solution n'est pas la plus simple, il suffit de modifier le fichier des tpl, sans toucher au code des fichiers php.
Je regarde et je vous indique les lignes à modifier.

Link to comment
Share on other sites

@Maury Girard

Reynette a peut-être bien raison....;) Mais, je trouve, que c'est plus compliqué après c'est un peu affaire de point de vue. Par contre l'interêt de la solution de ne toucher qu'au TPL c'est que c'est plus facilement maintenable... bref.
Oui c'est bien la 1.1.
Le problème c'est que si je te donne un zip il faudra quand même que tu trouve les categories parents parce que les miennes ne sont pas les tiennes.
Pour les connaitre regarde dans MySQL ta table ps_category si id_parent est égal à 0 c'est une de tes categories parents.

Si tu la passes en paramètre de $blockCategTree = $this->getTree($resultParents, $resultIds); après $resultIds ça te donne les enfants de cette catégorie parentes

Link to comment
Share on other sites

Merci de ta contrib, a vrai dire ce n'etais pas forcément urgent, vu que depuis je n'avais pas acces au net...

Etant donné l'heure qu'il est, je peux pas tester ça ce soir, mais je te tiens au courant dès que possible.

Merci

Link to comment
Share on other sites

J'ai modifié le fichier modules\blockcategories\blockcategories.tpl sans toucher au .php. Ce qui permet d'être moins tributaire des MAJ.
Il ne reste plus qu'à personnaliser le fichier CSS, si on le souhaite.

voici le code complet, il suffit de remplacer le contenu de votre fichier par celui-ci.

[removed][removed]

<!-- Block categories module -->

   {foreach from=$blockCategTree.children item=cat name=blockCategTree}
{$cat.name|escape:htmlall:'UTF-8'}



           {foreach from=$cat.children item=child name=blockSubCategTree}
               {if $smarty.foreach.blockSubCategTree.last}
                       {include file=$branche_tpl_path node=$child last='true'}
               {else}
                       {include file=$branche_tpl_path node=$child}
               {/if}
           {/foreach}


    
   {/foreach}

<!-- /Block categories module -->



Si on ne souhaite pas d'arbre dynamique (+), il suffit de remplacer la ligne

>            </pre>
<ul>


par

>            </pre>
<ul>


ou de configurer le BO, dans la configuration du module bloc catégories.

Il est aussi possible de ne modifier que le fichier CSS.

Link to comment
Share on other sites

Effectivement ça marche bien mieux ou en tout cas plus proprement que ma solution.
j'allais te demander pendant 2 secondes ou tu trouvais $cat mais j'avais oublié un peu la synthaxe des boucles avec Smarty.
Je te remercie pour ta solution, je te mettrai en commentaire sur le code source comme il se doit.

Au passage je voudrais rappeller le caractère assez désagréable des posts de Atch concernant ce problème. En dehors du fait que je pense qu'il a mal compris le problème et qu'il nous dit "( en faisant une recherche sur le forum cela est trés bien expliqué.)"

--> certainement mais je pense qu'on a tous cherché. Peut-être qu'on a utilisé une mauvaise piste, personnellement je fais du dev depuis 10 ans et sous framework pour de la haute dispo depuis 5 donc les "t'as qu'à chercher même si j'ai la réponse" me font bien marrer.

Continue à augmenter ton nombre de posts avec ce genre de commentaires absurdes et t'auras gagné un oeuf en chocolat, si je propose à quelqu'un une solution bancale en MP c'est aussi que j'encadre 3 jeunes et donc que pour la communauté je donne pas mal de mon temps que j'aimerai pourtant bien passer sur des forums.

Grandis et prends exemple sur Reynette.

Link to comment
Share on other sites

marrant, je disais pas ça méchamment mais justement pour aider! la preuve tu as eu réponse à ta demande.

Si tout le monde qui cherche un truc sur le forum et tombe sur des message du genre :

- je t'envoie la solution par MP
- ayé j'ai trouvé la solution (sans laissé comment il a fait)

c'est sure, le forum ne sert pas à grand chose et ça multiplie les demandes récurrentes.

Continue à augmenter ton nombre de posts avec ce genre de commentaires absurdes et t’auras gagné un oeuf en chocolat, si je propose à quelqu’un une solution bancale en MP c’est aussi que j’encadre 3 jeunes et donc que pour la communauté je donne pas mal de mon temps que j’aimerai pourtant bien passer sur des forums.


Heuu là c'est plutot stérile comme post ... Mais no comment.
.
.
.
.
.

Si je peux me permettre dans le code de reinette ( merci à toi)

il faut mettre le DIV avec la class block dans la boucle, sinon le block ne sera pas entier (il va manquer le footer) et enlever l'iD categories_block_left qui va générer une erreur html pour répétition d'ID dans une même feuille.

[removed][removed]

<!-- Block categories module -->
   {foreach from=$blockCategTree.children item=cat name=blockCategTree}

{$cat.name|escape:htmlall:'UTF-8'}



           {foreach from=$cat.children item=child name=blockSubCategTree}
               {if $smarty.foreach.blockSubCategTree.last}
                       {include file=$branche_tpl_path node=$child last='true'}
               {else}
                       {include file=$branche_tpl_path node=$child}
               {/if}
           {/foreach}


<!-- block content -->

  <!-- block block -->
   {/foreach}

<!-- /Block categories module -->




V++

Atch

Link to comment
Share on other sites

Je te laisse responsable de ce que tu dis, moi personellement ton message m'as énervé et ne m'a donné aucune indication ce n'est toujours pas le cas je te le fis remarquer, tu n'as donné aucune information même pas une indication de où chercher.

On est d'accord sur le fait que le MP n'est pas la solution idéale, mais si tu lis et que tu COMPRENDS la démarche tu verras que ma solution marche et qu'elle peut dépanner quelqu'un, je choisis de ne pas la donner parce que je ne veux pas promouvoir de mauvaise habitudes ( la solution de reinette est nettement plus propre que la mienne, il faut le reconnaitre).

Alors pour la réponse à à ma demande regarde bien les timestamp mais je l'ai depuis posté depuis des lustres (manque de réactivité ...? à voir)... donc je suis désolé j'aimerai te le dire mains non moi tu ne m'as pas aidé, si je n'avais pas proposé une solution bancale par MP on aurait pas eu de réponse à ma question.

Alors moi je veux bien que ce soit stérile d'encadrer 3 jeunes (oui regarde bien c'est dans ta citation? fais attention quand tu reprends des propos) As tu proposé une solution technique ? non. Moi si j'aurai voulu faire mieux mais comem quoi personne n'est parfait...

Alors moi j'assume je dis que ton dernier post est stérile je n'ajoute pas un "no comment".. tiens d'ailleurs c'est drôle mais j'interviens aussi sur des forums ou blogs anglophones, question d'éducation des intervenants.


Tu es là pour aider? Dis moi quand et montre moi de quelle façon et on reparlera. tu n'as été là que pour alimenter une polémique.

Link to comment
Share on other sites

ok, j'ai conservé l'id categories_block_left du bloc pour le personnaliser par le CSS et évidemment hors de la boucle.
Je n'ai pas voulu rajouter de div, cela fait des blocs solidaires au lieu de blocs individuels, tout dépend de l'effet souhaité. Si on veut espacer les blocs, il suffit de modifier le css.

Link to comment
Share on other sites

oui je rejoint ta logique, t'as raison...

en reprennant ton idée de personnaliser chaque blocs je pense un truc du style, en mettant l'id dans la boucle.

id="categories_{$cat.id}_block_left" class="block_{$cat.id}"



et dans la feuille de style
ajouter des couleurs différentes en fonction des id des catégories.

Pas testé mais je pense que l'effet souhaité doit y être.

V++

Atch

Link to comment
Share on other sites

La solution qu'on voit à certains endroits comme dans la feuille de style de SPIP pour les vignettes c'est une classe avec le un comme "block" dans le cas de prestashop et une classe avec l'id comme le propose Atch. L'interêt dans mettre une générique comme ça complété directement par uen plsu spécifique c'ets que tu peux mettre ce qui est structure dans une et personnalisation dans l'autre:

class="block block_{$cat.id}"

C'est aussi pratique quand tu utilise jquery pour cibler le général ou le précis, d'ailleurs, si tu veux personnaliser tes blocs de categorie en alternant les couleurs même sans changer le CSS avec :odd et :even (http://docs.jquery.com/Selectors/odd ) tu dois pouvoir donner cet effet, après évidemment on est vite limité mais ça peut aider si tu n'as pas envie de toucher trop à la feuille de style de base.

Pratique le bouton Edit...aussi quand est de mauvaise foi ;) Il était ou le bout de code dans le post avant ?

Finalement tu as fini par participer au lieu de parasiter donc c'est bien ;)
Tu n'as effectivement rien compris à ma démarche mais tu l'admets donc c'est bien ;)
La remarque mesquine sur le "t'es le plus fort" je me demande sur qui ça en dit le plus.

Link to comment
Share on other sites

oui pratique la touche EDIT je l'utilise quand mon post est le dernier pour éviter les doubles posts d'affilés ET surtout d'augmenter mon "nombre de post". mais vu la tartine que t'étais en train de rédiger tu n'avais pas forcément vu après...

Pour revenir au sujet, Il me semble que Smarty permet également de faire du pair ou impair sans passer par du Java.
http://www.smarty.net/manual/fr/language.function.cycle.php
Jamais testé mais elle existe et est là pour cela.

Sans rancune ornytohrynk et bonne continuation pour ta boutique.

V++

Atch

Link to comment
Share on other sites

Effectivement cycle.... :)

Après question perf (bon c'est juste un élément donc les performances sont peut-être peu significatives ) le JS est peut-être un peu plus rapide, par contre niveau cohérence cycle est certainement mieux.

Sans rancune du tout.

Ce n'est pas ma boutique c'est celle d'un collègue/étudiant étranger mais merci pour lui, pour lui le forum c'est un poil trop dur encore.

Mes lacunes sur smarty m'ont fait me poser une question, j'ai chercher mais rien vue de tel. Savant (un moteur de template concurrent de smarty) ne semble pas prévu pour Prestashop, j'ouvrirai un autre billet pour poser la question et savoir si c'est prévu (ça m'étonnerai vu que l'architecture n'est pas façadée pour mais on ne sait jamais ) . Evidemment tu seras le bienvenue. :smirk:

Link to comment
Share on other sites

  • 1 month later...

Bonjour,

Ce fil semble près d'aboutir à ce que j'aimerai faire. Cependant je n'ai pas tout compris concernant l'affectation de couleur à chaque bloc catégorie créé.
Plus précisément j'ai bien compris le principe qui consiste à créer un id par bloc et affecter une couleur à chaque id depuis le CSS... mais je n'arrive pas à le mettre en pratique...

Quelqu'un pourrait détailler un peu la marche à suivre

Merci à vous

Link to comment
Share on other sites

  • 3 weeks later...

Bonjour,
je suis aussi intéresse pour avoir des block catégories et j'ai mis pour l'instant le code de
"reinette" et effectivement il n'y à pas les< footer>
Avec le code de "Atch" j'ai bien les mais sans l'effet d’arbre dynamique (+), et donc sans les sous catégories visibles ?
J'ai bien essayé de suivre les conseilles de "Atch" en ajoutant un div sur class block mais je me retrouve avec des colonnes décalé ?

En fait je voudrais faire avec le code de "Atch" mais avec l'effet d’arbre dynamique (+)!!!

Quelqu'un a t'il une idée?
eric

Link to comment
Share on other sites

  • 7 months later...

Bonjour,

Loin de moi l'idée de vouloir relancer ces échanges houleux qui ont eu lieu ici mais j'aimerai si possible obtenir quelques infos complémentaires pour isoler en footer mes catégories.

La solution proposée par ornythorink ne fonctionne pas chez moi, je ne pige pas j'ai pourtant bien compris le principe mais soit aucune catégorie n'est affichée, soit elles y sont toutes... Je récupère les id des rubriques directement dans le back-office.

La seconde solution fonctionne mais affiche toutes les catégories les unes après les autres, que dois modifier pour totalement isoler une catégorie ?

Je sais que ce post date un peu mais pour ma part je découvre seulement PrestaShop...

Merci de vos lumières.
Thomas

Link to comment
Share on other sites

Bonjour,
j'ai suivi ce post, mais malheureusement a la fin de chaque block je n'ai pas le footer et ils sont tous collés...

Comment faire, merci de votre aide.


hmmm pourtant la solution est donnée dans ce post...


Il faut intégrer dans la boucle le premier
mais en supprimant l'id pour éviter une répétition de ce dernier.

V++

Atch
Link to comment
Share on other sites

  • 2 months later...

Pour garder l' effet d’arbre dynamique (+) ; éviter l'erreur html duplicate ID et attribuer un design spécique à chaque bloc-menu:

Modifiez /modules/blockcategories/blockcategories.tpl

[removed][removed]
<!-- Block categories module -->

 {foreach from=$blockCategTree.children item=cat name=blockCategTree}

{$cat.name|escape:htmlall:'UTF-8'} 


       {foreach from=$cat.children item=child name=blockSubCategTree}
       {if $smarty.foreach.blockSubCategTree.last}
       {include file=$branche_tpl_path node=$child last='true'}
       {else}
       {include file=$branche_tpl_path node=$child}
       {/if}
       {/foreach}



 {/foreach} 
[removed]
// <![CDATA[
   // we hide the tree only if JavaScript is activated
   $('div#categories_block_left ul.dhtml').hide();
// ]]>
[removed]
<!-- /Block categories module -->

Link to comment
Share on other sites

  • 4 months later...

Bonjour,

j'ai utilisé le dernier code cité et tout marche nickel.

par contre je n'arrive pas a assigner un design différent

a chaque fois que j'entoure un block c'est le même css qui s'affiche et par conséquent cela à pour effet de tout changer

comment assigné un design différent à chaque block

merci d'avance

Link to comment
Share on other sites

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

Bonjour !
Merci pour ce code qui fonctionne très bien, même appliqué par une "en-dessous de novice" comme moi !
J'ai pourtant une question , désolée par avance ...

J'ai du garder une ligne du "code" précédent pour conserver l'effet "arbre dynamique " sur mes catégories de niveaux 2 et 3.(=sous et sous/sous cat) :
script type="text/javascript" src="{$js_dir}tools/treeManagement.js"....

Bien ou mal, quelqu'un pourrait-il me dire ? Cela me semble fonctionner mais...
Merci pour vos eventuelles reponses.

Link to comment
Share on other sites

  • 1 month later...

Bonjour, voilà je suis passé sous la dernière version de prestashop j'ai donc voulu refaire cette modification mais cette fois ci elle ne fonctionne pas.
quelqu'un pourrait -il me venir en aide svp?

Merci.

Cordialement.

Link to comment
Share on other sites

  • 4 weeks later...

Bonjour,<br/><br/>Et merci à tous! Vous m'avez fait gagner un temps considérable et vous m'avez fait rigoler aussi (j'essaye d'arrêter de fumer depuis plusieurs semaine... :)

 

Par contre j'ai de nombreuses sous catégories dans chaque bloc catégories. Comment faire en sorte que seule 5 ou 6 sous catégories apparaissent par défaut et que le reste se déroule si le client le souhaite (un peu comme pour le module fabricant ou fournisseur)?

 

J'ai voulu contourner le problème en créant une 6e sous catégories qui comprendrait le reste des autres sous catégories et qui s'appellerait (par exemple) voir les autres sous catégories. Mais la solution n'est pas satisfaisante dans la mesure où ces mêmes sous-sous catégories fictives n'apparaissent plus lorsque l'on clique sur la catégorie principale. Il y aurait une solution peut-être en faisant apparaitre toutes les sous catégories et sous-sous catégories dans la page de la catégorie principale, la solution est donnée ici, mais je n'ai pas réussi à l'appliquer...un peu d'aide serait la bienvenue. Une réponse please parce que ceci est mon enième message et j'ai l'impression d'être seul au monde sur ce forum. :rolleyes:

Link to comment
Share on other sites

  • 1 year later...

Au cas où !!!

Bonjour,

 

J'avais appliqué cette méthode pour mon menu avec des versions différentes de prestashop.

Je suis en train de passer à la dernière version en local, tout mon thème est à revoir et notamment le menu.

Est ce que quelqu'un l'a fait évoluer ?

J'aurais besoin d'aide SVP

Link to comment
Share on other sites

  • 2 months later...

Bonjour,

 

Je suis sous version 1.4.8.2 et les réponses précédentes ne fonctionnaient pas pour moi.

 

Alors avec beaucoup de chance voici le code qui marche pour moi :

 

fichier blockcategories.tpl

 

<!-- Block categories module -->

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

{foreach from=$blockCategTree.children item=cat name=blockCategTree}

<h4>{$cat.name}</h4>

<div class="block_content">

<ul class="tree {if $isDhtml}dhtml{/if}">

{foreach from=$cat.children item=child name=blockSubCategTree}

{if $smarty.foreach.blockSubCategTree.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>

</br>

{/foreach}

</div>

<!-- /Block categories module -->

 

Un grand merci à ce topic et aux contributeurs.....

Link to comment
Share on other sites

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...