PrestashopUser03 Posted November 2, 2017 Share Posted November 2, 2017 (edited) Bonjour à tous, Comment faire pour ajouter du php dans des fichiers tpl sachant que les balises {php}{/php} ne fonctionnent pas et que mon script est trop gros pour tout faire passer dans une variable (a priori en tous cas, je vois aps comment faire passer tout ça dans une variable) ? En détail, je cherche à faire passer les infos d'une API dans la fiche produit (products.tpl), ce qui signifie qu'une fois que j'aurai inséré mon bout de code, je devrai faire d'autres opérations telles que des if /else etc... Comment faire? Voici le code en question <?php require("libs/smarty.class.php"); $curl = curl_init(); $opts = [ CURLOPT_URL => 'url de l'api', CURLOPT_RETURNTRANSFER => true, ]; curl_setopt_array($curl, $opts); $response = json_decode(curl_exec($curl), true); ?> <!DOCTYPE html> <html> <head> <title></title> <link rel="stylesheet" type="text/css" href="style.css"> <meta charset="utf-8"> </head> <body> <table> <tr> <th>Durée</th> <th>Loyer</th> <th>Avec un premier versement de</th> </tr> <?php $test = $response['RENT_PRODUCT_WITH_REDEMPTION']['publicPriceWithDurations']; for ($i=0; $i < 5; $i++) { ?> <tr> <td><?php echo $test[$i]['durationInMonths']?> mois</td> <td><?php echo number_format($test[$i]['priceInCts']/100, 2). ' '; ?>€/mois</td> <td><?php echo number_format($test[$i]['downPayment']['priceInCts']/100, 2). ' '; ?> €/mois</td> </tr> <?php } ?> </table> Merci d'avance pour vos réponses. Edited November 2, 2017 by PrestashopUser03 (see edit history) Link to comment Share on other sites More sharing options...
PrestashopUser03 Posted November 2, 2017 Author Share Posted November 2, 2017 Pas d'idée? Link to comment Share on other sites More sharing options...
BeComWeb Posted November 3, 2017 Share Posted November 3, 2017 Bonjour, Ce que tu essayes de faire va à l'encontre des bonnes pratiques et du concept de MVC en général. Tu dois créer un module, qui contiendra toute ta logique (PHP) puis transmettra les variables à la vue (le template, via le hook de ton choix) 1 Link to comment Share on other sites More sharing options...
Olecorre Posted November 3, 2017 Share Posted November 3, 2017 tu peux en mettant {php} {/php} mais très fortement déconseillé. Link to comment Share on other sites More sharing options...
PrestashopUser03 Posted November 6, 2017 Author Share Posted November 6, 2017 Bonour à tous, J'ai suivi vos conseils et j'ai créé un module, cependant, même si j'ai bien compris comment afficher des informations sur la page product.tpl, les informations que j'affiche sont des informations ne prenant pas compte des caractéristiques des produits. J'aimerais donc savoir de quelle façon récupérer les informations affichées sur la page produit? Exemple concret : j'ai une paire de chaussures noires à 45€, comment faire pour récupérer la marque, la couleur, le prix etc... dans le module ? Merci d'avance Link to comment Share on other sites More sharing options...
Matt K. Posted November 6, 2017 Share Posted November 6, 2017 Bonjour, Quelques pistes : Si tu as un objet product depuis ton module tu peux déjà faire : d($product); Tu verra que tu as déjà plein d'info. Ensuite tu peux utiliser la méthode $product->getAttributeCombinations($id_lang); Pour récupérer les déclinaisons.. Hésite pas fouiller la classe Product. Tu devrais normalement avoir tous les outils nécessaire. Bon courage ! 1 Link to comment Share on other sites More sharing options...
PrestashopUser03 Posted November 6, 2017 Author Share Posted November 6, 2017 Merci pour cette réponse, mais en fait, je n'utilise pas la classe product dans mon module; il a pour but de récupérer des informations d'une API et de les adapter en fonction de mon produit. Exemple, si quelqu'un est sur une paire de nike en taille 45 , j'ai besoin d'insérer les informations du produit dans l'url faisant la requête http à l'API. Ca donnera un truc du genre : https://www.urldelapi?marque='marqueduproduit'&category='catégorieduproduit'... A l'heure actuelle je suis bloqué parce que je ne sais pas comment faire pour récupérer les informations de la fiche produit et m'en servir dans le fichier .php de mon module. Merci d'avance pour vos réponses. Link to comment Share on other sites More sharing options...
Matt K. Posted November 6, 2017 Share Posted November 6, 2017 Mmmh. Je vois. Pour moi ça dépend vraiment de ce que tu veux faire. 1) Tu peux soit trouver le meilleur hook sur lequel tu peux connecter ton module -> Listes des hook : https://www.team-ever.com/prestashop-1-6-la-liste-des-hooks/ -> Rechercher dans product.tpl les hooks utilisés (CTRL+F "hook") https://github.com/PrestaShop/PrestaShop/blob/1.6.1.x/themes/default-bootstrap/product.tpl 2) Créer ton propre hook et le mettre l'endroit que tu veux dans product.tpl 3) Faire ton appel à ton API directement dans un override de ProductController (cette solution te permettra d'être plus flexible). Voila ^^ 1 Link to comment Share on other sites More sharing options...
PrestashopUser03 Posted November 6, 2017 Author Share Posted November 6, 2017 Merci beaucoup pour la rapidité de vos réponses, mon module est connecté à hookdisplayRightColumnProduct, puis-je quand même appeler des paramètres de cette page dasn la page nomdumodule.php? Et si oui, comment appeler les différents éléments de la page product comme par exemple le prix, la catégorie etc? Je précise que j'ai bien réussi à créer un module et à afficher le contenu d'un lien de l'api dans l'intégralité des fiches produits du site, je bloque simplement sur le fait de trouver les catégories prix etc pour que le contenu de ce qui est affiché soit personnalisé à chaque produit. Concernant l'override ou la création d'un hook, je n'ai pas encore les compétences pour le faire. Link to comment Share on other sites More sharing options...
Matt K. Posted November 6, 2017 Share Posted November 6, 2017 Dans ta fonction qui gère ce hook je pense que si tu regardes la variable $params : d($params); Tu devrais retrouver ton objet product ou au moins l'id du produit. C'est par là qu'il faut utiliser pour retrouver les informations que tu veux. Link to comment Share on other sites More sharing options...
PrestashopUser03 Posted November 6, 2017 Author Share Posted November 6, 2017 J'ai tenté de faire ça, et voilà ce ça n'a rien donné : [associations] => Array ( [cart_rows] => Array ( [resource] => cart_row [virtual_entity] => 1 [fields] => Array ( [id_product] => Array ( [required] => 1 [xlink_resource] => products ) [id_product_attribute] => Array ( [required] => 1 [xlink_resource] => combinations ) , je vous poste le code de la page "nomdumodule.php" au hook en question. Je n'ai pas fait de boucles parce que je n'ai pas trouvé comment afficher une boucle "compliquée" avec smarty, j'ai donc tout affiché en dur. Comment faire pour que cette page php récupère les informations de chaque page produit? (si on était en procédural, j'aurais fait un fetch mais c'est pas aussi simple lol): public function hookdisplayRightColumnProduct($params) { $curl = curl_init(); $opts = [ CURLOPT_URL => 'https://urldelapi?trademark=nike&categoryPath=ALL%SHOES&kind=PRODUCT&unitaryPriceInCts=200000&quantity=1&personType=NATURAL', CURLOPT_RETURNTRANSFER => true, ]; curl_setopt_array($curl, $opts); $response = json_decode(curl_exec($curl), true); $test = $response['RENT_PRODUCT_WITH_REDEMPTION']['publicPriceWithDurations']; $moissix=$response['RENT_PRODUCT_WITH_REDEMPTION']['publicPriceWithDurations'][0]['durationInMonths']; $moisdouze=$test[1]['durationInMonths']; $moisdixhuit=$test[2]['durationInMonths']; $moisvingtquatre=$test[3]['durationInMonths']; $moistrentesix=$test[4]['durationInMonths']; $loyersix=number_format($test[0]['priceInCts']/100, 2); $loyerdouze=number_format($test[1]['priceInCts']/100, 2); $loyerdixhuit=number_format($test[2]['priceInCts']/100, 2); $loyervingtquatre=number_format($test[3]['priceInCts']/100, 2); $loyertrentesix=number_format($test[4]['priceInCts']/100, 2); $paiementsix=number_format($test[0]['downPayment']['priceInCts']/100, 2); $paiementdouze=number_format($test[1]['downPayment']['priceInCts']/100, 2); $paiementdixhuit=number_format($test[2]['downPayment']['priceInCts']/100, 2); $paiementvingtquatre=number_format($test[3]['downPayment']['priceInCts']/100, 2); $paiementtrentesix=number_format($test[4]['downPayment']['priceInCts']/100, 2); $this->context->smarty->assign(array( "moissix"=>$moissix, "moisdouze"=>$moisdouze, "moisdixhuit"=>$moisdixhuit, "moisvingtquatre"=>$moisvingtquatre, "moistrentesix"=>$moistrentesix, "loyersix"=>$loyersix, "loyerdouze"=>$loyerdouze, "loyerdixhuit"=>$loyerdixhuit, "loyervingtquatre"=>$loyervingtquatre, "loyertrentesix"=>$loyertrentesix, "paiementsix"=>$paiementsix, "paiementdouze"=>$paiementdouze, "paiementdixhuit"=>$paiementdixhuit, "paiementvingtquatre"=>$paiementvingtquatre, "paiementtrentesix"=>$paiementtrentesix, )); return $this->display(__FILE__, "views/templates/front/product.tpl"); } Link to comment Share on other sites More sharing options...
Thibaud Posted December 8, 2020 Share Posted December 8, 2020 Bonjour, je suis nouveau ici et j'ai une question dans le même genre que notre amis PrestashopUser03, sauf que ma requête est beaucoup plus simple que ce dernier. Je m'explique je suis sur prestashop 1.7.4 et je voudrais savoir comment faire pour diviser le prix de mes produis qui sont supérieur à 100€ par exemple et afficher le prix diviser par 4 ? Jusqu'à présent j'ai réussi à diviser tout les prix des produits par 4 et à l'afficher mais je souhaite que cela s'applique que aux produits de 100€ jusqu'à 2000€ Bout de code (j'ai deux version qui fonctionne) 1 : <span>Payer en 4 fois : {math equation="x / y " x=$product.price_amount y=4}€</span> 2 : <span> {$product.price_amount/4}€ </span>Pendant 4 Mois</span> le problème est le même je n'y arrive pas avec les balises <?php mais comme j'ai pu le voir plus haut cela est plutôt normale. Ma question est esque je peux le mettre directement dans le code HTML sans crée de module pour faire cette division de prix ? Merci d'avance pour votre réponse Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now