Bonjour,
Je cherche à améliorer le système de recherche implémenté dans Spip, et ce en autorisant une marge de maneuvre dans les termes (genre si on tape « banene » au lieu de « banane » bah ça sélectionne quand même)
Je vois à peu près comment implémenter ça en terme de requêtes sql mais en utilisant les fonctions de spip?
Pas du tout.
Pour remettre dans le contexte, je suis nouveau dans Spip, on m’a confié les rennes d’un vieux projet qui utilise ce cms, et je ne sais même pas quelle fonction s’occupe de la recherche.
Voici en gros ce que je peux vous apporter en détails, genre la requête SQL effectuée lors d’une recherche en mode debug:
SELECT articles.id_article, resultats.points AS points, articles.date, articles.titre, articles.texte, articles.lang
FROM spip_articles AS `articles`
INNER JOIN spip_resultats AS resultats ON ( resultats.id = articles.id_article )
WHERE (articles.statut = 'publie')
AND articles.date<'2024-04-08 12:08:00'
AND (resultats.recherche='cd43e2c918d7b95d' AND resultats.table_objet='articles' AND resultats.serveur='')
ORDER BY articles.date DESC
Et un peu de code obtenu avec le mode debug:
function BOUCLE_articleshtml_8e37e40ad0f57737a0f21c692bfd37ec(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {
007
008 static $command = array();
009 static $connect;
010 $command['connect'] = $connect = '';
011 // RECHERCHE
012 {
013 $prepare_recherche = charger_fonction('prepare_recherche', 'inc');
014 list($rech_select, $rech_where) = $prepare_recherche((isset($Pile[0]["recherche"])?$Pile[0]["recherche"]:(isset($GLOBALS["recherche"])?$GLOBALS["recherche"]:"")), "articles", "","",array (
015 ),"id_article");
016 }
017
018 $command['pagination'] = array((isset($Pile[0]['debut_articles']) ? $Pile[0]['debut_articles'] : null), 10);
019 if (!isset($command['table'])) {
020 $command['table'] = 'articles';
021 $command['id'] = '_articles';
022 $command['from'] = array('articles' => 'spip_articles','resultats' => 'spip_resultats');
023 $command['type'] = array();
024 $command['groupby'] = array();
025 $command['orderby'] = array('articles.date DESC');
026 $command['join'] = array('resultats' => array('articles','id','id_article'));
027 $command['limit'] = '';
028 $command['having'] =
029 array();
030 }
031 $command['select'] = array("articles.id_article",
032 "$rech_select",
033 "articles.date",
034 "articles.titre",
035 "articles.texte",
036 "articles.lang");
037 $command['where'] =
038 array(
039 quete_condition_statut('articles.statut','publie,prop,prepa/auteur','publie',''),
040 quete_condition_postdates('articles.date',''), $rech_where?$rech_where:'');
041 if (defined("_BOUCLE_PROFILER")) $timer = time()+(float)microtime();
042 $t0 = "";
043 // REQUETE
044 $iter = IterFactory::create(
045 "SQL",
046 $command,
047 array('recherche.html','html_8e37e40ad0f57737a0f21c692bfd37ec','_articles',35,$GLOBALS['spip_lang'])
048 );
Ma question c’est : quelle est la fonction qui s’occupe de la recherche actuellement ? (ou dans un projet type par exemple).
Car là je suis complètement paumé, impossible de savoir ce qui fait quoi.
Je sais que le plugin fulltext est installé, mais je ne sais pas si la recherche l’utilise ou utilise les fonctionnalités natives de spip.
Merci d’avance.