Jump to content

[Résolu] Onglet Promotions sur la page d'accueil


Recommended Posts

Bonjour,

 

Sur la page d'accueil du thème de base de Pestashop 1.6, on trouve 3 onglets : Nouveautés, Populaire et Meilleures ventes.

J'ai bien trouvé comment supprimer les onglets Populaires et Meilleures ventes.

J'ai voulu greffer le module "Bloc Promotions" pour avoir un onglet Promotions.

Or ça me dit : "Ce module ne peut être accroché à ce hook".

 

Quelque'un aurait-il une astuce pour contourner ce problème ?

 

Par avance merci.

 

Almur

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

Bonjour;

 

Les étapes à suivre pour ajouter un onglet "PROMOTIONS" dans la page d'accueil prestashop 1.6.0.6

Les manipulations à faire :

Modification d'un seul fichier : modules/blockspecials/blockspecials.php

Création de deux fichiers tpl dans le dossier du module (modules/blockspecials/)

blockspecials-tab.tpl

blockspecials-home.tpl

 

 

1- Afin de griffer le module "PROMOTIONS" dans les displayHomeTab et displayHomeTabContent;

 a-Remplacer le code (dans blockspecials.phpà) suivant :

        if ((!$theme->default_right_column || !$this->registerHook('rightColumn'))
                   && ( !$theme->default_left_column || !$this->registerHook('leftColumn')))  

            PAR:

        if ((!$theme->default_right_column || !$this->registerHook('rightColumn'))
                      && ( !$theme->default_left_column || !$this->registerHook('leftColumn'))
                      && ( !$this->registerHook('hookDisplayHomeTab'))
                      && ( !$this->registerHook('hookDisplayHomeTabContent')))

b-Coller ces deux fonctions dans le même fichier après les fonctions de hook:

       

public function hookDisplayHomeTab($params)
        {
               return $this->display(__FILE__, 'blockspecials-tab.tpl',$this->getCacheId('blockspecials'));
        }
        public function hookDisplayHomeTabContent($params)
        {
               if (Configuration::get('PS_CATALOG_MODE'))
                   return;

                  // We need to create multiple caches because the products are sorted randomly
                  $random = date('Ymd').'|'.round(rand(1, max(Configuration::get('BLOCKSPECIALS_NB_CACHES'), 1)));

                  if (!Configuration::get('BLOCKSPECIALS_NB_CACHES') || !$this->isCached('blockspecials-home.tpl', $this->getCacheId('blockspecials|'.$random)))
                     {
                      if (!($specials = Product::getPricesDrop((int)$params['cookie']->id_lang, 0, 5)) && !Configuration::get('PS_BLOCK_SPECIALS_DISPLAY'))
                           return;
                      if (!($products = $specials))
                       return;
                      $this->smarty->assign(array(
                                   'specials' => $specials,
                                   'products' => $products,
                                   'mediumSize' => Image::getSize(ImageType::getFormatedName('medium')),
                                    ));

                    }
                   return $this->display(__FILE__, 'blockspecials-home.tpl', $this->getCacheId('blockspecials|'.$random));
        }

2- Le contenu du fichier blockspecials-tab.tpl

<!-- MODULE TAB Block specials  -->
{counter name=active_li assign=active_li}
<li><a data-toggle="tab" href="#blockspecials" class="blockspecials {if $active_li == 1}active{/if}">{l s='Specials' mod='blockspecials'}</a></li>

<!-- /MODULE TAB Block specials -->

3- Le contenu du fichier blockspecials-home.tpl

<!-- MODULE HOME Block specials  -->
{counter name=active_ul assign=active_ul}
<div id="blockspecials" class="blockspecials tab-pane block products_block block_content toggle_content" >
{if $specials }
      <div class="block_content">
           {include file="$tpl_dir./prices-drop.tpl" products=$products}
      </div>
  {else}
      <p>{l s='No product specials are available at this time.' mod='blockspecials'}</p>
  {/if}

 </div>
<!-- /MODULE HOME Block specials -->

ATTENTION:

 

Avant toutes modifications sauvegarder un copie des fichiers d'origine (exemple : blockspecials.php en blockspecials.php.ORIGINE )

 

Cordialement Said

 

post-668076-0-77640300-1415494590_thumb.png

post-668076-0-47543600-1415494611_thumb.png

post-668076-0-01886500-1415494776_thumb.png

  • Like 2
Link to comment
Share on other sites

Bonjour,

 

Juste une demande supplémentaire.

J'ai en effet, grâce à votre aide, réussi à installer un onglet "Promotions" sur la page d'accueil.

Cependant, au lieu d'afficher "Promotions" dans le titre de l'onglet, c'est "Specials" qui est affiché.

J'ai chercher dans Traductions dans le BO et n'ai pas trouvé où traduire ce mot.

J'aurai pu mettre le mot "Promotions" dans le fichier blockspecials-tab.tpl mais comme le site doit être bilingue (français anglais)...

 

Avez-vous une astuce ?

 

Almur

Link to comment
Share on other sites

Bonjour,

 

Merci pour votre réponse.

J'ai pu mettre en place la traduction.

Il a cependant fallu que j'augmente la variable max_input_vars à la valeur 2044 en ajoutant une ligne dans le fichier php.ini de mon serveur local.

Mais tout est bon à présent.

Encore merci pour votre aide.

 

Almur

Link to comment
Share on other sites

  • 1 month later...

Bonjour,

 

Magnifique contribution mais j'obtiens une page blanche après la modification sur PS 1.6.0.7

 

avec le mode debug j'obtiens le message suivant :

 

Fatal error: Cannot redeclare BlockSpecials::hookDisplayHomeTab() in /home/elecauto/www/modules/blockspecials/blockspecials.php on line 191

 

