article dans une certaine langue et dont l'article de reference a ete lie a un certain mot-cle ?

Bonjour,

Je suis en train de me casser la tête sur un problème de boucle SPIP depuis quelques jours, et je me décide donc finalement a venir quémander de l’aide :slight_smile:

Je cherche a créer une boucle me permettant de récupérer les 5 derniers articles dans une langue X dont l’article de référence a été lié au mot-clé Y

Ce qui correspondrait en SQL a, si prend X = ‘en’ et id du mot-cle Y = 71 :

select art.id_article

from spip_articles art

where art.lang = ‹ en › and

id_article in (SELECT distinct s_a.id_trad FROM spip_articles s_a, spip_mots_articles s_m_a where s_a.id_trad = s_m_a.id_article and id_mot = 71 )

order by art.date_modif

limit 5

Lorsque j’essaie d’écrire ceci sous forme de boucle, j‘utilise 2 boucle imbriquées – et je n’arrive pas a gérer correctement la limite de 5 articles. Quelqu’un aurait-il/elle déjà rencontré un cas similaire, et pourrait-il/elle me donner un coup de pouce ? J’imagine que la solution doit être évidente, mais j’ai tellement le nez dans le guidon que je ne la vois pas pour l’instant…

Merci d’avance !

Alex Gomes

Grand merci a Marcimat de m’avoir pousse dans la bonne direction !

