Autrement dit, rendre cela possible :
<BOUCLE_essai(ARTICLES){id_mot=11}{id_mot=14}>
#TITRE ;
</BOUCLE_ essai >
Essai de solution :
Dans cette solution il s’agit de trouver les articles qui ont en commun des mots clés, sachant que ces mots clés se trouvent dans des groupes de mots clés différents. (Je sens déjà que certains grincent des dents mais cela correspond à l’utilisation que je souhaite en faire).
En clair, je veux récupérer la liste des articles qui ont les mêmes mots clés dans n groupe de mot clé mais il faut pour cela qu’il y est au moins un mot clé choisi pour chaque groupe de mot clés.
Dans la page en question il s’agit de recevoir les mot clés par url ou post.
Le premier mot clé sera rangé dans un id_mot (autant utiliser SPIP et ses boucles efficaces).
Les suivants seront sous la forme id_mot2 , id_mot3 ...
Le nombre ne semble pas être limité.
Pour ma part j’en fais 4.
Le script est le suivant (voir les remarques à l’interieur du script pour des explications) :
<?php
<?$mots_cle1=array();
// trouve tous les articles ayant id_mot mais ausii dans id_mot1 selectionné et mettre dans tableau $mots_cle1
// le id_mot1 fait parti du grp de mot clé 9 pour l exemple
<BOUCLE_art1(ARTICLES){id_mot}>
$mots_cle1[#ID_ARTICLE] = array(<BOUCLE_mots1(MOTS){id_article}{id_groupe=9}{", "}>'[(#ID_MOT|texte_script)]'</BOUCLE_mots1>);
</BOUCLE_art1>
// range dans un tableau
$list_art_cle1 = array();$j=0;
// dans le tableau mots_cle1 contenant les articles avec id_mot ET tous les mots clés du grp 9
// cherche l'article avec en particulier le mot clé id_mot1
foreach ($mots_cle1 as $cle => $element)
{
$key = (array_search($id_mot1 , $element));
if ($key === false)
{
// permet une verif
//echo "il n'y pas d'id dans cette ligne = ".$key."<br>";
}
else
{
//permet une verif
//echo "id à la ligne = ".$key."<br>";
if (array_key_exists('0', $element))
{
$list_art_cle1["$j"] = $cle;$j++;
}
}
}
// pour une vérif
//echo '<pre> annee<br>';
//print_r($list_art_cle1);
//echo '</pre>';
?>
On peut donc faire autant de fois que nécessaire ce script en changeant id_mot1 par id_mot2 ainsi que tous les indices 1 en 2 puis 1 en 3 autant de fois qu’il y a de ET.
On récupère ainsi les tableaux et on trouve ce qu’ils ont en commun : les articles tant cherchés.
<?php
// la fonction suivante permet de recuperer les articles communs aux tableaux precedement créés
// exemple sur 3 tableaux
$intersec = array_intersect ($list_art_cle1 , $list_art_cle3 , $list_art_cle3);
// affichage des articles concernés par le ET sur les mots clés
foreach ($intersec as $element)
{
$SQL ="SELECT * FROM spip_articles WHERE id_article='" . $element . "' ";
$res = mysql_query($SQL);
while($valeur=mysql_fetch_array($res))
{
?>
<a href="article.php3?id_article=<? echo $valeur['id_article']; ?>"><? echo $valeur["titre"]; ?></a> <BR>
<?php
}
}
?>
En esperant que cette contribution serve à certains.
Merci à l’équipe de SPIP.
Philippe Avi
Discussions par date d’activité
Une discussion
Merci, cet ébauche de script m’a été trés utile !
Une autre solution beaucoup plus simple est la suivante (sauf erreur de ma part...) : Par exemple pour une intersection sur 3 mots clefs on écrit simplement :
Explication : on récupère tous les articles qui nous intéresse ayant le mot clef mot1, puis la deuxième boucle est une boucle qui ne prend qu’un élement, un des articles en question, mais qui le refiltre avec le deuxième mot,etc...
Merci ça a réglé mon problème.
J’ai seulement changé le paramètre titre_mot par id_mot.
#TITRE
Je me demandais quand même s’il n’y a pas un autre moyen de passer plusieurs mots-clé en paramètre dans 1 boucle. Je gère un gros site avec plus de 2000 publications, les mots-clé me sont donc indispensables pour gérer autant d’information. J’aurais besoin de passer en paramètre 4 ou 5 mots-clé.
Merci d’avance
En fait au départ c’était pour réaliser cela :
http://article.gmane.org/gmane.comp.web.spip.user/53599/match= mais depuis les demandes de l’époque (février 2005) et spip ont bien évolués. C’est de la préhistoire. Ceci dit, le coup des tableaux imbriqué je trouvais çà ... élègant.
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |