Categories > TinyButStrong general (FR) >

Problème de sous blocs dynamiques

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Guitou
Date: 2006-02-08
Time: 11:01

Problème de sous blocs dynamiques

Bonjour voilà mon petit souci

Je cherche à afficher des news regroupées par thème (1 theme = plusieurs news) dans un menu construit en html

ex :
<dt onclick="javascript:montre('smenu3');" >Services</dt>
<dd id="smenu3">
<ul>
<li><a href="#">Sous-Menu 3.1</a></li>
<li><a href="#">Sous-Menu 3.1</a></li>
<li><a href="#">Sous-Menu 3.1</a></li>
</ul>
</dd>

Je pensais faire quelquechose dans ce style :

[themes;block=begin]
<dt onclick="javascript:montre('smenu[themes.theme_ind]');">[themes.nom]</dt>
           
<dd id="smenu[themes.theme_ind]">
<ul>
[news[themes.theme_ind];block=begin]
<li><a href="#">[news[themes.theme_ind].nom;noerr]</a></li>
[news[themes.theme_ind];block=end]
               
</ul>
</dd>
[themes;block=end]

En gros il faudrait générer des blocs news dynamiques afin que je puisse insérer les news dans le bloc approprié.

Suivant l'ordre dans lequel je merge les blocs je n'obtient pas du tout le bon résultat (sous toutes les sections themes avec du vide en dessous, soit le 1er thème et toutes ses news en dessous mais plus rien ensuite...)

Toute suggestion est la bienvenue.

Merci d'avance
By: Skrol29
Date: 2006-02-08
Time: 11:59

Re: Problème de sous blocs dynamiques

Il te faut probablement utiliser les sous-blocs, avec requête dynamique.
Ca l'air d'être pile poil ce dont tu as besoin.
Il y a un exemple en ligne sur les sous-bloc.

Voici comment tu pourrais coder ton HTML pour utilisation de sous blocs :
 
<dt onclick="javascript:montre('smenu[themes.theme_ind]');">[themes.nom;block=dt;extend=dd]</dt>
<dd id="smenu[themes.theme_ind]">
  <ul>
    <li><a href="#">[news.nom;block=li;p1=[themes.theme_ind];noerr]</a></li>
  </ul>
</dd>

le PHP qui va avec:
$TBS->MergeBlock('themes',$cnx,'SELECT theme_ind FROM t_themes');
$TBS->MergeBlock('news',$cnx,'SELECT nom FROM t_news WHERE theme_ind=%p1%');

By: Guitou
Date: 2006-02-08
Time: 14:59

Re: Problème de sous blocs dynamiques

Merci pour cette réponse rapide, j'avais déja vu en gros dans l'exemple à quoi celà ressemblait.

Cependant dans un souci de développement le plus 'propre' et structuré possible tout le code de mon site est découpé en classes et toutes les requêtes sont effectuées dans la classe de base de données (le jour ou je change de BDD je n'ait pas à farfouiller tout mon code pour trouver quoi modifier par exemple)

En bidouillant j'ai réussi à m'en sortir mais par curiosité j'aurai quand même voulu savoir si il ya une possibilité autre que le MergeBlock avec requête intégrée.

Dans tous les cas féliciations pour ce superbe boulot ca change la façon de coder et la facilite littéralement

++
By: Skrol29
Date: 2006-02-08
Time: 16:54

Re: Problème de sous blocs dynamiques

> j'aurai quand même voulu savoir si il ya une possibilité autre
> que le MergeBlock avec requête intégrée.

Comment retrouves-tu les données du bloc 'news' ?
Il sont sotokés dans un tableau PHP après exécution d'une requête ?
By: Guitou
Date: 2006-02-08
Time: 17:02

Re: Problème de sous blocs dynamiques

Pour répondre à ta question tous mes blocs sont sotckés dans des tableaux du type [0]=>array(['nom']='toto') [1]=> etc

J'ai fait une bidouille, au lieu d'avoir un template unique (theme + news incluses) j'ai fait un templater juste sur les news et je boucle ensuite en php à chaque thème de mon tableau.

C'est pas super propre mais ça fonctionne

echo '<dl id="menu">';
// Construction des news
for($i=0;$i<count($themes);$i++)
{
    $this->TBS->LoadTemplate(path().'/include/templates/news/n_menuT.php');
    $th = $themes[$i];
    $tmp = $n->recup_by_theme($themes[$i]['nom'],5);

    if($tmp != '')
    {
        $this->TBS->MergeBlock('news',$tmp);
        $this->TBS->Show(TBS_OUTPUT);
    }   
}
// Fin du menu
echo '</dl>';
By: Skrol29
Date: 2006-02-09
Time: 02:11

Re: Problème de sous blocs dynamiques

TBS te permet d'utiliser les requêtes dynamiques avec des tableaux PHP (trop fort).

Voici le code qui conviendrait pour la liste des thèmes enregistrés dans un tableau PHP, le HTML reste le même que dans mon exemple :
$liste_themes = ... // liste des thèmes
$liste_news = ... // liste des news, par thème
$TBS->MergeBlock('themes',$liste_themes);
$TBS->MergeBlock('news','array','liste_news[%p1%]');

By: Guitou
Date: 2006-02-09
Time: 09:08

Re: Problème de sous blocs dynamiques

Merci pour cette soluce.

A 2h11 du mat en plus, chapeau