{!id_mot} sous SPIP 3.0.10 ne fonctionne pas #3026

Closed
opened 10 years ago by maieul · 3 comments
maieul commented 10 years ago
Collaborator

Soit le système de boucle suivant :
<BOUCLE_m(MOTS){id_mot}> <BOUCLE_a(ARTICLES){!id_mot}> #TITRE </BOUCLE_a> </BOUCLE_m>

Sous SPIP2.1 cela m'affichait bien les articles qui n'avaient pas le mot passé en contexte :

SELECT articles.titre, articles.lang FROM spip_articles ASarticles INNER JOIN spip_mots_articles AS L1 ON ( L1.id_article = articles.id_article ) WHERE (articles.statut = 'publie') AND (articles.date < '2138-01-01 00:00:00') AND NOT((L1.id_mot = 6))
Sous SPIP 3.0.10 [20705, en tag], cela ne fonctionne pas :

SELECT articles.titre, articles.lang FROM spip_articles ASarticles INNER JOIN spip_mots_liens AS L1 ON ( L1.id_objet = articles.id_article AND L1.objet='article') WHERE (articles.statut = 'publie') AND NOT((L1.id_mot = 1)) GROUP BY articles.id_article
En revanche le code suivant

<BOUCLE_m(MOTS){id_mot}> <BOUCLE_a(ARTICLES){!id_mot=#ID_MOT}> #TITRE </BOUCLE_a> </BOUCLE_m>

fonctionne :

SELECT articles.titre, articles.lang FROM spip_articles ASarticlesWHERE (articles.statut = 'publie') AND NOT((articles.id_article IN ( SELECT L1.id_objet AS id FROM spip_mots_liens ASL1 WHERE (L1.id_mot = 1) AND L1.objet='article'))) GROUP BY articles.id_article

Soit le système de boucle suivant : ` <BOUCLE_m(MOTS){id_mot}> <BOUCLE_a(ARTICLES){!id_mot}> #TITRE </BOUCLE_a> </BOUCLE_m> ` Sous SPIP2.1 cela m'affichait bien les articles qui n'avaient pas le mot passé en contexte : ` SELECT articles.titre, articles.lang FROM spip_articles AS `articles` INNER JOIN spip_mots_articles AS L1 ON ( L1.id_article = articles.id_article ) WHERE (articles.statut = 'publie') AND (articles.date < '2138-01-01 00:00:00') AND NOT((L1.id_mot = 6)) ` Sous SPIP 3.0.10 [20705, en tag], cela ne fonctionne pas : ` SELECT articles.titre, 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') WHERE (articles.statut = 'publie') AND NOT((L1.id_mot = 1)) GROUP BY articles.id_article ` En revanche le code suivant ` <BOUCLE_m(MOTS){id_mot}> <BOUCLE_a(ARTICLES){!id_mot=#ID_MOT}> #TITRE </BOUCLE_a> </BOUCLE_m> ` fonctionne : ` SELECT articles.titre, articles.lang FROM spip_articles AS `articles` WHERE (articles.statut = 'publie') AND NOT((articles.id_article IN ( SELECT L1.id_objet AS id FROM spip_mots_liens AS `L1` WHERE (L1.id_mot = 1) AND L1.objet='article'))) GROUP BY articles.id_article `
Owner

Assigné à cedric
Version cible mise à 3.1

**Assigné à cedric** **Version cible mise à 3.1**
Owner

En fait ça ne "fonctionnait" pas nous plus en 2.1. Certs ça ramenait des résultat, mais pas "les articles qui n'ont pas le mot clé 1" : ça ramenait les articles qui ont un autre mot clé qu le mot clé 1, qu'ils aient par ailleurs ou non le mot clé 1.
De ce point de vue la boucle fait la même chose en SPIP 3.
En revanche, la syntax excplicite {!id_mot=#ID_MOT} signifie "pas les articles qui ont le mot clé 1" et correspond à ce que tu veux.
Statut changé à Fermé

En fait ça ne "fonctionnait" pas nous plus en 2.1. Certs ça ramenait des résultat, mais pas "les articles qui n'ont pas le mot clé 1" : ça ramenait les articles qui ont un autre mot clé qu le mot clé 1, qu'ils aient par ailleurs ou non le mot clé 1. De ce point de vue la boucle fait la même chose en SPIP 3. En revanche, la syntax excplicite `{!id_mot=#ID_MOT}` signifie "pas les articles qui ont le mot clé 1" et correspond à ce que tu veux. **Statut changé à Fermé**
Poster
Collaborator

effectivement. Je me demande du reste si cette syntaxe a jamais été pensée.

effectivement. Je me demande du reste si cette syntaxe a jamais été pensée.
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.