Aller au contenu

October 15, 2013

1

Smarty et Prestashop : Les variables globales utiles !

Prestashop a intégré par défaut dans votre boutique, des variables smarty qui vous seront très utiles lorsque vous effectuerez un développement spécifique dans votre boutique. Et voici, pour vous, la liste de ces précieuses variables !

{$base_dir}

Url de votre site web, racine du site. Utile et indispensable lorsque vous insérez des liens, je déconseille fortement de mettre des liens en dur directement dans votre code mais plutôt d’utilisez cette variable et toute les autres qui suivent, car le jour où vous migrez d’hébergement ou de nom de domaine, cela pourrait vous causer beaucoup de problèmes.

{$base_dir_ssl}

Idem via le protocol https.

{$content_dir}

Url vers votre dossier racine du site, peut changer en fonction des paramètres SSL. A ne pas confondre avec {$basedir}, cette variable vous donne l’Url complète jusqu’au dossier racine.

{$img_ps_dir}

Url vers le dossier img situé à la racine de votre boutique.

{$img_dir}

Url vers le dossier img de votre thème.

{$css_dir}

Url vers le dossier css de votre thème.

{$js_dir}

Url vers le dossier js situé à la racine de votre boutique.

{$tpl_dir}

Url vers votre dossier thème.

{$modules_dir}

Url vers le dossier modules. Utilisée principalement dans le code des modules.

{$mail_dir}

Url vers le dossier mail.

{$lang_iso}

Code ISO du language courant.

{$come_from}

Url absolue de la page précédente.

{$shop_name}

Nom de votre boutique.

{$cart_qties}

Nombre total de produits dans votre panier.

{$cart}

Contenu de votre panier sous forme de tableau.

{$currencies}

Liste des devises disponibles sous forme de tableau, retrouvez la liste via ce code {foreach from=$currencies item=c}{$c.name}{/foreach}

{$id_currency_cookie}

Identifiant de la devise actuelle.

{$languages}

Liste des langages disponibles dans la boutique sous forme de tableau, retrouvez la liste via ce code : {foreach from=$languages item=c}{$c.name}{/foreach}

{$logged}

