Boucles imbriquées en SPIP

  • Auteur de la discussion Auteur de la discussion ortolojf
  • Date de début Date de début
WRInaute accro
Bonjour

Je suis en train de programmer un site pour le Directeur de mon site partenaire.

Le site est en SPIP, et je rencontre un problème à l'exécution d'un squelette comportant deux boucles imbriquées.

La version de SPIP est : 2.1.

Les tables lues sont : courses et rapports, avec une jointure sur le champ id_courses varchar(10).

Ce champ figure bien dans la table rapports, mais le champ correspondant varchar(10) dans la table courses, est id. J'ai donc déclaré une exception des jointures dans le fichier /config/mes_options.php

J'ai également déclaré explicitement la jointure :

mes_options.php
-------------------------
// Alias id_courses du champ id
// pour la jointure sur id_courses.
//
$exceptions_des_jointures['id_courses'] = array('courses', 'id');

// Jointure sur id_courses de rapports vers courses.
//
$tables_jointures['rapports']['id_courses'] = 'courses';

// Jointure sur id_courses de chevaux vers courses
//
$tables_jointures['chevaux']['id_courses'] = 'courses';
-------------------------

Pour la table chevaux, je n'en ai pas encore l'utiisation.


Ces deux tables courses et rapports, sont dans la database lescours, qui n'est pas la database par défaut, mais une database supplémentaire accessible en lecture correctement.

La boucle externe est sur la table courses, la boucle interne sur la table rapports.

Le champ id varchar(10) est de la forme : yymmddrrcc où yy est l'année, mm le mois, dd le jour, rr le numéro de réunion, et cc le numéro de course

Le champ id_courses a la même syntaxe.

La variable id_date est affecté avec yymmd , donc la date paramètre.

<BOUCLE_reunions_1(lescours:courses){id LIKE #GET{id_date}%}{par id}>
<BOUCLE_rapports_1(lescours:rapports){id_courses}>

L'identificateur de Course = #ID_COURSES

</BOUCLE_rapports_1>
</BOUCLE_reunions_1>

Théoriquement, le critère id_courses dans la boucle interne, sélectionne les id_courses égaux à ceux de la boucle externe, à cause de la jointure déclarée, qui est possible grâce à l'exception de la jointure qui est indiquée dans le script mes_options.php

Il est sûr et certain que les tables courses et rapports sont alimentées pour les champs id et id_courses égaux des tables courses et rapports. L'intitulé "L'identificateur de Course = " s'affiche, mais les #ID_COURSES sont blancs.

Que faire ?

Mes déclarations dans le script mes_options.php sont-elles correctes ? Elles devraient puisque les intitulés s'affichent.

Et... Il y a un bug. Même s'il n'y a pas de valeurs égales pour id et id_courses, l'intitulé s'affiche pour toutes les valeurs lues dans la table courses, alors que théoriquement, la boucle interne ne devrait pas être parcourue.

Mais... Dans le cas où il y a des valeurs égales id et id_courses, pourquoi #ID_COURSES ne s'affiche pas ?

Merci baucoup de votre aide.

Amicalement.

Jean-François Ortolo
 
WRInaute accro
Bonsoir

Finalement, le problème venait probablement de la jointure entre les tables rapports et courses.

J'ai mis ceci dans le script /config/mes_options.php :

//--------------------
$exceptions_des_tables['courses']['id_courses'] = 'id';

$exceptions_des_jointures['id_courses'] = array('courses', 'id');

$tables_jointures['rapports']['id_courses'] = 'courses';

$tables_jointures['chevaux']['id_courses'] = 'courses';
//--------------------

C'est fort possible que $exceptions_des_tables et $exceptions_des_jointures fassent double emploi, car j'obtiens un résultat correct quand soit l'une soit l'autre ( ou les deux ) de ces instructions est présente.

Je ne comprend toujours pas pourquoi cela ne fonctionnait pas avant.

Cependant, le squelette met beaucoup de temps à s'exécuter, mais seuls les enregistrements corrects sont lus.

Bien à vous.

Amicalement.

ortolojf ( Tolo pour les intimes ;) )
 
Discussions similaires
Haut