Rechercher dans les articles syndiqués

SPIP ne permet pas de rechercher dans les articles syndiqués. Voici comment faire avec un peu d’astuce.

Cette contrib est l’évolution [1] d’une « bribe de code » que j’avais pondu il y a quelques temps. Son objectif est de pallier aux lacunes de SPIP concernant la recherche dans les articles syndiqués. SPIP permet la recherche dans les rubriques, brèves, articles mais pas les articles syndiqués.

Je construis un simple tableau dans le fichier recherche.php3 qui me récupère les articles selon le terme recherché. Plusieurs mots acceptés. Le truc avec les caractères bizarres, c’est juste pour gérer les accents. Les expressions régulières dans les requêtes servent à séparer correctement les mots :

$ma_recherche = rtrim(str_replace("+", " ", $_GET['recherche']));  
//suppression de moins de 3 caractères
$ma_recherche = preg_replace('@(.+?)\b[\w]{1,2}\b(.+?)@si', '\1 \2', $ma_recherche);
$ma_recherche = preg_replace(array("@[AÀÁÂÃÄÅaàáâãäå]@","@[OÒÓÔÕÖØoòóôõöø]@","@[EÈÉÊËeéèêë]@","@[Çç]@","@[IÌÍÎÏiìíîï]@","@[UÙÚÛÜuùúûü]@","@[ÿÑñ]@"), array("[aàáâãäå]","[oòóôõöø]","[eéèêë]","[Çç]","[iìíîï]","[uùúûü]","[ÿñ]"), $ma_recherche);
$mots = explode(" ",$ma_recherche);
$articles_syndiques_recherches = array();
for ($i = 0; $i < sizeof($mots); $i++) {
	
	$sql = "select titre,descriptif,url from spip_syndic_articles where statut = 'publie' and (titre regexp '[[:<:]]$mots[$i][[:>:]]' or descriptif regexp '[[:<:]]$mots[$i][[:>:]]') order by date desc limit 0,50";
	$res = spip_query($sql);
	while ($row = mysql_fetch_object($res)) {
		array_push($articles_syndiques_recherches, $row);
	}
}

Ensuite, je construis ma boucle pour le squelette :

<?php if ( sizeof($articles_syndiques_recherches)>0 ) { ?>
<div class="keypoint">
	<h2>Dans les articles syndiqu&eacute;s</h2>
	<ul>
		<?php foreach ($articles_syndiques_recherches as $v) { ?>
<li><a href="<?= $v->url ?>" title="<?= substr($v->descriptif,0,50) . ' ...' ?>"><?= surligner_mots($v->titre, $GLOBALS[recherche]) ?></a></li>
		<?php } ?>
	</ul>
</div>
	<?php } //endif ?>

Voilà. L’idéal serait de créer un VRAI critère de boucle pour cela. Peut-être dans une prochaine version ...

Pour l’installer écrasez votre fichier recherche.php3 à la racine.

recherche.php3

Note : ce système est un palliatif. Dans un environnement fortement sollicité, il est très peu efficient [2]. On peut le rendre efficace cependant en utilisant un système de cache externe à SPIP. Cette contrib est utile pour les squelettes de type sedna.

Notes

[1Avec des expressions régulières.

[2A cause de son accès permanent à la base de donnée.

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

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.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom