|
Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon. |
|
View previous topic :: View next topic |
Author |
Message |
missou55 Smarty n00b
Joined: 05 Jul 2010 Posts: 4
|
Posted: Mon Jul 05, 2010 10:52 am Post subject: Fonction PHP |
|
|
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 |
|
Gowser Smarty Pro
Joined: 19 Feb 2008 Posts: 104 Location: Nantes (France)
|
Posted: Mon Jul 05, 2010 2:07 pm Post subject: |
|
|
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 )
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 ) :
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 : http://fr2.php.net/manual-lookup.php?pattern=today&lang=fr
++ |
|
Back to top |
|
missou55 Smarty n00b
Joined: 05 Jul 2010 Posts: 4
|
Posted: Mon Jul 05, 2010 2:39 pm Post subject: |
|
|
`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 |
|
Gowser Smarty Pro
Joined: 19 Feb 2008 Posts: 104 Location: Nantes (France)
|
Posted: Mon Jul 05, 2010 3:15 pm Post subject: |
|
|
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 |
|
Back to top |
|
missou55 Smarty n00b
Joined: 05 Jul 2010 Posts: 4
|
Posted: Tue Jul 06, 2010 7:32 am Post subject: |
|
|
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 |
|
Gowser Smarty Pro
Joined: 19 Feb 2008 Posts: 104 Location: Nantes (France)
|
Posted: Tue Jul 06, 2010 8:28 am Post subject: |
|
|
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 |
|
missou55 Smarty n00b
Joined: 05 Jul 2010 Posts: 4
|
Posted: Tue Jul 06, 2010 9:08 am Post subject: |
|
|
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 |
|
Gowser Smarty Pro
Joined: 19 Feb 2008 Posts: 104 Location: Nantes (France)
|
Posted: Tue Jul 06, 2010 9:48 am Post subject: |
|
|
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 |
|
|
|
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
|
|