- 1
[Opened] Utilisation jdao dans un template?
Posted by mr_keyser on 02/01/2009 01:09
Bonjour (bonsoir même),
J'aimerai savoir si il est possible d'utiliser jdao dans un template?
L'idée, c'est que j'affiche des news dans un template, et j'aimerai mettre le nombre de commentaire pour chaque news.
Dans mon template, j'ai: @@
{foreach $lastnews as $news} <div class="news"> <div class="subject">{$news->subject}<span class="author">{$news->author}</span></div> <div class="content">{$news->content}</div> <div class="footer">{image 'images/date.gif'} {$news->created_date|jdatetime:'db_datetime', 'lang_date'} {image 'images/author.gif'} {$news->author}</div> </div> {/foreach}
@@
et j'aimerai rajouter le nombre de commentaire à coté du nom de l'auteur.
Quel est le mieux?
Une jointure dans la requête sql? Je suis nul en jointure sql :(
Sinon je pensai faire une méthode dans une dao 'comment.dao.xml', avec un paramètre l'id de la news. Mais je sais pas comment appeler une méthode dao dans le template??
Merci
mathieu
[Opened] Re: Utilisation jdao dans un template?
Posted by laurentj on 02/01/2009 14:02
Une jointure dans la requête sql? Je suis nul en jointure sql
probablement oui, ça serait plus efficace. Mais il faudra utiliser directement jDb, et pas jDao.
Sinon je pensai faire une méthode dans une dao 'comment.dao.xml', avec un paramètre l'id de la news.Mais je sais pas comment appeler une méthode dao dans le template??
On n'appelle jamais du code metier dans un template. C'est le controleur qui doit récupèrer les données, et les passer au template. Nuance. Donc appeler jDao dans ton template, tu oublie, c'est une mauvaise pratique.
À toi donc de préparer correctement les données à afficher dans ton contrôleur ou dans une classe métier (ce qui est encore mieux)
[Opened] Re: Utilisation jdao dans un template?
Posted by mr_keyser on 02/01/2009 19:55
Yes, c'est vrai que le code métier dans le template, c'était pas malin...
Finalement j'ai fait comme tu m'a dit :
$cnx = jDb::getConnection(); $sql = "SELECT n.id, n.subject, n.content, n.author, n.created_date, COUNT(c.id) AS 'nbComment' FROM `lagny_news` AS n "; $sql .= "LEFT JOIN `lagny_comment` AS c ON n.id = c.id_news "; $sql .= "GROUP BY n.id "; $sql .= "ORDER BY n.created_date DESC"; $records = $cnx->limitQuery($sql, 0,10); $this->_tpl->assign('lastnews', $records);
Et
<h2>Les dernières news</h2> <div class="lastNews"> {foreach $lastnews as $news} <div class="news"> <div class="subject">{$news->subject}<span class="author">{$news->author}</span></div> <div class="content">{$news->content}</div> <div class="footer">{image 'images/comment.gif'} {$news->nbComment} commentaire{if $news->nbComment > 1}s{/if} {image 'images/date.gif'} {$news->created_date|jdatetime:'db_datetime', 'lang_date'} {image 'images/author.gif'} {$news->author}</div> </div> {/foreach} </div>
Très bien comme ça.
Merci
Mathieu
[Opened] Re: Utilisation jdao dans un template?
Posted by laurentj on 02/01/2009 23:11
Oui, c'est très bien comme ça.
Juste une chose, je ne sais pas si dans subject et content il y a du HTML ou pas, mais au cas où il n'y a pas de html, il faudrait echapper les caractères spéciaux afin d'avoir du code html valide
{$news->subject|eschtml}
Ensuite, pourquoi ne pas mettre le sujet dans un titre (<h3> par ex), plutot que d'avoir un div+class...
[Opened] Re: Utilisation jdao dans un template?
Posted by mr_keyser on 02/02/2009 10:47
Ah oui, le eschtml, j'avais oublié ça.
Concernant le div+class, j'ai une feuille de style derrière, pour mettre en forme tout ça.
Merci de tes conseils.
Mathieu
[Opened] Re: Utilisation jdao dans un template?
Posted by laurentj on 02/02/2009 11:56
Concernant le div+class, j'ai une feuille de style derrière, pour mettre en forme tout ça.
c'est pas une histoire de style, mais de semantique, d'usage des bonnes balises au bon endroit. Et c'est aussi une histoire de style parce que du coup les selecteurs sont plus court, le code html un poil plus leger etc...
[Opened] Re: Utilisation jdao dans un template?
Posted by mr_keyser on 02/02/2009 14:51
La sémantique, mmmm?!
Je viens de lire un peu de doc sur le sujet, je reprend tous mes templates :)
Merci
- 1