Permet de vérifier si le client est connecté, utile pour afficher des éléments uniquement aux visiteurs enregistrés. (ex : {if $logged}Vous êtes connecté{/if}

{$page_name}

Nom de la page actuelle (ex: index)

{$customerName}

Nom et prénom du client actuellement connecté.

{$priceDisplay}

Paramètre actuel de l’affichage des prix (identifiant).

warning Ces variables ne seront disponibles uniquement lorsque le fichier init.php situé à la racine sera inclu.

Publié par
Plus d'articles pour la catégorie Autres, Conseils
37 Commentaires Poster un commentaire
  1. Jul 26 2011

    Bien utile merci!

    Reply
  2. Sep 19 2011

    Dommage qu’il n’existe pas une variable encore plus générique que base_dir

    Nous avons une boutique dans un sous répertoire /tienda/ et c’est un peu la merde pour s’y retrouver ;-) quand on met des images.
    (http://www.cavitacionshop.com/tienda/)

    En tout cas l’article est intéressant, merci.

    Reply
    • eMizZ
      Sep 19 2011

      Pourquoi ne pas utiliser la variable {$img_dir} ?

      Reply
      • Sep 20 2011

        Pour la simple et bonne raison que certaines images appartiennent à la boutique, d’autres au site generaliste, que certaines images sont appellées “en dur”, d’autres par la feuille de style… enfin bref, une bonne soupe quoi.

        Reply
  3. slim
    Dec 19 2011

    svp je viens de creer un mon premier site prestashop
    et j’ai un petit souci
    j’aimerais l’orsqu’on clique sur le logo de l’entreprise ( en haut du site)
    qu’il me redirige sur un autre site
    j’ai ouver le fichier header.tpl et j’ai remplacé
    c code ci

    {$HOOK_TOP}

    par celui ci

    {$HOOK_TOP}

    Mais malheuresement ca en fonctione pas

    Reply
    • eMizZ
      Dec 19 2011

      Surement un problème de cache !

      Supprimez le contenu du dossier /tools/smarty/compil/ !

      Reply
  4. Atiampo raymond
    Jan 14 2012

    bonjour, j adore votre site mis jai une question d ‘ ordre générale je vien d’ avoir un client qui me demande de faire un clone du site autotrader.com et a demandé un cms. j’ essaie de le convaincre d accepter que je le fasse en php objet+mvc sans cms mais dans le cas ou il naccepterait pas je lui proposerait prestashop etant vous un expert vous pensez que prestashop est un bon outil pour faire ce projet je précise que les délais sont plutôt agressifs
    merci d’ avance

    Reply
    • eMizZ
      Jan 14 2012

      prestashop est le meilleur CMS E-commerce pour créer un boutique en ligne personnalisée rapidement !

      Reply
  5. Laurent
    Mar 20 2012

    Bonjour Emilien, j’ai une petite question concernant la variable {$logged} : j’aurais besoin de n’afficher le panier que pour les utilisateurs enregistrés, mais je ne sais pas comment m’y prendre…
    Si vous pouviez me donner un p’tit coup de main… :-)
    Merci,
    Laurent

    Reply
    • eMizZ
      Mar 20 2012

      C’est simple, rendez-vous dans le fichier template du module “blockcart” dans /modules/blockcart/blockcart.tpl

      Il suffit alors d’entourer tout le code du fichier par {if $logged}…………{/if}

      Reply
  6. fred
    May 6 2012

    Bonjour, je suis ne train de développer un nouveau site et j’aimerai pouvoir remplacer les nom des langues en haut de page (En Fr Es…) par les drapeaux correspondants qui se trouvent dans le rep. img/l
    Je suis sous 1.4.7
    Pouvez vous m’aider svp ?

    Reply
    • bougrara
      May 15 2012

      Bonjour Emilien , je suis en train de développer un nouveau site et j’aimerai pouvoir afficher la ( code postal et la ville ) dans le BO dans anglet commande / information transporteur . de client qui ont fait une commande .

      De façon lorsque j’accède a mon BO et je clic sur (voir une commande ) je trouve l’adresse de livraison juste au dessous de nom de transporteur utiliser qui figure déjà par défaut .

      Merci .

      Reply
  7. FredV
    May 22 2012

    Il me semble qu’il y a dans ce post pas mal de confusion entre URL et chemin physique sur le serveur. Exemple: $tpl_dir ne donne pas une URL (=utilisable dans les liens d’une page) mais le chemin absolu du répertoire “templates” situé sur votre serveur.

    Reply
  8. Cyril
    Jun 6 2012

    Bonjour, merci pour vos tutos :)

    Comment faut-il s’y prendre pour afficher la variable {$free_ship} dans une autre page que shopping cart?

    Reply
    • Jun 6 2012

      Il faut la déclarer dans le FrontController

      Reply
  9. Cyril
    Jun 6 2012

    Merci pour votre réponse. Est-ce que vous auriez une petite piste pour m’orienter, car ce mot FrontController m’est complétement inconnu :o )

    Reply
    • Jun 6 2012

      c’est le fichier /classes/FrontController.php , ce fichier est appelé sur n’importe qu’elle page, pour récupérer la variable {$free_ship}, il faudra la déclarer dans le FrontController.

      Reply
  10. Cyril
    Jun 6 2012

    Merci :)

    Je parie que vous deviner ou je coince maintenant lol

    Je vais chercher maintenant que j’ai une base, merci encore.

    Reply
  11. Cyril
    Jun 6 2012

    Je me suis mal exprimé, quand je dis que je vais chercher maintenant, c’est pour pas abuser de votre gentillesse a répondre aussi rapidement, car ça fait déjà 1 mois que je cherche comment faire lol

    Reply
  12. Cyril
    Jun 7 2012

    Re bonjour, malgré la lecture de vos tutoriels, c’est un vrai casse tête pour un non initié de déclarer une variable, et on trouve pas beaucoup d’info à ce sujet. Si la variable fonctionne pour une page, comment faire pour qu’elle fonctionne sur une autre page?

    Reply
  13. Cyril
    Jun 8 2012

    Une idée?

    Reply
  14. francois
    Oct 2 2012

    Bonjour et merci pour ce récapitulatif.

    Je souhaite effectuer un test de type A/B sur prestashop. Pour cela je dois dupliquer mon thème, modifier la page souhaiter et passer une variable dans l’url pour les différencier.

    Mais comment passer une varibale dans une url ?

    Merci à vous !

    Reply
    • Oct 4 2012

      utilisez un paramètre dans l’url (?parametre=valeur) , récupérez ce dernier dans le controller ( Tools::getValue(‘parametre’) ) et afficher le template voulu en fonction de ce paramètre.

      Reply
      • francois
        Oct 9 2012

        Merci d’avoir pris le temps de répondre mais ca ne m’avance pas trop malheureusement. “utilisez un paramètre dans l’url (?parametre=valeur)” : c’est justement ce que je cherche à faire ?

        Ensuite quel code exact dois-je utiliser dans le controller ?

        Reply
        • Oct 9 2012

          Pour récupérer la valeur du paramètre :
          $valeur = Tools::getValue(‘parametre’);

          Reply
          • francois
            Oct 9 2012

            Vous parlez ici à un noob. Mais j’apprécie vraiment votre aide. Je vais continuer mes recherches. Merci et bonne continuation

  15. Oct 8 2012

    bonjour
    je souhaite appeler en AJAX un module existant de prestashop : homefeatured.
    c’est un site de location de voiture. l’idee c’est on rentre les dates de location on envoi puis ca met a jour les données du module homefeatured avec les vehicules dispo.
    mon probleme c’est que je sais pas comment integrer le homefeatured.tpl, mon bouton ajax fonctionne, mais ma question c’est comment faire apparaitre les donnée d’un template
    merci pour votre aide.

    Reply
    • Oct 9 2012

      function hookHome($params)
      {
      global $smarty;

      $category = new Category(1, (int)Configuration::get(‘PS_LANG_DEFAULT’));
      $nb = (int)Configuration::get(‘HOME_FEATURED_NBR’);

      $smarty->assign(array(
      ‘products’ => $category->getProducts((int)$params['cookie']->id_lang, 1, ($nb ? $nb : 10)),
      ‘add_prod_display’ => Configuration::get(‘PS_ATTRIBUTE_CATEGORY_DISPLAY’),
      ‘homeSize’ => Image::getSize(‘home’)));

      return $this->display(‘majDispo.tpl’);

      c’est surtout cette ligne que je souhaite faire “fonctionner”

      return $this->display(‘majDispo.tpl’);
      mais ca ne marche pas … alors comment faire ?
      merci pour votre aide

      Reply
      • Oct 11 2012

        ca y est j ai trouve…
        $smarty->display(‘majDispo.tpl’);

        Reply
    • lagrandeours
      Oct 13 2012

      voici la reponse plus complete si un jour ca peu aider quelqu’un
      require(‘../config/config.inc.php’);
      require(‘../init.php’);

      global $smarty;
      global $cookie;

      $category = new Category(1, (int)Configuration::get(‘PS_LANG_DEFAULT’));
      $nb = (int)Configuration::get(‘HOME_FEATURED_NBR’);

      $smarty->assign(array(
      ‘products’ => $category->getProducts((int)$cookie->id_lang, 1, ($nb ? $nb : 10)),
      ‘add_prod_display’ => Configuration::get(‘PS_ATTRIBUTE_CATEGORY_DISPLAY’),
      ‘homeSize’ => Image::getSize(‘home’)));
      $smarty->display( ‘majDispo.tpl’);

      Reply
  16. Nov 10 2012

    Merci pour ce petit lexique.
    J’aurais une question:
    Je voudrais afficher un popup uniquement quand un client est connecté.
    Peut être en utilisant la fonction {if $logged} {/if}
    Mais je bloque un peu

    Reply
  17. fab
    Dec 14 2012

    Bonjour,

    ma variable {$logged} ne fonctionne pas dans le template productscommets.tpl (module commentaire client).

    Elle affiche 0 alors que le client est loggué !
    La même variable dans le module infos client affiche bien le 1 attendu.

    Je ne comprends de quoi ça provient, ni comment je peux résoudre le problème…

    Reply
  18. Mar 9 2013

    Je veux savoir les variables du Cart avant et apres payment pour envoyer a Google comme information sur la vente; Product-id, product-name, Qty, email, address, …, Shipping. Est ce possible d’avoir la liste de ces varaibles?

    Reply
  19. BOUARE
    May 6 2013

    Bonjour a tous;
    je viens de débuter sous prestashop il y a juste une semaine et je suis dans l’urgence de créer une page de connexion(c’est a dire lorsqu’ un utilisateur saisis son login et mot de pass) je lui connecte et l’affiche ses infos. au départ j’avais réussi à faire avec les sessions php mais après des recherche sur internet j’ai appris que prestashop n’utilise pas la session. donc je me suis diriger vers les cookies mais mon plus gros problème est lorsque j’ouvre une session c’est comment changer l’affichage de mon entête vu sous prestashop chaque fichier php de la racine communique avec son équivalent tpl du dossier thème?. vu que j’instancie mon cookie ds la page connexion et comment faire pour changer l’affichage de l’entête dans le fichier header selon le client soit connecté ou non connecté.
    je crois qu’être claire la dessus. je vous remercie d’avance

    Reply
  20. Julien L
    Jul 12 2013

    Ces variables sont elles disponibles pour les templates des emails ?
    J’ai l’impression que non, du moins pas toutes. {shop_url} et {shop_name} oui, mais {img_dir} ne me renvoie rien.

    Comment faire pour disposer de toutes les variables smarty dans le template des emails ?

    Merci d’avance

    Reply
    • Julien L
      Jul 12 2013

      Bon, mauvais élève que je suis j’ai posé la question avant de chercher la réponse, donc à moins que quelqu’un ait plus simple, pour disposer d’autres variable dans les templates des mails, il faut overrider la class mail.php en ne recopiant que la fonction “public static function Send()”, et il faut rajouter vers la ligne 206 la variable que vous voulez. Par exemple pour avoir le chemin du dossier “img” de vote thème : $template_vars['{img_dir}'] = Tools::getShopDomain(true, true)._THEME_IMG_DIR_;

      Évidemment ça ne vaut le coup que si vous avez besoin de cette variable dans tous vos mails, sinon une simple surcharge du controller qui génère le mail à modifier suffira

      Julien

      Reply

Trackbacks & Pingbacks

  1. Smarty et Prestashop, comment ça marche ? | Emilien Malbranche | Analyse, Tutoriels et Modules pour votre e-commerce

Leave a Reply to bougrara

(requis)
(requis)

Note: Le HTML est autorisé. Votre e-mail (ne sera pas publié).

S'abonner aux commentaires


8 + 2 =