Merci par avance!  :)

Link to comment
Share on other sites

  • 4 years later...
Le 09/11/2014 à 2:01 AM, S-HAMMANI a dit :

Bonjour;

 

Les étapes à suivre pour ajouter un onglet "PROMOTIONS" dans la page d'accueil prestashop 1.6.0.6

Les manipulations à faire :

Modification d'un seul fichier : modules/blockspecials/blockspecials.php

Création de deux fichiers tpl dans le dossier du module (modules/blockspecials/)

blockspecials-tab.tpl

blockspecials-home.tpl

 

 

1- Afin de griffer le module "PROMOTIONS" dans les displayHomeTab et displayHomeTabContent;

 a-Remplacer le code (dans blockspecials.phpà) suivant :


        if ((!$theme->default_right_column || !$this->registerHook('rightColumn'))
                   && ( !$theme->default_left_column || !$this->registerHook('leftColumn')))  

            PAR:


        if ((!$theme->default_right_column || !$this->registerHook('rightColumn'))
                      && ( !$theme->default_left_column || !$this->registerHook('leftColumn'))
                      && ( !$this->registerHook('hookDisplayHomeTab'))
                      && ( !$this->registerHook('hookDisplayHomeTabContent')))

b-Coller ces deux fonctions dans le même fichier après les fonctions de hook:

       


public function hookDisplayHomeTab($params)
        {
               return $this->display(__FILE__, 'blockspecials-tab.tpl',$this->getCacheId('blockspecials'));
        }
        public function hookDisplayHomeTabContent($params)
        {
               if (Configuration::get('PS_CATALOG_MODE'))
                   return;

                  // We need to create multiple caches because the products are sorted randomly
                  $random = date('Ymd').'|'.round(rand(1, max(Configuration::get('BLOCKSPECIALS_NB_CACHES'), 1)));

                  if (!Configuration::get('BLOCKSPECIALS_NB_CACHES') || !$this->isCached('blockspecials-home.tpl', $this->getCacheId('blockspecials|'.$random)))
                     {
                      if (!($specials = Product::getPricesDrop((int)$params['cookie']->id_lang, 0, 5)) && !Configuration::get('PS_BLOCK_SPECIALS_DISPLAY'))
                           return;
                      if (!($products = $specials))
                       return;
                      $this->smarty->assign(array(
                                   'specials' => $specials,
                                   'products' => $products,
                                   'mediumSize' => Image::getSize(ImageType::getFormatedName('medium')),
                                    ));

                    }
                   return $this->display(__FILE__, 'blockspecials-home.tpl', $this->getCacheId('blockspecials|'.$random));
        }

2- Le contenu du fichier blockspecials-tab.tpl


<!-- MODULE TAB Block specials  -->
{counter name=active_li assign=active_li}
<li><a data-toggle="tab" href="#blockspecials" class="blockspecials {if $active_li == 1}active{/if}">{l s='Specials' mod='blockspecials'}</a></li>

<!-- /MODULE TAB Block specials -->

3- Le contenu du fichier blockspecials-home.tpl


<!-- MODULE HOME Block specials  -->
{counter name=active_ul assign=active_ul}
<div id="blockspecials" class="blockspecials tab-pane block products_block block_content toggle_content" >
{if $specials }
      <div class="block_content">
           {include file="$tpl_dir./prices-drop.tpl" products=$products}
      </div>
  {else}
      <p>{l s='No product specials are available at this time.' mod='blockspecials'}</p>
  {/if}

 </div>
<!-- /MODULE HOME Block specials -->

ATTENTION:

 

Avant toutes modifications sauvegarder un copie des fichiers d'origine (exemple : blockspecials.php en blockspecials.php.ORIGINE )

 

Cordialement Said

 

post-668076-0-77640300-1415494590_thumb.png

post-668076-0-47543600-1415494611_thumb.png

post-668076-0-01886500-1415494776_thumb.png

Bonjour Said,

Vous précisez "prestashop 1.6.0.6" est-ce que cela veut dire que ce n'est pas valable avec la version 1.6.1.24 ?

Merci beaucoup.

Nadia

Link to comment
Share on other sites

il y a 46 minutes, S-HAMMANI a dit :

Bonjour Nadia

Je crois que la version "prestashop_1.6.1.24" a déjà intégré cette option par défaut

==========================

 

 

image.png.034828cccf2f9175c3a3e8b5f46f9284.png

image.png

Merci pour ta réponse.

Le souci, c'est qu'il affiche l'onglet mais ne va pas récupérer les articles en promos.
Sous l'onglet Promotions, j'ai "Aucun produit en promotion en ce moment" et pourtant, j'ai deux produits qui s'affichent en promotion dans la page /index.php?controller=prices-drop

Voici ce que j'ai sous l'onglet "Promotions" :

image.thumb.png.f4f76522945147b2f6f203761ae6a2c4.png

Voici ce que j'ai dans la page /index.php?controller=prices-drop

image.thumb.png.b2bc847a8a33bee92bd9db62d929efb7.png

PS: ne pas faire attention aux images inexistantes.

 

Merci 

Link to comment
Share on other sites

Le 15/10/2019 à 10:01 AM, S-HAMMANI a dit :

bonjour ;

essaye de:

- désactiver/activer ce module (dans Modules et Services > liste des modules).

- nettoyer le cache (Performances > Paramètres avancés > vider le cache).

Bonjour,

Merci Beaucoup, j'ai réussi à afficher la partie promotion maintenant mais je ne comprends pas pourquoi je n'ai que deux produits en promotions alors que j'en ai plusieurs en réalité.

Pourtant, le bandeau PROMO est affiché dans d'autres produits qui ne sont pas affichés sur la page (ou sous l'onglet "PROMO").

Très étrange.

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