Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] [résolu] création de plugins jTpl

Posted by picolo on 09/16/2011 17:40

Bonjour, Je récupère une liste d'enregistrements de ma base de donnée dans mon template, et je veux, comparer la valeur d'un des champs de mon enregistrement à des valeurs qui sont prise par une variable dans une boucle foreach, et en fonction de la comparaison, afficher les valeurs issues de mon enregistrement ou pas. Je veux savoir, si je dois pour cela créer une fonction dans les plugins pour faire la comparaison, et comment l'utiliser dans mon template, ou si il existe un autre moyen de procéder. j'ai créé une fonction, mais je ne sais pas si je m'y suis bien pris, et je ne sais pas comment l'utiliser dans une boucle {if}{/if} au niveau de mon template.

<?php
function jtpl_cfunction_html_heurecompare($compiler, $params=array())
{
<code>
    if (count($params) != 2) {
        $compiler->doError2('errors.tplplugin.cfunction.bad.argument.number','heurecompare','2');
    }
	$comp = 'false;';
	$htab = explode(" ",$params[0]);
	$dtab = explode(" ",$params[1]);
	if ( strncmp($htab[0],$dtab[1],5) == 0)
	{
		$comp = 'true';
	}
    return $comp;

} ?>

</code>

au niveau de mon template, j'ai "tenté"


{foreach $heures as $plage_h}
<tr>
<th scope="row">{$plage_h}</th>
<code>
 {for $i=1; $i<=$discipline->nb_courts; $i++}
	{foreach $resas as $res}							
		{if $res->court == $i && {heurecompare $plage_h, $res->debut}==true} } 
			<td>{$res->debut}</td>
			{assign $i++}						
		{/if}
	{/foreach}
	<td>libre</td>
  {/for}
</tr>

{/foreach}

</code>

Quelqu'un peut il allumer la lumière, je suis dans le noir!!! merci

  [Opened] création de plugins jTpl

Reply #1 Posted by laurentj on 09/16/2011 18:18

bonjour,

Non, tu ne peux pas encastrer des instructions jtpl comme ça.

Une solution serait que tu fasses un plugin, mais de type block / if. Regarde par exemple comment est fait le plugin ifconnected.

À part ça, à mon avis, il faut que tu t'y prenne complétement autrement. Là je vois un gros problème dans ton code : c'est d'une part totalement pas optimisé, et d'autre part, c'est le genre de chose à faire dans une classe métier. La liste qui est injectée dans ton template devrait être ce qu'il faut afficher. Tu ne devrais pas mettre du code métier dans un template.

Et je disais aussi que ce n'était pas optimisé, d'une part parce que tu as trois boucles imbriquées alors que tu pourrais n'en avoir qu'une, et d'autre part parce qu'au final, tu as extrait des enregistrements de la table qui ne seront probablement pas affichés, donc, ça sera du gaspillage de mémoire, de processeurs, voire de bande passante.

Donc :

  1. créer une classe métier qui te renverra la liste finale, ordonnée comme il faut
  2. dans ta requete SQL (ou la méthode DAO), fait un order by debut,court, ainsi, tu n'auras qu'un foreach sur la liste à faire, et ça sera déjà ordonné en fonction des heures et des disciplines. Tu auras alors à faire juste un if pour détecter le changement de court et/ou d'heure si besoin, pour générer un nouveau tr ou autre.
  3. ajoute des conditions dans ta requêtes, qui sélectionnent uniquement les enregistrements que tu veux afficher. Tu as plein de fonction en SQL pour manipuler les heures et les dates. Cela t'évitera alors de faire une boucle pour éliminer ceux que tu ne veux pas afficher.

  [Opened] création de plugins jTpl

Reply #2 Posted by picolo on 09/16/2011 19:00

Bonjour, merci pour cette réponse rapide, 1. J'ai effectivement fait les tris sur mon enregistrement avant de passer la liste à mon template. 2. Tous les enregistrement qui font partie de la liste doivent être affichés dans un tableau, en fonction du de l'heure de début, et du court qu'ils ont. 3. Je ne vois pas comment faire en sorte de n'avoir qu'une boucle. 4. Je vais me pencher sur le cas du plugin de type block /if.

Merci, je te tiens au courant de mes avancés.

  [Opened] création de plugins jTpl

Reply #3 Posted by picolo on 09/17/2011 01:20

Comme promis, je te tiens au courant de mes avancés, c'est ma façon de penser mon application qui n'était pas bonne
1. J'ai nettoyé mon code, fait passer toutes mes modifications au niveau de ma classe métier
2. Je n'ai eu recours qu'à une boucle pour l'affichage de mon tableau à 2 dimensions que j'ai généré au niveau de ma classe métier
3. Je n'ai finalement pas eu besoin d'utiliser de plugin de template.

Merci de ton aide.

  [Opened] [résolu] création de plugins jTpl

Reply #4 Posted by laurentj on 09/18/2011 21:16

ok et pas de quoi :-)

 
Page
  1. [résolu] création de plugins jTpl