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é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.
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.
Aucune discussion
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 : |