Smarty Forum Index Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon.

Fonction PHP

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Language: French
View previous topic :: View next topic  
Author Message
missou55
Smarty n00b


Joined: 05 Jul 2010
Posts: 4

PostPosted: Mon Jul 05, 2010 10:52 am    Post subject: Fonction PHP Reply with quote

Bonjour,

Je suis nouveau sur smarty, et je trouve ce langage très intéressant.
J' ai tourner sur les forum de smarty, beaucoup de sujets tournent autour de ma demande, mais je n' ai toujours pas réussi.

Je voudrai utiliseer une fonction php avec une variable dynamique smarty mais je n' y arrive pas.

Voici ma fonction :

Code:
// fonction pour comparer 2 dates
function smarty_function_nbjours($datedeb, $datefin) {
   list ($yearF, $monthF, $dayF) = explode ('-', $datedeb);
   list ($yearC, $monthC, $dayC) = explode ('-', $datefin);
   if(strlen($yearF)===4){
      if (false === @checkdate ($monthF, $dayF, $yearF) || false === @checkdate ($monthC, $dayC, $yearC)) {
         return false;
      } else {
         $tFar = mktime (0,0,0,$monthF, $dayF, $yearF);
         $tClose = mktime (0,0,0,$monthC, $dayC, $yearC);
         $tDistance = $tFar - $tClose;
         return round ($tDistance/(24*60*60));
      }
   }else{
         return false;
      }
}



et dans mon fichier tpl, j' ai ma variable qui s' appelle {$product.reduction_to}.

Je voudrai utiliser également la fonction php today() .

Merci de votre aide.
Back to top
View user's profile Send private message
Gowser
Smarty Pro


Joined: 19 Feb 2008
Posts: 104
Location: Nantes (France)

PostPosted: Mon Jul 05, 2010 2:07 pm    Post subject: Reply with quote

Bonjour,

Tu y étais presque !!

Il faut juste respecter une certaine syntaxe quand on écrit une fonction smarty : Il faut avoir le paramètre '$params' qui contient toutes les variables fournies à la fonction et le paramètre '$smarty' qui est la référence de la classe smarty (afin de pourvoir exécuter des fonctions smarty dans ton plugin Smile )

Donc voici ta fonction réécrite :

Je me suis permit quelques libertés, comme ajouter un assign qui te permettra si tu le passe en arguments d'assigner une variable au lieu d'afficher le résultat, d'inverser ton "$tDistance = $tFar - $tClose;" qui renvoyait un chiffre négatif

Code:

<?php

// fonction pour comparer 2 dates
function smarty_function_nbjours($params, &$smarty) {
   // initialisation de la variable de resultat (afin d'eviter de mettre return false partout, ca allege le code)
   $return = false;

   // recuperation des parametres
   $datedeb = $params['datedeb'];
   $datefin = $params['datefin'];
   
   $assign = $params['assign'];
   
   // mise en variables des dates explosees
   list ($yearF, $monthF, $dayF) = explode ('-', $datedeb);
   list ($yearC, $monthC, $dayC) = explode ('-', $datefin);
   
   // si la date est sur 4 caracteres
   if(strlen($yearF)===4){
      // si les 2 dates sont valides
      if (@checkdate ($monthF, $dayF, $yearF) && @checkdate ($monthC, $dayC, $yearC)) {
         // on fabrique les dates en mktime
         $tFar = mktime (0,0,0,$monthF, $dayF, $yearF);
         $tClose = mktime (0,0,0,$monthC, $dayC, $yearC);
         
         // j'ai inverse ton test car sinon il te renvoi du negatif
         $tDistance = $tClose - $tFar;
         
         // on retourne le resultat
         $return = round ($tDistance/(24*60*60));
      }
   }
   
   // si on assigne le resultat a une variable
   if(!empty($assign)){
      $smarty->assign($assign, $return);
   }
   // sinon on l'affiche
   else{
      return $return;
   }
}

?>


Du coup tu peux utiliser ta fonction comme cela :

Sans l'assign :
Code:

{nbjours datedeb='2010-01-10' datefin='2010-01-20'}

--> affiche 10


Avec l'assign, qui placera le résultat dans une variable 'nombreJour' :
Code:

{nbjours assign='nombreJour' datedeb='2010-01-10' datefin='2010-01-20'}

--> met le resultat dans nombreJour


{$nombreJour}

--> affiche 10


Si tu veux utiliser ta variable dynamique, tu pourra faire (évidemment ton résultat te renverra 0 car on soustrait une date à elle même Smile ) :
Code:

{nbjours datedeb=$product.reduction_to datefin=$product.reduction_to}



Concernant la fontion "today" , je pense que tu as du te tromper car elle n'existe pas Smile : http://fr2.php.net/manual-lookup.php?pattern=today&lang=fr

++
Back to top
View user's profile Send private message Send e-mail
missou55
Smarty n00b


