|
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 |
nerran Smarty n00b
Joined: 05 Jul 2010 Posts: 2
|
Posted: Mon Jul 05, 2010 6:36 am Post subject: Smarty / CMSMS - Créer une fonction |
|
|
Bonjour,
J'utilise CMSMS depuis quelques temps, mais en revanche, je suis nouveau dans l'utilisation de Smarty.
Mon problème est le suivant: dans un template, j'ai le code suivant
Code: | {foreach from=$events key=key item=event}
<tr>
<td><input name="event" type="radio" value="{$event.event_id}" /></td>
<td>{$event.event_date_start|date_format:"%e"} {$month_names[$month_number]} {$event.event_date_start|date_format:"%Y"}</td>
<td>{$event.event_title}</td>
<td>{alreadayordered}</td>
</tr>
{/foreach} |
Là ou j'ai crée , j'aimerai appeler une fonction PHP qui va m'afficher quelque chose en fonction de ma variable
Pour cela j'ai crée une nouvelle page function.displaylist.php que j'ai placé dans le répertoire de mon module.
La fonction est basique :
Code: | function smarty_function_alreadayordered($params, &$smarty)
{
return 'toto';
} |
Ce qui m'ennuie, c'est que sur la page de mon site, rien ne s'affiche, aucun message d'erreur, ni ma liste de 'toto', alors que mon code génère bien 5 résultats, donc je devrais voir 5 toto.
Il me semble, sans assurance, que quelque part dans la page de mon site, je devrais appeler cette page qui contient la fonction non ? Ou bien Smarty reconnait-il automatiquement la page du fait du nom qui lui est attribué ?
Par avance merci pour vos lumières, car je galère un peu. |
|
Back to top |
|
Gowser Smarty Pro
Joined: 19 Feb 2008 Posts: 104 Location: Nantes (France)
|
Posted: Mon Jul 05, 2010 6:57 am Post subject: |
|
|
Bonjour,
Déjà, étant donné que tu es nouveau vu la démarche que tu as fait d'utiliser un plugin, je dis bravo car peu de gens en utilise.
Tu en es pas très loin de la solution avec ton :
Code: |
function smarty_function_alreadayordered($params, &$smarty)
{
return 'toto';
}
|
Il te manques juste la compréhension de l'utilisation entre le return et le echo dans les plugins smarty :
Le return sera utilisé quand une fonction sera un modificateur de variable comme par exemple
Code: |
{$event.event_date_start|date_format:"%e"}
|
Que tu as utilisé plus haut dans ton code. En utilisant le return , tu indique que la retour modifiera la variable liée avec le "|".
Dans ton cas, il faut que tu utilise un "echo" qui affichera ton résultat car tu ne modifies pas de résultat (car tu fait un "{alreadayordered}" sans le lié avec une variable) :
Code: |
function smarty_function_alreadayordered($params, &$smarty)
{
echo 'toto';
}
|
Pour informations et pour éviter que tu passes des heures à chercher, si tu veux passer des variables à ton plugin, il suffit de rajouter des attributs lors de l'appel de ton plugin et de les récupérer dans ta fonction par leur nom :
Coté template :
Code: |
....
<!-- je passe à mon plugin le contenu de event_date_start en le nommant event_date -->
<td>{alreadayordered even_date=$event.event_date_start}</td>
....
|
Coté du plugin :
Code: |
function smarty_function_alreadayordered($params, &$smarty)
{
// je récupère la variable even_date grâce à son nom
$event_date = $params['event_date'];
// j'affiche mon résultat
echo 'toto';
}
|
Bonne continuation sur smarty |
|
Back to top |
|
nerran Smarty n00b
Joined: 05 Jul 2010 Posts: 2
|
Posted: Mon Jul 05, 2010 9:52 pm Post subject: |
|
|
Salut Gowser,
Merci pour ces explications... très utiles.
En fait, en respectant toutes ces consignes, j'ai une erreur
Quote: | string(166) "Smarty error: [in module_db_tpl:CGCalendar;upcominglist line 24]: syntax error: unrecognized tag 'alreadayordered' (Smarty_Compiler.class.php, line 590)" |
Ce qui veut dire je suppose que ma page n'arrive pas à appeler la page de fonction que j'ai crée avec l'appel de cette fonction ?
Ma page s'appelle function.alreadayordered.php |
|
Back to top |
|
Gowser Smarty Pro
Joined: 19 Feb 2008 Posts: 104 Location: Nantes (France)
|
Posted: Tue Jul 06, 2010 6:47 am Post subject: |
|
|
Bonjour,
Quote: | Ce qui veut dire je suppose que ma page n'arrive pas à appeler la page de fonction que j'ai crée avec l'appel de cette fonction ? |
Exactement, il ne reconnait pas cette fonction donc cela indique qu'il n'a pas réussi à charger la fonction.
Si smarty t'indique ce message c'est que tu t'es certainement trompé de répertoire pour ce plugin (le nom du fichier me parrait correct, pas de différence entre le nom du fichier et le nom de la fonction)
Il faudrait que tu regarde attentivement où tu as déposé ce fichier. Je te conseille de ne pas le mettre dans le répertoire 'smarty/plugins' car en cas de mise à jour du moteur smarty, il risque d'être supprimé.
Tu devrais te créer un répertoire où tu stockeras tes plugins perso et configurer smarty pour qu'il puisse y accèder :
Voici une arborescence exemple :
- smarty (moteur smarty)
- plugins (plugins standards de smarty)
- plugins_perso (tes plugins perso)
Et voici la configuration pour smarty :
Code: |
$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
|
Normalement avec cela, smarty devrait non seulement charger ses plugins standards mais également tes plugins personnels. |
|
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
|