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

Smarty / CMSMS - Créer une fonction

 
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
nerran
Smarty n00b


Joined: 05 Jul 2010
Posts: 2

PostPosted: Mon Jul 05, 2010 6:36 am    Post subject: Smarty / CMSMS - Créer une fonction Reply with quote

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
Quote:
{alreadayordered}
, j'aimerai appeler une fonction PHP qui va m'afficher quelque chose en fonction de ma variable
Quote:
$event.event_id


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
View user's profile Send private message
Gowser
Smarty Pro


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

PostPosted: Mon Jul 05, 2010 6:57 am    Post subject: Reply with quote

Bonjour,

Déjà, étant donné que tu es nouveau vu la démarche que tu as fait d'utiliser un plugin, je dis bravo Smile 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
View user's profile Send private message Send e-mail
nerran
Smarty n00b


Joined: 05 Jul 2010
Posts: 2

PostPosted: Mon Jul 05, 2010 9:52 pm    Post subject: Reply with quote

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
View user's profile Send private message
Gowser
Smarty Pro


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

PostPosted: Tue Jul 06, 2010 6:47 am    Post subject: Reply with quote

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) Smile

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
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