Bonjour,
Je tente de spipifier (1.9.2 stable) des tables affichées jusqu'à présent par le biais de .php mal fichus en déménageant les tables dans la base de spip, et en les consultant par le biais de modèles et boucles spip. Pour l'instant, je bute sur mon premier T.P....
Soit une table de test (mal fichue elle aussi, mais ce sont les utilisateurs qui demandent ce genre de plan) dont les champs intéressants sont "matiere, niveau, ssmatiere, titre, id_test"
La boucle (de débutant, ce que je resterai encore longtemps) :
<B_titres>
<BOUCLE_titres(c_test) {par matiere, niveau, ssmatiere, titre} >
[[[[<h1>(#MATIERE|unique{#MATIERE})</h1>]
<h2>(#NIVEAU|unique{#MATIERE#SSMATIERE})</h2>]
<h3>(#SSMATIERE|unique{#MATIERE#NIVEAU#SSMATIERE})</h3>]
(#TITRE|unique{#ID_TEST})
]
</BOUCLE_titres>
</B_titres>
affiche ce que j'attends... mais:
- je ne vois pas comment faire une mise en page en liste sans m'emmêler dans les ouvertures/fermetures
- les utilisateurs veulent une présentation en tableau (atrocité, surtout pour ce qui est finalement une bibliographie, mais je n'y peux rien). Il faut alors compter le nombre de réponses par réponse différente pour avoir de jolis rowspan...
Alors j'ai essayé d'imbriquer pour pouvoir mettre des #COMPTEUR/TOTAL_BOUCLE ici ou là:
<B_matieres>
<BOUCLE_matieres(c_test) {par matiere, niveau, ssmatiere}>
[<h3>(#MATIERE|unique{#MATIERE})</h3>]
<BOUCLE_niveaux(c_test) {matiere} par {niveau}>
[<h4>(#NIVEAU|unique{#MATIERE#NIVEAU})</h4>]
<BOUCLE_ssmatieres(c_test) {matiere} {niveau} {par ssmatiere} >
[<h5>(#SSMATIERE|unique{#MATIERE#NIVEAU#SSMATIERE})</h5>]
<B_titres>
<ul>
<BOUCLE_titres(c_test) {matiere IN #MATIERE} {niveau IN #NIVEAU}
{ssmatiere IN #SSMATIERE} {par titre} >
[<li>(#TITRE|unique{#ID_TEST})</li>]
</BOUCLE_titres>
</ul>
</B_titres>
</BOUCLE_ssmatieres>
</BOUCLE_niveaux>
</BOUCLE_matieres>
</B_matieres>
<//B_matieres>
Oui, ça marche, mais *très* mal... j'aurais dû suivre mes cours de sixième sur la théorie des ensembles, vu que, même si cela affiche ce à quoi je m'attends, j'ai droit à tous les doublons possibles (chaque étage est itéré autant de fois qu'il y a de réponses en dessous, si j'ai bien compris... pas affichés, certes, mais avec un temps de réponse catastrophique en local sur une table test de dix enregistrements, et une avalanche de <ul></ul>, et aucune information, par exemple sur le nombre d'enregistrements ayant le même champ "matiere". Le peu que j'y comprenne après des heures de bataille, c'est que je ne vois pas comment faire l'équivalent d'un SELECT DISTINCT en spip, que je suis toujours aussi nul avec les jointures, et que je ne sais pas arrêter une boucle.
J'ai aussi essayé avec plusieurs tables, sachant que dans le cas réel, les valeurs de "matiere" et de "ssmatiere" sont stockées dans des tables différentes où les valeurs sont uniques, mais sans résultat probant.
Ce que je cherche à faire est-il réalisable sans php ?
--
Cordialement
Frédéric Moinard