Categories > TinyButStrong general (FR) >

Résultats dans un sous-bloc

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Philty
Date: 2005-05-09
Time: 13:29

Résultats dans un sous-bloc

Salut Skroll29,
j'ai un template de news qui s'affiche par page + barre de navigation et pour chaque bloc 'news' je voudrai y rajouter un champ qui affiche le nombre de commentaires postés par les visiteurs. Mais ça n'a pas l'air de marcher comme j'ai fait, je dois certainement mal m'y prendre... pourrais-tu me conseiller?

news.php:
$QRY_news='SELECT * FROM `my_news` ORDER BY `date` DESC';
$RecCnt = $TBS->MergeBlock('News', $cnx_id,$QRY_news, $PageSize, $PageNum, $RecCnt);

$QRY_comments='SELECT * FROM `my_comments` WHERE `id_news`=%p1%';
$TBS->MergeBlock('Comments', $cnx_id,$QRY_comments);

news.html
<table>
    <tr>
        <td>[News.titre;htmlconv=no;onsection=FormatNews;block=table]</td>
    </tr>
    <tr>
        <td>[News.text;htmlconv=no]</td>
    </tr>
    <tr>
        <td>Auteur: <a href="[News.link;htmlconv=no;magnet=a;mtype=m+m;noerr]" title="E-mail de l'auteur">[News.auteur]</a> - Date: [News.date;frm=dd/mm/yy]</td>
    </tr>
    <tr>
        <td>[Comments.#;block=tr;p1=[News.id]] commentaire(s)</td>
    </tr>
</table>

Merci de ton aide.
By: Skrol29
Date: 2005-05-09
Time: 15:37

Re: Résultats dans un sous-bloc

Salut Philty.

Avec ta requête "SELECT * FROM my_comments WHERE id_news=%p1%" tu vas afficher tous les commentaires pour chaque news. Et aucune ligne quand il n'y a pas de news.

La requête devrait plutôt être :
SELECT COUNT(*) AS nbr FROM my_comments WHERE id_news=%p1%
et ton champ :
[Comments.nbr;block=tr;p1=[News.id]]

Commentaire perso : le délimiteur (`) n'est pas obligatoire pour encadrer les noms de table ou de champ en MySQL. PhpMyAdmin les met par défaut pour assurer les noms de table zarbi, mais ça n'a rien d'un obligation.
By: Philty
Date: 2005-05-10
Time: 12:29

Re: Résultats dans un sous-bloc

Salut Skrol29,
merci ça marche nickel mais j'ai constaté ceci:
si mes news sont affichées par pages (ex: sur 5 pages) et que le visiteur tape news.php?PageNum=6 dans la barre d'adresse de son navigateur cela génère une erreur MySql:
TinyButStrong Error (MergeBlock [Comments]): MySql error message when opening the query: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '%p1%' at line 1
et ceci malgré l'ajout du paramètre 'noerr' dans le champ 'Comments'.
Toutes mes félicitations pour la RMLL 2005. TBS serait-il en passe de devenir LE template engine le plus simple et performant? Pour moi y'a pas photo!
By: Skrol29
Date: 2005-05-12
Time: 02:43

Re: Résultats dans un sous-bloc

Ok, je vais examiner ça.
By: Skrol29
Date: 2005-05-30
Time: 17:47

Re: Résultats dans un sous-bloc

Ok, j'ai trouvé le problème (merci pour ton envoi de script).

Quand ton bloc principal n'a aucun enregsitrement, alors la définition des sous-blocs est supprimée du modèle (normal car elle était englobée dans le bloc principal). Du coup, quand tu fais :
$TBS->MergeBlock('sous_bloc', $mysql,'SELECT * FROM matable WHERE id=%p1%');
Et ben TBS ne trouve pas la définition du bloc et donc ne sais pas que c'est une requête dynamique.

Pour se tirer d'affaire, tu peux déjà faire :
$nbr = $TBS->MergeBlock('bloc_princ',...);
if ($nbr>0) $nbr = $TBS->MergeBlock('sous_bloc',...);

Je ne sais pas encore si on peut considérer ça comme un bug.
On pourrait demander à TBS de ne pas lancer la requête si aucun champ  à fusionner n'est trouvé. Mais ça comporte aussi des inconvéniants.

En tout cas, je vais ajouter ça dans la FAQ.