Jump to content

Appeler une fonction dans un fichier twig


Recommended Posts

Posted (edited)

Bonjour,

Je créer actuellement une boutique en 1.7.7.4 et je rencontre actuellement un problème. Ce problème est mon manque de connaissance sur symfony. Fin bon je m'explique je souhaite faire appel a une fonction ce trouvant dans ma classe de Product qui est en override, ceci étant dit je souhaite que cette fonction s'affiche sur un bloc qui se trouve dans order.Le fichier en question est product.html.twig mais vu que ce n'est pas un tpl je ne peux pas faire un simple

{Product::mafonction($id_order_detail)}

donc j'ai été faire mes recherches afin de trouver une solution.. j'ai vu qu'il n'était pas "possible" directement d'appeler une fonction php dans un fichier twig et que la syntaxe pour appeler une fonction est la suivante

{{mafonction(Parametre)}}

Mais du coup ce qui semble logique il ne trouve pas ma fonction qui se trouve dans la classe Product.php

Alors j'aimerai savoir si quelqu'un connaitrait la solution afin que je puisse appeler ma fonction dans le fichier twig 

 

Merci d'avance 

 

ma version ps 1.7.7.4

Edited by Bllidz (see edit history)

Share this post


Link to post
Share on other sites

  • Bllidz changed the title to Appeler une fonction dans un fichier twig
Posted (edited)
23 minutes ago, doekia said:

Si la fonction est statique, comme en smarty {{Product::mafonction($id_order_detail)}}

Salut doekia, 

 

Merci de ta réponse cependant j'avais déjà essayé et ça me retournait une erreur

l'erreur en question :

 image.png.2758d09d24a0dd9c4edf6a1d60c695f9.png

 

(j'ai mit un paramètre brut qui et 14 pour tester)

le td du fichier product.html.twig qui se trouve dans src/PrestaShopBundle/Resources/views/Admin/Sell/Order/Order/Blocks/View

<td >{{Product::maFonction(14)}}</td>

et ma fonction Product.php dans  override/classes


class Product extends ProductCore
{

     /*Modif jérémy*/
    
      public static function maFonction($id_order_detail) 
     { 
         return Db::getInstance()->getvalue('SELECT date_liv FROM `' . _DB_PREFIX_ . 'order_detail`
 
             WHERE  `id_order_detail` = '. (int) $id_order_detail) ;          
      } 

(c'est une simple requete sql) 

Je ne sais pas si le code aide a mieux comprendre l'erreur car de ce que je comprends c'est qu'il n'aime pas les :: après Product 

Et j'ai bien vidé le cache également car on ne sait jamais 

 

Edited by Bllidz (see edit history)

Share this post


Link to post
Share on other sites

1 hour ago, doekia said:

En effet j'avais zappé que la syntaxe :: n'est pas admise. Il faut enregistrer la fonction en extension Twig

https://stackoverflow.com/questions/32920217/how-to-call-static-function-in-symfony2-twig-template#46636220

 

En même temps ton use case (requête SQL) devrait être pensé ailleurs qu'en view (twig)

Merci je regarde ça demain matin, je reviens si besoin.

Dans un sens tu as raison mais sachant que je refais juste tout ce que j'avais fait en 1.7.6.9 sur la partie commande qui a migré en symfony. Après je me prends certainement la tête et il y'a sûrement mieux a faire dans un sens. :D 

CDT 

Share this post


Link to post
Share on other sites

17 hours ago, doekia said:

En effet j'avais zappé que la syntaxe :: n'est pas admise. Il faut enregistrer la fonction en extension Twig

https://stackoverflow.com/questions/32920217/how-to-call-static-function-in-symfony2-twig-template#46636220

 

En même temps ton use case (requête SQL) devrait être pensé ailleurs qu'en view (twig)

Bon je reviens car j'ai été regarder ta solution , et regarder sur le net pour comprendre comment marche la solution cependant je ne comprends pas tout.

Donc la solution pour créer un filtre est ça 


$viewVars['MyStaticClass'] = new MyStaticClass();
// ...
$html = $twig->render('myTemplate.html.twig', $viewVars);

et dans le fichier twig :

{{ MyStaticClass.getData() }}

 

Cependant je ne vois pas ou faut mettre la première partie, car cette solution utilise la fonction render() de $twig cependant je n'ai pas d'objet portant ce nom. Dois mettre dans ma classe product.php  ? ou dois-je créer une fonction si oui comment est elle appelé ? 


$viewVars['prod'] = new Product();
// ...
$html = $twig->render('Product.html.twig', $viewVars);


et dans le fichier product.html.twig
{{ prod.mafonction(id_order) }}

 

Merci de ton aide 

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More