Joined: 05 Jul 2010
Posts: 4

PostPosted: Mon Jul 05, 2010 2:39 pm    Post subject: Reply with quote

`Merci pour la reponse et le temps que tu y a passer dessus.

Mais lorsque j'utilise la fonction ma page ne s'affiche pas. Pourtant la fonction de depart est correcte et je pense qu'il trouve bien le fichier ou se trouve la fonction parce qu'il m'affiche un affichage different si je le supprime.

Auriez-vous une idee?

J'ai essayer avec tous les formes d'appel de la fonction mais ca ne marche pas.

J'ai decouvert que la date en smarty etait :
Code:
{$smarty.now|date_format:'%Y-%m-%d'}



Merci de votre aide.
Back to top
View user's profile Send private message
Gowser
Smarty Pro


Joined: 19 Feb 2008
Posts: 104
Location: Nantes (France)

PostPosted: Mon Jul 05, 2010 3:15 pm    Post subject: Reply with quote

Rebonjour,

Concernant ta page blanche tu dois avoir l'affichage des erreurs PHP de désactiver.

Pour le réactiver, il faut que tu mettes dans ton fichier PHP :
Code:

ini_set("display_errors", 1);


Ca te permettra de voir les erreurs qui apparaissent.


Sinon je pense que tu dois avoir un problème au niveau du chemin de tes plugins. Il faudrait que tu me dises les erreurs qui s'affichent (avec la modif du display_errors) et que tu me dises aussi ou tu as placé ton plugin

Je reste attentif à ton problème Smile
Back to top
View user's profile Send private message Send e-mail
missou55
Smarty n00b


Joined: 05 Jul 2010
Posts: 4

PostPosted: Tue Jul 06, 2010 7:32 am    Post subject: Reply with quote

Merci encore de ton aide et de ta contribution

Voici mon message d'erreur.

Quote:
Fatal error: Smarty error: [in /var/www/vhosts/www.elterrassa.com/web/V3/themes/blackwhite/./product-list.tpl line 54]: syntax error: unrecognized tag 'nbjours' (Smarty_Compiler.class.php, line 590) in /var/www/vhosts/www.aaaaaa.com/web/V3/tools/smarty/Smarty.class.php on line 1095


Sinon, pour le chemin du fichier, j'ai essayer egalement de mettre directement ma fonction dans le fichier php (header.php)

Au départ, j'avais fais un require_once("fonctions.php"); et placer le module dans le fichier fonction.php


Merci
Back to top
View user's profile Send private message
Gowser
Smarty Pro


Joined: 19 Feb 2008
Posts: 104
Location: Nantes (France)

PostPosted: Tue Jul 06, 2010 8:28 am    Post subject: Reply with quote

Bonjour,

Ton problème est qu'il faut mettre les plugin de smarty dans un répertoire spécifique , en suivant également une règle de nommage du fichier.

Il faut que ta fonction soit dans un fichier spécifique et placé dans un répertoire connu de smarty sinon il ne sera pas reconnu en tant que plugin et donc inaccessible en tant que fonction ou modifier


Pour cela, il faut que ton fichier qui contiendra ton plugin s'appelle : function.nbjours.php

Concernant le chemin du fichier, j'ai donné une explication recemment ce matin à un autre utilisateur : http://www.smarty.net/forums/viewtopic.php?t=17654#65548


Bonne lecture !!
Pour faire simple, il faut que tu places ton fichiers dans un répertoire de plugin et déclarer ce répertoire dans la configuration de smarty
Back to top
View user's profile Send private message Send e-mail
missou55
Smarty n00b


Joined: 05 Jul 2010
Posts: 4

PostPosted: Tue Jul 06, 2010 9:08 am    Post subject: Reply with quote

Tés un GENIE !!!

merci, par contre je l'ai fais a la barbare, je n'ai pas reussi a trouver ou se trouvais l'endroit pour configurer le repertoire des plugins persos, donc du coup je l'ai placer dans celui des smarty.


Merci
Back to top
View user's profile Send private message
Gowser
Smarty Pro


Joined: 19 Feb 2008
Posts: 104
Location: Nantes (France)

PostPosted: Tue Jul 06, 2010 9:48 am    Post subject: Reply with quote

Pour configuré son répertoire perso pour les plugins, c'est simplement quand tu fait ton instance de la classe de smarty dans ton php qu'il faut lui spécifier :

Un petit exemple
Code:

<?php

// instance de smarty
$smarty = new Smarty();

$smarty->plugins_dir[] = '/chemin/vers/smarty/plugins/'; // qui pointe vers les plugins standards
$smarty->plugins_dir[] = '/chemin/vers/plugins_perso'; // qui pointe vers tes plugins perso

$smarty->display('ton_template.tpl');

?>


++
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    Smarty Forum Index -> Language: French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group
Protected by Anti-Spam ACP