Bonjour,
La boucle suivante :
<BOUCLE_MenuHaut(RUBRIQUES){titre_mot=MenuHaut}{id_rubrique=#ENV{secteurencours}}{!titre_mot=PasDansMenu}{!lang_select}>
me donne sous SPIP 3.0.5 SVN :
Erreur SQL 1054
Unknown column 'rubriques.id_rubrique' in 'on clause'
SELECT rubriques.id_rubrique
FROM spip_rubriques AS `rubriques`
INNER JOIN spip_mots_liens AS L1 ON ( L1.id_objet = rubriques.id_rubrique AND L1.objet='rubrique')
INNER JOIN spip_mots AS L2 ON ( L2.id_mot = L1.id_mot )
WHERE (rubriques.statut = 'publie')
AND (L2.titre = 'MenuHaut')
AND (rubriques.id_rubrique = 0)
AND NOT((rubriques.id_rubrique IN (
SELECT L3.id_objet AS id
FROM spip_mots_liens AS `L3`
INNER JOIN spip_mots AS L4 ON ( L4.id_mot = L3.id_mot )
INNER JOIN spip_mots_liens AS L1 ON ( L1.id_objet = rubriques.id_rubrique )
WHERE (L4.titre = 'PasDansMenu')
AND L1.objet='rubrique'
AND L3.objet='rubrique')))
GROUP BY rubriques.id_rubrique
elle se compilait sous SPIP 2.1.19 en :
SELECT rubriques.id_rubrique, rubriques.id_rubrique
FROM spip_rubriques AS `rubriques`
INNER JOIN spip_mots_rubriques AS L1 ON ( L1.id_rubrique = rubriques.id_rubrique )
INNER JOIN spip_mots AS L2 ON ( L2.id_mot = L1.id_mot )
WHERE (rubriques.statut = 'publie')
AND (L2.titre = 'MenuHaut')
AND (rubriques.id_rubrique = 5)
AND NOT((rubriques.id_rubrique IN (
SELECT L3.id_rubrique
FROM spip_mots_rubriques AS `L3`
INNER JOIN spip_mots AS L4 ON ( L4.id_mot = L3.id_mot )
WHERE (L4.titre = 'PasDansMenu'))))
GROUP BY rubriques.id_rubrique
Si j'enlève {!titre_mot=PasDansMenu} il n'y a plus d'erreur.
Plus curieux, si j'enlève le {!lang_select} il n'y a plus d'erreur non plus.
Et la compilation dans ce cas devient sous SPIP 3 :
SELECT rubriques.id_rubrique, rubriques.lang, rubriques.titre
FROM spip_rubriques AS `rubriques`
INNER JOIN spip_mots_liens AS L1 ON ( L1.id_objet = rubriques.id_rubrique AND L1.objet='rubrique')
INNER JOIN spip_mots AS L2 ON ( L2.id_mot = L1.id_mot )
WHERE (rubriques.statut = 'publie')
AND (L2.titre = 'MenuHaut')
AND (rubriques.id_rubrique = 0)
AND NOT((rubriques.id_rubrique IN (
SELECT L3.id_objet AS id
FROM spip_mots_liens AS `L3`
INNER JOIN spip_mots AS L4 ON ( L4.id_mot = L3.id_mot )
INNER JOIN spip_mots_liens AS L1 ON ( L1.id_objet = rubriques.id_rubrique )
WHERE (L4.titre = 'PasDansMenu')
AND L1.objet='rubrique'
AND L3.objet='rubrique')))
GROUP BY rubriques.id_rubrique
(la seule différence, c'est dans la première ligne :
, rubriques.lang, rubriques.titre
)
Et sous SPIP 2.1.19, ça donne :
SELECT rubriques.id_rubrique, rubriques.id_rubrique, rubriques.lang, rubriques.titre
FROM spip_rubriques AS `rubriques`
INNER JOIN spip_mots_rubriques AS L1 ON ( L1.id_rubrique = rubriques.id_rubrique )
INNER JOIN spip_mots AS L2 ON ( L2.id_mot = L1.id_mot )
WHERE (rubriques.statut = 'publie')
AND (L2.titre = 'MenuHaut')
AND (rubriques.id_rubrique = 5)
AND NOT((rubriques.id_rubrique IN (
SELECT L3.id_rubrique
FROM spip_mots_rubriques AS `L3`
INNER JOIN spip_mots AS L4 ON ( L4.id_mot = L3.id_mot )
WHERE (L4.titre = 'PasDansMenu'))))
GROUP BY rubriques.id_rubrique
J'en conclus que je peux enlever le {!lang_select} sans dommage.
Mais c'est surprenant.