[spip-dev] spip3 titre_mot

Bonjour,

Je teste la migration de spip2.1.14 vers spip 3.

J'ai un problème avec la boucle suivante:

<BOUCLE_art(ARTICLES)
{id_rubrique=242}
{titre_mot=diffusion_professeurs}
{!titre_mot IN mediathèque,affiche}
{par titre}{doublons special}

qui devrait selectionner tout les articles de la rubrique 242 avec le mot
clef diffusion_professeurs mais pas le mot clef mediathèque ou affiche.

en spip3: Unknown column 'articles.id_article' in 'on clause'

en 2.1.14 j'obtiens bien ce qu'attendu et la requete suivante:

Bonjour,

tu as deux fois un critère sur {titre_mot}. A mon avis l’erreur vient de là. Est-ce que ta boucle ne devrait pas être
<BOUCLE_art(ARTICLES)
{id_rubrique=242}
{titre_mot=diffusion_professeurs}
{par titre}{doublons special}>
?

.Gilles

2012/5/22 Alexis <alexis.pellicier@nds.k12.tr>

Gilles Vincent wrote:

Bonjour,

tu as deux fois un critère sur {titre_mot}. A mon avis l'erreur vient de
là. Est-ce que ta boucle ne devrait pas être
<BOUCLE_art(ARTICLES)
{id_rubrique=242}
{titre_mot=diffusion_professeurs}
{par titre}{doublons special}>
?

.Gilles

Cette boucle sélectionne tout les articles de la rubrique 242 avec le mot
clef diffusion_professeurs. Même ceux qui ont aussi le mot clef mediathèque
ou affiche. C'est pour ça que j'avais ajouté {!titre_mot IN
mediathèque,affiche}.

Peut-être n'est-ce plus possible avec spip3?

Si si, ça devrait, mais il y a manifestement un bug dans ce cas là un peu compliqué, conséquence du passage aux tables de liens génériques.
Peux tu ouvrir un ticket sur core.spip.org avec ta boucle qui coince, le résultat SQL en 2.1 et le résultat SQL en 3.0 ?

Cédric

Peut-être n'est-ce plus possible avec spip3?

indépendament du bug (réel) révélé par ta boucle, tu peux aussi
écrire (et ça, ça fonctionne) :

<BOUCLE_art(ARTICLES)
     {id_rubrique = 242}
     {mots.titre = diffusion_professeurs}
     {!mots.titre IN mediathèque,affiche}
     {par titre}
     {doublons special}
>

qui te donnera la (belle) requête sql :

SELECT articles.titre, articles.id_article, articles.lang
FROM spip_articles AS `articles`
INNER JOIN spip_mots_liens AS L1 ON ( L1.id_objet = articles.id_article AND L1.objet='article')
INNER JOIN spip_mots AS L2 ON ( L2.id_mot = L1.id_mot )
WHERE (articles.statut = 'publie')
  AND (articles.id_rubrique = 242)
  AND (L2.titre = 'diffusion_professeurs')
  AND NOT((articles.id_article IN (
SELECT L1.id_objet AS id
FROM spip_mots_liens AS `L1`
INNER JOIN spip_mots AS L2 ON ( L2.id_mot = L1.id_mot )
WHERE ((L2.titre IN ('mediathèque','affiche')))
  AND L1.objet='article')))
GROUP BY articles.id_article
ORDER BY articles.titre

ah dis donc c'est étonnant !
On peut l'ajouter dans le ticket pour aider à comprendre au moment du debug...

Cédric

oui et non...

le lecteur attentif aura remarqué que le forçage du nom de table
mots.truc remet les compteurs à zéro : L1, L2 au lieu de L3, L4
dans la sous-requête

denisb wrote: