Jump to content

comment afficher un module dans un hook


Recommended Posts

Bonjour le forum prestashop !
Je suis débutant sur prestashop, je viens d'installer prestashop version 1.7.1.2
 
J'aimerais faire en sorte que le module ps_socialfollow qui est affiché par défaut dans le hook displayFooterBefore, soit affiché dans le hook displayFooterAfter. Je précise que je ne peux pas le faire directement via le back office du site, parce que ce hook n'est pas affiché dans la liste (il est pourtant présent de base dans le code sur page footer.tpl). 
fichier : themes/classic/templates/_partials/footer.tpl
 
<div class="container">
  <div class="row"><!-- affiche les module ps_emailsubscription + ps_socialfollow -->
    {block name='hook_footer_before'}
      {hook h='displayFooterBefore'}
    {/block}
  </div>
</div>
<div class="footer-container">
  <div class="container">
    <div class="row"> <!-- liste pages (module : ps_linklist) -->
      {block name='hook_footer'}
        {hook h='displayFooter'}
      {/block}
    </div>
    <div class="row"> 
      {block name='hook_footer_after'}
        {hook h='displayFooterAfter'} <!-- j'aimerai afficher ici le module ps_socialfollow -->
      {/block}
    </div>
    <div class="row">
      <div class="col-md-12"> 
        <!-- l'emplacement pour marquer tous droits réservés -->
        <p>
          {block name='copyright_link'}
            <a class="_blank" href="http://www.prestashop.com" target="_blank">
              {l s='%copyright% %year% - Ecommerce software by %prestashop%' sprintf=['%prestashop%' => 'PrestaShop™', '%year%' => 'Y'|date, '%copyright%' => '©'] d='Shop.Theme'}
            </a>
          {/block}
        </p>
      </div>
    </div>
  </div>
</div>
 
 
J'ai fait cette modification dans le theme.yml :
fichier : themes/classic/config/theme.yml
 
global_settings:
  configuration:
    PS_IMAGE_QUALITY: png
  modules:
   to_enable:
     - ps_linklist
  hooks:
    modules_to_hook:
      displayNav1:
        - ps_contactinfo
      displayNav2:
        - ps_languageselector
        - ps_currencyselector
        - ps_customersignin
        - ps_shoppingcart
      displayTop:
        - ps_mainmenu
        - ps_searchbar
      displayHome:
        - ps_imageslider
        - ps_featuredproducts
        - ps_banner
        - ps_customtext
      displayFooterBefore:
        - ps_emailsubscription // ici j'ai retiré - ps_socialfollow
      displayFooter:
        - ps_linklist
        - ps_customeraccountlinks
        - ps_contactinfo
      displayFooterAfter: // j'ai créé cette ligne et j'ai ajouté - ps_socialfollow en dessous
        - ps_socialfollow 
      displayLeftColumn:
        - ps_categorytree
        - ps_facetedsearch
      displaySearch:
        - ps_searchbar
      displayProductAdditionalInfo:
        - ps_sharebuttons
      displayReassurance:
        - blockreassurance
      displayOrderConfirmation2:
        - ps_featuredproducts
      displayCrossSellingShoppingCart:
        - ps_featuredproducts

 

 

 

Au passage, j'ai remarqué que dans le controlleur du module ps_socialfollow, le module est appelé avec le hook displayFooter alors qu'il s'affiche dans le hook displayFooterBefore.

fichier : modules/ps_socialfollow/ps_socialfollow.php

 

public function install()
    {
        return (parent::install() &&
            Configuration::updateValue('BLOCKSOCIAL_FACEBOOK', '') &&
            Configuration::updateValue('BLOCKSOCIAL_TWITTER', '') &&
            Configuration::updateValue('BLOCKSOCIAL_RSS', '') &&
            Configuration::updateValue('BLOCKSOCIAL_YOUTUBE', '') &&
            Configuration::updateValue('BLOCKSOCIAL_GOOGLE_PLUS', '') &&
            Configuration::updateValue('BLOCKSOCIAL_PINTEREST', '') &&
            Configuration::updateValue('BLOCKSOCIAL_VIMEO', '') &&
            Configuration::updateValue('BLOCKSOCIAL_INSTAGRAM', '') &&
            $this->registerHook('displayFooter'));
    }
 
 
Je suis bien allé dans le back office dans paramètres avancés -> Performances 
et que j'ai fait vider le cache, clické sur forcer la compilation à chaque fois et que j'ai mis le mode débug.
Edited by lulurousseau (see edit history)
Link to comment
Share on other sites

Bonjour,

 

Le hook displayFooterAfter n'était pas enregistré dans la liste des hook sur la table ps_hook.

Ce qui explique que ce hook n'était pas accessible depuis le back office du site dans Apparence > Positions

Du coup j'ai changé $this->registerHook('displayFooter')); par $this->registerHook('displayFooterAfter'));

Puis j'ai fait reset le module (via l'interface du site) et il s'est bien affiché dans le hook.

 

 

Je n'ai cependant toujours pas bien compris le fonctionnement des hook.

Par exemple comment cela se fait que le module était affiché dans le hook displayFooterBefore, alors qui était appelé par : $this->registerHook('displayFooter'));

Je vois aussi que le fichier theme.yml ne se met pas à jour, est-ce qu'il peut être mis à jour automatiquement (via le terminal peut être ?) ou est-ce que l'on doit le faire manuellement ?

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

  • 4 months later...

Bonjour,

Il me semble que j'ai donné la réponse pourtant.

Dans le fichier : modules/ps_socialfollow/ps_socialfollow.php

J'ai changé cette ligne :  $this->registerHook('displayFooter')); par $this->registerHook('displayFooterAfter'));

Après tu peux faire aussi la modification dans le fichier theme.yml (même si j'ai l'impression que ça sert à rien).

Et bien sûr, il faut reset ton module ensuite pour avoir les changements.

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