Jump to content

Ajouter une focntion dans le module blocklayered


ach34

Recommended Posts

Bonjour,

 

Je veux exécuter une fonction dans blocklayered.tpl qui me permettrait de trier des couleurs différemment.

 

J'ai essayé de mettre ma fonction dans blocklayered.php mais ça ne marche pas, pourtant c'est le même module. 

 

Merci de votre aide.

Link to comment
Share on other sites

Bonjour,

 

Est-ce que tu pourrais indiquer dans le template quelle ligne(s) tu voudrais modifier STP ?

Si ça ne marche pas, c'est que tu n'as peut être pas posé ta fonction au bon endroit...

Eventuellement mettre ta fonction pour corriger si nécessaire.

 

ma fonction est juste pour valider... elle est ligne 365 après //ATTRIBUTES    dans   \themes\ps_montheme\modules\blocklayered\blocklayered.php

    //ATTRIBUTES

    public function ADgetListColor()
    {
        return "ok";
    }
    public function hookAfterSaveAttribute($params)
    {
...

Après je l'appelle dans \themes\ps_montheme\modules\blocklayered\blocklayered.tpl

<ul id="ul_layered_{$filter.type}_{$filter.id_key}" class="col-lg-12 layered_filter_ul{if isset($filter.is_color_group) && $filter.is_color_group} color-group{/if}">
     
      {assign var='ADref' value=ADgetListColor()}
       <p>test : {$ADref} </p>

J'ai l'erreur :

Fatal error: Uncaught --> Smarty Compiler: Syntax error in template "/share/MD0_DATA/Web/www/X009_dec/dev/themes/ps_montheme/modules/blocklayered/blocklayered.tpl" on line 90 "{assign var='ADref' value=ADgetListColor()}" unknown function "ADgetListColor" <-- thrown in /share/MD0_DATA/Web/www/X009_dec/dev/tools/smarty/sysplugins/smarty_internal_templatecompilerbase.php on line 90

Merci de votre aide

 

 

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

Mais tu ne peux pas assigner une fonction à exécuter dans smarty (ou tout du moins pas à ma connaissance)

Ton code php tel que décrit ici doit retourner une valeur qui sera assignée dans smarty, d'où l'erreur normale que tu as : Fatal.

 

Je suis novice avec prestashop. Mais j'ai déjà fait une fonction dans themes\ps_montheme\product.tpl  "getColor()"

 

product.tpl

                    {assign var="REF" value=$smarty.get.ref}
                    {if $REFCOUL = $product->getColor($REF)|escape:'html':'UTF-8'}
                        <p> Détails couleur : {$REFCOUL} </p>
                    {/if}

et la fonction je l'ai ajouté à override/classes/product.php

    public function getColor($ref)
    {
        return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
        SELECT `desc`
        FROM `'._DB_PREFIX_.'COULEUR`
        WHERE `ref` = \''.pSQL($ref).'\'');
    }

et ça marche !

 

Je pensais qu'en faisant de même ça marcherait avec blocklayered.tpl mais non.

 

Est-ce possible de faire du php directement dans un .tpl ?

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

Je crois que les baises {php} {/php} sont désactivées par défaut et ce n'est pas plus mal.

 

Essaye :

    public static function ADgetListColor()
    {
        return "ok";
    }

Et dans ton tpl 

{assign var="REF" value=BlockLayered::ADgetListColor()}

Après si tu nous en disait plus sur ce que tu veux comme tri, il a peu être plus simple :)

 

ça marche ! Merci beaucoup !

 

Pour répondre à ta question sur le tri :

 

j'ai des produits (du papier peint) qui sont déclinés en couleur mais se sont des produits qui peuvent avoir plusieurs fois la même couleur. Hors, prestashop ne permet pas d'associer une même couleur à plusieurs déclinaisons. (Pour moi la logique c'est la référence produit mais pour prestashop c'est l'attribut ce qui complique la gestion de ce type de produit). Je peux avoir un produit qui peut être décliné avec 3 blancs, 4 bleus...

 

Donc j'ai, créé des attributs : blanc1, blanc2....

 

Mais lorsque je veux utiliser le "Bloc navigation à facettes", il m'affiche blanc1, blanc2....

 

Donc je veux regrouper les attributs par couleur et modifier le lien :

 

Modifier

<li class="nomargin  col-lg-6">
    <input class="color-option  " name="layered_id_attribute_group_137" data-rel="137_3" id="layered_id_attribute_group_137" style="background: #9fa4ff;" type="button">
    <label for="layered_id_attribute_group_137" name="layered_id_attribute_group_137" class="layered_color" data-rel="137_3">
        <a href="http://nas2/DEC/index.php?id_category=18&controller=category#couleur-blanc1">blanc1<span> (4)</span></a>
    </label>
</li>
<li class="nomargin  col-lg-6">
    <input class="color-option  " name="layered_id_attribute_group_138" data-rel="138_3" id="layered_id_attribute_group_138" style="background: #5c88ff;" type="button">
    <label for="layered_id_attribute_group_138" name="layered_id_attribute_group_138" class="layered_color" data-rel="138_3">
        <a href="http://nas2/DEC/index.php?id_category=18&controller=category#couleur-blanc2">blanc2<span> (1)</span></a>  
    </label>
</li>

par ça

<li class="nomargin  col-lg-6">
    <input class="color-option  " name="layered_id_attribute_group_137" data-rel="137_3" id="layered_id_attribute_group_137" style="background: #ffffff;" type="button">
    <label for="layered_id_attribute_group_137" name="layered_id_attribute_group_137" class="layered_color" data-rel="137_3">
        <a href="http://nas2/DEC/index.php?id_category=18&controller=category#couleur-blanc1-blanc2">blanc<span> (5)</span></a>
    </label>
</li>

Merci de votre aide si vous avez une idée.

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