SPIP - Contrib

[ar] [en] [es] [fr] [it]



Accueil du site > Documentation > Archives documentation > Bidouilles pour avant SPIP 1.9

Dans une boucle articles faire un ET logique sur les critères de mot clés

mardi 16 novembre 2004, par Philippe AVI. Dernier ajout mardi 16 novembre 2004


Criteres avec un ET sur des mots clés


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


Répondre à cet article



Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | Charte et vie SPIP-Contrib | SPIP | L'autre.net