Jump to content

Récupérer une variable smarty avec les Helpers dans un .php


Recommended Posts

Salut à tous je suis un petit nouveau,
 
Depuis plusieurs semaines je m'amuse un peu sur presta et j'ai envie de faire un petit module perso.
J'utilise donc la doc et m'entraîne sur le petit module proposé "mymodule". Je me demande comment on fait pour récupérer des variables smarty en affichage dans mon back office. Ici j'ai donc une page .php qui marche très bien.
Au moment de récupérer la devise (en rouge dans mon exemple), la devise ne s'affiche pas. J'ai essayé différentes syntaxes, puis tenter de rajouter en début de fonction global $smarty;
 
L'idée n'est pas d'écrire €, mais bien de récupérer la variable pour qu'elle s'adapte en fonction de la devise de la boutique évidemment.
 
Bref je sèche complètement. Si quelqu'un peut m'éclairer pour la façon dont on récupère ces variables ça serait tip top car mes recherches Google n'ont rien donné ou alors je m'y prends mal. Merci d'avance :)
 

public function displayForm()
{ global $smarty;
$default_lang = (int)Configuration::get('PS_LANG_DEFAULT');
     
    // Init Fields form array
    $fields_form[0]['form'] = array(
        'legend' => array(
            'title' => $this->l('Settings'),
'icon' => 'icon-cogs',
 
        ),
        'input' => array(
            array(
                'type' => 'text',
                'label' => $this->l('Configuration value'),
                'name' => 'MYMODULE_NAME',
                'size' => 20,
                'prefix' => Tools::getValue($id_currency),
                'required' => true
            )
        ),

 

 

 

Link to comment
Share on other sites

Déjà tu devrais testé en ajoutant directement le € pour déterminer si c'est la méthode que tu utilise pour envoyer ta valeur dans le template qui bug ou si c'est ta méthode pour récupérer la currency qui bug.

 

Ensuite il faut aussi vérifier que $id_currency à une valeur et si oui laquelle (tu peux déjà tester en fixaqnt toi même la valeur d'id_currency pour aller chercher le symbole que tu attend).

  • Like 1
Link to comment
Share on other sites

Le "€" fonctionne très bien.

 

Tu veux dire qu'en début de fonction écrire un truc du genre :

 

$id_currency = (int)Configuration::get('PS_ID_CURRENCY');

 

Je suis peut être bête mais j'avais cru comprendre que smarty avait pour rôle de nous donner accès directement à des variables globales (comme la devise de la boutique) sans avoir à les déclarer non ?

Link to comment
Share on other sites

ben oui tu as raison mais pour le coup ton

$fields_form[0]['form'] = array(

il est pas dans un tpl mais dans un controller (ou du moins un fichier php de ton module) par conséquent pas de smarty ici.

 

Smarty ne fonctionne que pour les tpl (modéle MVC :) ).

 

Smarty c'est pour le V de vue pas pour le controller :)

  • Like 1
Link to comment
Share on other sites

Ok donc les Smarty ne s'utilisent que dans les fichiers template (.tpl). Dommage car je crois que les Helpers ne s'utilisent que dans les fichiers PHP (je me trompe?) et dans ce cas ça fait des croisements un peu gonflants.

 

Du coup j'ai réussi à appeler quelques variables comme celle-ci : 

 

'suffix' => Configuration::get('PS_SHOP_NAME'),

 

Par contre je me demande où on peut avoir accès à la liste des toutes les constantes (pour trouver ma fameuse Currency :D) car Google n'aide pas vraiment, je ne retrouve même pas PS_SHOP_NAME dans mes recherches alors que c'est la base je suppose.

 

Merci pour on aide en tout cas c'est très appréciable :).

Link to comment
Share on other sites

dans le dossier config tu as des fichiers de définitions

defines.inc smarty.config etc...

 

Pour éviter de me balader un peu partout j'ai commencer un mémo ici: 

http://blog.manit4c.com/2014/03/26/memo-prestashop/

 

Lorsque j'ai le temps je rajoute quelques bricole donc il évolue de temps en temps :)

 

Les helpers c'est pour simplifier un "widget" c'est à dire qu'en gros ça va te générer du code html,css, javascript juste mettant la bonne ligne de code dans ton controller.

 

Si par exemple tu veux créer un champ date qui utilise le datepicker jquery, essaye de trouver dans uncontroller d'origine de prestashop comment il est appelé tu verra c'est quelque ligne de code pas plus et ça simplifie tout et si tu potasse un peu tous cefichiers tu verra que tu peux même surcharger les helpers pour les adapter à ta convenance.

  • Like 1
Link to comment
Share on other sites

Super et merci pour ton lien c'est en effet bien pratique d'avoir tout ça sous le coude j'imagine.

 

Par contre dans ce que tu dis, si je comprends bien. Un fichier template : tu tapes tout "à la main". Donc si tu veux rajouter un datepicker ou colorpicker dans ton template .tpl il suffit de regarder dans un module créé par prestashop pour voir comment ils sont appelés. Il me semble avoir vu des trucs du genre dans les Helpers.

 

Par contre surcharger les helpers, ça doit être l'override. J'avoue sècher sur le sujet (un peu beginner sur les bords ^^) mais j'imagine que c'est pour customiser tes helpers. Mais en même temps si on peut pas se servir des helpers dans un fichier .tpl qui lui seul peut appeler des variables smarty (chose qu'on ne peut pas faire le fichier php)...J'ai du mal à comprendre la complexité du procédé je t'avoue. Avoir la possibilité d'utiliser les variables $smarty dans mon DisplayForm aurait rééllement posé des problèmes ?

 

Désolé si j'enquiquine avec mes questions de noob :D mais je préfère comprendre le fonctionnement avant de rester bloqué 3 jours puis abandonner :D.  

Link to comment
Share on other sites

Comme je le précise plus haut il faut bien comprendre le principe du MVC.

Si tu veux récupérer des variables smarty dans ton controller c'est que tu penses à l'envers.

 

Ce qui arrive dans smarty dois déjà avoir été traité précédemment par ton controller et jamais dans l'autre sens.

Dans tous les cas toutes les variables que tu trouvera dans smarty auront été envoyée par un controller (le tien que tu as créé ou un autre de base genre frontcontroller).

 

ça signifie également que toutes les variables que tu trouvera dans smarty sont accessible dans les controllers mais peut être avec une autre syntaxe.

Là ou smarty trouvera le symbole € avec $currency->sign,  le controller le trouvera par $this->context->currency->sign par exemple.

 

 

 

:

  • Like 1
Link to comment
Share on other sites

Génial !!! $this->context->currency->sign fonctionne à la perfection ! 

 

Tu as donc utilisé un "context Object" si je ne m'abuse : http://doc.prestashop.com/display/PS16/Using+the+Context+Object  

En allant voir du côté des variables smarty grâce à la fonction {debug} j'ai trouvé toute une liste de paramètres et ils fonctionnent très bien quand je les ai appelés en utilisant le context object.

 

Ok je comprends mieux le fonctionnement de smarty et cela explique très bien mon mauvais raisonnement et pourquoi je m'embrouillais.

 

Un grand merci pour ton aide fructueuse je marque le topic comme résolu si un noob dans mon style se pose des questions de ce genre :).

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