Jump to content

[resolu] Abération dans blocktopmenu.tpl


Recommended Posts

Bonjour,

il y a quelque chose que je ne comprend pas dans le module "blocktopmenu".

 

Si on regarde le tpl du menu on a ça:

{if $MENU != ''}
</div>
<!-- Menu -->
<div class="sf-contener clearfix">
 <ul class="sf-menu clearfix">
  {$MENU}
  {if $MENU_SEARCH}
<li class="sf-search noBack" style="float:right">
 <form id="searchbox" action="{$link->getPageLink('search')}" method="get">
  <p>
   <input type="hidden" name="controller" value="search" />
   <input type="hidden" value="position" name="orderby"/>
   <input type="hidden" value="desc" name="orderway"/>
   <input type="text" name="search_query" value="{if isset($smarty.get.search_query)}{$smarty.get.search_query|escape:'htmlall':'UTF-8'}{/if}" />
  </p>
 </form>
</li>
  {/if}
 </ul>
 <div class="sf-right"> </div>
<!--/ Menu -->
{/if}

 

 

Le code commence par la fermeture d'une balise div :blink:, ce qui permet au menu de ne plus se trouver dans le div (du theme par defaut) dont l'id est "header_right".

 

Le problème avec cette façon de faire c'est que nous qui voulons développer des modules qui peuvent se placer dans le "displayTop" on se retrouve bloqué, car il est impossible de savoir si l'utilisateur aura activé ou pas le module "blocktopmenu".

 

Donc ma question est, comment faites vous pour créer les templates de vos modules qui doivent se placer dans le "displayTop" ?

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

Ben, dans header.tpl

<div id="header_right" class="grid_6 omega">
 {$HOOK_TOP}
</div>

Après quesque fait cette balise fermante ici en effet ...

Mon notepad++ me dit qu'elle ferme (en copiant le code source exclusivement en html)

<div id="header_right" class="grid_6 omega">

Si on regarde la souce du module, elle ouvre une div qu'elle ne ferme pas. Donc en fait c'est le header qui ferme la div ouverte du menu. Le menu s'affiche donc en dessous du header.

 

Deux div ouvertes, deux div fermée avec le menu, une ouverte et une fermé sans.

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

Oui en effet c'est bien ce qui se passe.

Si le blocktopmenu n'est pas activé le "header_right" se ferme de lui "logique".

Par contre si blocktopmenu est activé alors c'est le template de blocktopmenu qui ferme le "header_right", puis le menu s'affiche et laisse la balise ouverte qui sera alors refermée par la balise fermante restante de "header_right".

 

C'est totalement illogique et surtout ça ne permet pas de placer un module dans le hook top étant donné qu'on ne sais pas à l'avance si on devra nous aussi dans notre template mettre une balise fermante au début.

 

Ce que je ne comprend pas c'est que la solution était super simple, il suffisait de créer un deuxième hook dans le template de base (genre diplayTop2) qui se plaçait juste après le header_right.

Du coup le blocktopmenu pouvais s'accrocher sur ce hook sans générer un code étrange et par la même occasion nous on pouvais choisir de s'accrocher sur displayTop ou displayTop2.

 

Dans l'état actuel la seule solution que j'envisage serait de créer un nouveau hook lors de l'installation de notre module (je crois que c'est possible) et de demander au commerçant d'ajouter manuellement son hook à son template ce que tous le monde ne saura pas faire.

 

Quelqu'un aurait une autre solution qui ne ferait pas intervenir le commerçant ?

C'est corrigé en 1..5.4 ce .... truc ?

Link to comment
Share on other sites

Moi j'ai installer sur une boutique le module gratuit "simple notification", j'ai pas trop eu le temps de regarder comment il est fichu, mais il se place juste en dessous du menu.

 

Essai de désactiver le menu et si ton module ne s'affiche plus correctement c'est qu'il à le même problème que moi, sinon c'est qu'ils ont trouvé une solution et dans ce cas je veux bien le lien de ce module pour l'étudier.

Link to comment
Share on other sites

Je confirme, ça décale car du coup on se retrouve dans le header right qui float a droite donc.

Je pense que si tu mets un header de width egal au reste du site et que tu y ajoute le hook, tu n'auras plus de problème.

 

D'ailleurs ca tombe bien, car je dois en faire un pour un client, je m'en vais testé ca de ce pas !

Link to comment
Share on other sites

Il suffit de déplacer votre module au dessus de Top menu "dans positions" pour que celui-ci soit dans le <div id="header_right">.

 

Je ne vois pas du tout où est le problème, dés lors que l'on laisse topmenu en dernière position du hook Top.

 

V++

 

Atch

Link to comment
Share on other sites

Qu'il se décale à droite ce n'est pas forcément un bug car comme tu le dit il se retrouve dans le header_right. C'est plutôt le reste du site qui devrait bugguer car on aurait (en toute logique) une balise fermante en trop ou en moins.

 

Peux-tu me passer l'url pour télécharger ce module que je fasse des tests ?

Link to comment
Share on other sites

Le module menutop se comporte ainsi :

 

<div id="header_right"> <---- header.tpl

{$Hook_top}

</div><--- menu top

<div id="menutop">

<ul></ul>

</div><---header.tpl

 

En procédant ainsi, le module Top sort du div header_right pour profiter d'une largeur de 100% sans créer de Hook supplémentaire.

 

Mais il ne gène en aucun cas les autres modules se trouvant dans le div header_right tant qu'il reste en dernière position.

 

V++

 

Atch

Link to comment
Share on other sites

Oui c'est bien ce que je dit, ce blockTopMenu doit obligatoire être en dernier et c'est également le seul qui peut bénéficier d'une largeur de 100%.

Alors qu'un hook supplémentaire juste en dessous de hookTop aurait permis de sortir du div "header_right" et ainsi offrir la possibilité à n'importe quel module de bénéficier de toute la largeur du site ET de se placer avant ou après blockTopMenu.

 

Dans l'état ce module est mal codé (provenant de la team PS c'est dommage) étant donné qu'il influe sur les autres modules adjacents.

Link to comment
Share on other sites

Tu as maté le module que je t'ai conseillé?

 

Oups autant pour moi j'avais raté on post :)

 

Bhé non, je ne suis pas d'accord, le menu ferme le header right pour se greffé en dessous, donc avec ou sans menu, le code html reste coherent, illogique pour nous les dev, mais néanmoins valide !

 

le module : http://addons.presta...ifications.html

 

Tu as raison, en fait la solution c'est de faire la même erreur que celle de blocktopmenu et là ça ne bug pas si par contre on respecte les conditions suivante:

- appeler un tpl différent si on met le module dans un autre hook que le top (ça à la limite c'est cohérent)

- décider que le module se placera forcément en dehors du header_right (car avec la balise fermante ce n'est plus possible de le laisser dedans).

- que le theme utilisé par le commerçant ne fasse pas un override de blocktopmenu.tpl pour corriger ce problème.

 

Ce truc est tellement bizare au niveau programmation que j'avais même pas imaginé qu'en répétant la même erreur ça pouvais marcher lol.

 

Ceci étant, je persiste à dire qu'il serait bien de corriger ça pour les futures version car c'est vraiment codé avec les pieds cette partie :).

 

Je passe mon post en résolu (même si la solution me plait pas :) ).

Edited by maniT4c (see edit history)
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...