Histoire d’en faire profiter tout le monde, la solution pour SPIP 2.0x ( a base de la balise #DOUBLONS de la 2.1 ) :

Ajouter le code suivant a mes_fonctions.php

// #DOUBLONS{mots} ou #DOUBLONS{mots,famille}

// donne l’etat des doublons (MOTS) a cet endroit

// sous forme de tableau d’id_mot array(1,2,3,…)

// #DOUBLONS tout seul donne la liste brute de tous les doublons

// #DOUBLONS*{mots} donne la chaine brute « ,1,2,3,… »

// (changera si la gestion des doublons evolue)

//

// http://doc.spip.org/@balise_DOUBLONS_dist

function balise_DOUBLONS_dist($p) {

if ($type = interprete_argument_balise(1,$p)) {

if ($famille = interprete_argument_balise(2,$p))

$type .= ‹ . › . $famille;

$p->code = ‹ $doublons[ ›.$type.’]’;

if (!$p->etoile)

$p->code = ‹ array_filter(array_map(« intval »,explode(",", ›

. $p->code . ‹ ))) ›;

}

else

$p->code = ‹ $doublons ›;

$p->interdire_scripts = false;

return $p;

}

Utiliser le code suivant dans ses squelettes ( si id_mot = 71, par exemple):

<BOUCLE_art(ARTICLES){origine_traduction}{mots.id_mot= 71}{doublons orig} />

<BOUCLE_trad(ARTICLES){id_trad IN #DOUBLONS{articles, orig}}{lang}{pagination 5}{par date}{inverse}>#TITRE</BOUCLE_trad>

Et le tour est joue !

Alex Gomes

From: Gomes, Alex [mailto:Alex.Gomes@ituc-csi.org]
Sent: Monday, November 30, 2009 10:55 AM
To: spip@rezo.net
Subject: [Spip] article dans une certaine langue et dont l’article dereference a ete lie a un certain mot-cle ?

Bonjour,

Je suis en train de me casser la tête sur un problème de boucle SPIP depuis quelques jours, et je me décide donc finalement a venir quémander de l’aide :slight_smile:

Je cherche a créer une boucle me permettant de récupérer les 5 derniers articles dans une langue X dont l’article de référence a été lié au mot-clé Y

Ce qui correspondrait en SQL a, si prend X = ‘en’ et id du mot-cle Y = 71 :

select art.id_article

from spip_articles art

where art.lang = ‹ en › and

id_article in (SELECT distinct s_a.id_trad FROM spip_articles s_a, spip_mots_articles s_m_a where s_a.id_trad = s_m_a.id_article and id_mot = 71 )

order by art.date_modif

limit 5

Lorsque j’essaie d’écrire ceci sous forme de boucle, j‘utilise 2 boucle imbriquées – et je n’arrive pas a gérer correctement la limite de 5 articles. Quelqu’un aurait-il/elle déjà rencontré un cas similaire, et pourrait-il/elle me donner un coup de pouce ? J’imagine que la solution doit être évidente, mais j’ai tellement le nez dans le guidon que je ne la vois pas pour l’instant…

Merci d’avance !

Alex Gomes

Petite auto-correction:

La solution que j’ai poste auparavant n’affichera pas correctement les articles qui ont le mot-cle mais n’existent que dans une seule langue ( et dont l’id_article ne se retrouvera donc jamais en tant qu’id_trad d’un autre article).

Ma solution rapide – qui pourrait sans doute etre plus legere / elegante :

<BOUCLE_art(ARTICLES){origine_traduction}{mots.id_mot = 71}{doublons orig} />

<BOUCLE_trad(ARTICLES){id_trad IN #DOUBLONS{articles, orig}}{lang}{doublons final} />

<BOUCLE_nontrad(ARTICLES){!doublons orig}{lang}{doublons final} />

<BOUCLE_finale(ARTICLES){!doublons final}{pagination 5}{par date}{inverse} >#TITRE</BOUCLE_finale>

BOUCLE_art selectionne les articles dont l’article d’origine est lie au mot d’id_mot = 71 ( ou les articles lies au mot d’id_mot = 71, s’ils n’existent qu’en une seule langue et donc dont l’id_trad = 0). Enregistre les resultats dans la liste de doublons orig

BOUCLE_trad selectionne les articles dans la langue d’environnement dont l’article d’origine est contenu dans liste de doublons orig. Enregistre les resultats dans la liste de doublons final

BOUCLE_nontrad selectionne les articles dans la langue d’environnement dont l’id_article est dans la liste de doublons origin ( et donc sont lies a l’id_mot 71). Ajoute les resultats a la liste doublons_final

BOUCLE_finale selectionne les articles dont l’ID est dans la liste de doublons final, en les classant par date inverse.

Si qq’un trouve une manière moins tarabiscotee, je suis preneur :slight_smile:

Alex Gomes

From: Gomes, Alex [mailto:Alex.Gomes@ituc-csi.org]
Sent: Tuesday, December 01, 2009 12:53 PM
To: spip@rezo.net
Subject: Re: [Spip] [resolu] article dans une certaine langue et dontl’article de reference a ete lie a un certain mot-cle ?

Grand merci a Marcimat de m’avoir pousse dans la bonne direction !

Histoire d’en faire profiter tout le monde, la solution pour SPIP 2.0x ( a base de la balise #DOUBLONS de la 2.1 ) :

Ajouter le code suivant a mes_fonctions.php

// #DOUBLONS{mots} ou #DOUBLONS{mots,famille}

// donne l’etat des doublons (MOTS) a cet endroit

// sous forme de tableau d’id_mot array(1,2,3,…)

// #DOUBLONS tout seul donne la liste brute de tous les doublons

// #DOUBLONS*{mots} donne la chaine brute « ,1,2,3,… »

// (changera si la gestion des doublons evolue)

//

// http://doc.spip.org/@balise_DOUBLONS_dist

function balise_DOUBLONS_dist($p) {

if ($type = interprete_argument_balise(1,$p)) {

if ($famille = interprete_argument_balise(2,$p))

$type .= ‹ . › . $famille;

$p->code = ‹ $doublons[ ›.$type.’]’;

if (!$p->etoile)

$p->code = ‹ array_filter(array_map(« intval »,explode(",", ›

. $p->code . ‹ ))) ›;

}

else

$p->code = ‹ $doublons ›;

$p->interdire_scripts = false;

return $p;

}

Utiliser le code suivant dans ses squelettes ( si id_mot = 71, par exemple):

<BOUCLE_art(ARTICLES){origine_traduction}{mots.id_mot= 71}{doublons orig} />

<BOUCLE_trad(ARTICLES){id_trad IN #DOUBLONS{articles, orig}}{lang}{pagination 5}{par date}{inverse}>#TITRE</BOUCLE_trad>

Et le tour est joue !

Alex Gomes

From: Gomes, Alex [mailto:Alex.Gomes@ituc-csi.org]
Sent: Monday, November 30, 2009 10:55 AM
To: spip@rezo.net
Subject: [Spip] article dans une certaine langue et dont l’article dereference a ete lie a un certain mot-cle ?

Bonjour,

Je suis en train de me casser la tête sur un problème de boucle SPIP depuis quelques jours, et je me décide donc finalement a venir quémander de l’aide :slight_smile:

Je cherche a créer une boucle me permettant de récupérer les 5 derniers articles dans une langue X dont l’article de référence a été lié au mot-clé Y

Ce qui correspondrait en SQL a, si prend X = ‘en’ et id du mot-cle Y = 71 :

select art.id_article

from spip_articles art

where art.lang = ‹ en › and

id_article in (SELECT distinct s_a.id_trad FROM spip_articles s_a, spip_mots_articles s_m_a where s_a.id_trad = s_m_a.id_article and id_mot = 71 )

order by art.date_modif

limit 5

Lorsque j’essaie d’écrire ceci sous forme de boucle, j‘utilise 2 boucle imbriquées – et je n’arrive pas a gérer correctement la limite de 5 articles. Quelqu’un aurait-il/elle déjà rencontré un cas similaire, et pourrait-il/elle me donner un coup de pouce ? J’imagine que la solution doit être évidente, mais j’ai tellement le nez dans le guidon que je ne la vois pas pour l’instant…

Merci d’avance !

Alex Gomes