Author: cedric@yterium.com
Date: Sun Jul 2 01:08:32 2006
New Revision: 3775
Log:
Pour feter SPIP 1.9, un bel exemple d'extension de fonctionalité:
Interface mnoGoSearch-SPIP qui permet de gerer la recuperation des resultats de recherche de mnoGoSearch avec balises et boucles. La requete au moteur se fait de manière transparente a la premiere occurence d'une balise. Dans cette version, l'interrogation du moteur se fait en http. mnoGoSearch renvoie les resultats au format xml demandé. Cela permet d'interroger un moteur distant centralisé (scenario du moteur multi-sites dispersés). L'utilisation en lieu et place de l'API PHP mnoGoSearch serait techniquement possible sans impact sur l'utilisation dans le squelette.
Une reflexion sur la gestion d'un cache local est en cours, mais il me semble que le cache spip html est suffisant.
Un cache pourrait avoir un interêt pour faire du pre-fetching, et rapattrier a l'avance les pages suivantes de celle actuellement consultée. Cela semble lourd a mettre en place pour un gain pas evident.
Cote serveur mnoGo, un cache de resultats peut etre activé pour optimiser le cas des requetes depuis plusieurs sites.
Il reste la gestion de la pagination des resultats a prendre en compte. Et un menu a ajouter pour acceder a la page de configuration admin_mnogo qui permet de fixer l'url de requete a mnogoSearch.
C'est encore en développement, mais ca fonctionne déja.
Les fichiers de config de mnoGoSearch sont fournis, en particulier un search.htm qui genere le format xml attendu par le plugin.
Ces fichiers sont une base de configuration, et il convient de se reporter à la documentation de mnoGoSearch pour plus d'information.
Added:
_plugins_/_agora_/mnogosearch/
_plugins_/_agora_/mnogosearch/exec/
_plugins_/_agora_/mnogosearch/exec/admin_mnogo.php
_plugins_/_agora_/mnogosearch/inc/
_plugins_/_agora_/mnogosearch/inc/mnogo_distant.php
_plugins_/_agora_/mnogosearch/mnogo_mes_fonctions.php
_plugins_/_agora_/mnogosearch/mnogo_mes_options.php
_plugins_/_agora_/mnogosearch/mnogosearch/
_plugins_/_agora_/mnogosearch/mnogosearch/etc/
_plugins_/_agora_/mnogosearch/mnogosearch/etc/indexer.conf
_plugins_/_agora_/mnogosearch/mnogosearch/etc/ispell/
_plugins_/_agora_/mnogosearch/mnogosearch/etc/ispell/francais.aff
_plugins_/_agora_/mnogosearch/mnogosearch/etc/ispell/francais.dico
_plugins_/_agora_/mnogosearch/mnogosearch/etc/langmap.conf
_plugins_/_agora_/mnogosearch/mnogosearch/etc/search.htm
_plugins_/_agora_/mnogosearch/mnogosearch/etc/stopwords.conf
_plugins_/_agora_/mnogosearch/mnogosearch/etc/synonym/
_plugins_/_agora_/mnogosearch/mnogosearch/etc/synonym/english.syn
_plugins_/_agora_/mnogosearch/mnogosearch/etc/synonym/francais (v1).syn
_plugins_/_agora_/mnogosearch/mnogosearch/etc/synonym/francais.syn
_plugins_/_agora_/mnogosearch/mnogosearch/etc/synonym/italian.syn
_plugins_/_agora_/mnogosearch/mnogosearch/etc/synonym/russian.big.syn (with props)
_plugins_/_agora_/mnogosearch/mnogosearch/etc/synonym/russian.syn
_plugins_/_agora_/mnogosearch/plugin.xml
_plugins_/_agora_/mnogosearch/testmnogo.html
Added: _plugins_/_agora_/mnogosearch/exec/admin_mnogo.php
--- _plugins_/_agora_/mnogosearch/exec/admin_mnogo.php (added)
+++ _plugins_/_agora_/mnogosearch/exec/admin_mnogo.php Sun Jul 2 01:08:32 2006
@@ -0,0 +1,54 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+function exec_admin_mnogo(){
+ global $connect_statut,$connect_toutes_rubriques;
+
+ include_spip("inc/presentation");
+
+ debut_page(_L("Interface mnoGoSearch"), "mnoGoSearch", "mnoGoSearch");
+
+ debut_gauche();
+
+ debut_boite_info();
+ echo propre(_L('Cette page permet de configurer l\'interrogation du moteur de recherche mnoGoSearch<br/> Configurez votre mnoGoSearch avec '));
+ fin_boite_info();
+
+
+ debut_droite();
+ gros_titre(_L('Moteur de Recherche mnoGoSearch'));
+ if ($connect_statut != '0minirezo' OR !$connect_toutes_rubriques) {
+ echo _T('avis_non_acces_page');
+ fin_page();
+ exit;
+ }
+
+ // parametres generaux : id-syndication et url web service
+ echo generer_url_post_ecrire('admin_mnogo');
+ echo "<div>";
+
+ $mnogo_url_search = _request('mnogo_url_search');
+ if ($mnogo_url_search!==NULL){
+ if (substr($mnogo_url_search,-1)=='/')
+ $mnogo_url_search = substr($mnogo_url_search,0,strlen($mnogo_url_search)-1);
+ ecrire_meta('mnogo_url_search',$mnogo_url_search);
+ ecrire_metas();
+ }
+
+ $mnogo_url_search = isset($GLOBALS['meta']['mnogo_url_search'])?$GLOBALS['meta']['mnogo_url_search']:"";
+ echo "<div style='font:arial,helvetica,sans-serif;font-size:small;'>";
+ echo "<label for='mnogo_url_search'><strong>"._L('Url d\'interrogation du moteur mnoGoSearch')."</strong></label><br/>";
+ echo "<input type='text' label='mnogo_url_search' name='mnogo_url_search' value=\"".entites_html($mnogo_url_search)."\" class='formo' />";
+ echo "</div>";
+
+ echo "<p style='text-align:right;'>";
+ echo "<input type='submit' name='submit' value='"._T('Modifier')."' class='fondo' />";
+ echo "</p></div></form>";
+
+
+ fin_page();
+}
+
+
+?>
\ No newline at end of file
Added: _plugins_/_agora_/mnogosearch/inc/mnogo_distant.php
--- _plugins_/_agora_/mnogosearch/inc/mnogo_distant.php (added)
+++ _plugins_/_agora_/mnogosearch/inc/mnogo_distant.php Sun Jul 2 01:08:32 2006
@@ -0,0 +1,51 @@
+<?php
+
+function mnogo_querystring(){
+ $default_qs=array('q'=>'','m'=>'all','wm'=>'wrd','sp'=>1,'sy'=>1,'wf'=>'2221','type'=>'','ul'=>'','fmt'=>'xml','np'=>0,'ps'=>10,'GroupBySite'=>'no');
+ $key_translate = array('recherche'=>'q','site'=>'ul','debut'=>'np');
+
+ foreach($_REQUEST as $key=>$value){
+ if (isset($key_translate[$key]))
+ $key = $key_translate[$key];
+ if (isset($default_qs[$key]))
+ $default_qs[$key] = $value;
+ }
+ $default_qs['fmt'] = 'xml'; // obligatoire
+ $req = "";
+ foreach($default_qs as $key=>$value)
+ $default_qs[$key]=$key."=".$value;
+ return implode("&",$default_qs);
+}
+
+function mnogo_getresults(){
+ global $mnogo_resultats_synthese;
+ global $mnogo_resultats;
+ $url = isset($GLOBALS['meta']['mnogo_url_search'])?$GLOBALS['meta']['mnogo_url_search']:"";
+ $qs = mnogo_querystring();
+ $url .= (strpos($url,"?")!==FALSE)?"&$qs":"?$qs";
+
+ $arbre = array();
+ include_spip('inc/distant');
+ $contenu = recuperer_page($url);
+ if ($contenu){
+ include_spip('inc/plugin');
+ $arbre = parse_plugin_xml($contenu);
+ }
+ if (isset($arbre['recherche'][0])){
+ foreach ($arbre['recherche'][0] as $balise=>$value){
+ if ($balise!='resultats')
+ $mnogo_resultats_synthese[preg_replace(',^balise_,i','',$balise)] = applatit_arbre($value);
+ /*if ($balise=='balise_MNOGO_TOTAL')
+ $mnogo_resultats = array_fill (0, $mnogo_resultats_synthese['MNOGO_TOTAL'], NULL );*/
+ }
+ if (isset($arbre['recherche'][0]['resultats'][0]['resultat'])){
+ foreach ($arbre['recherche'][0]['resultats'][0]['resultat'] as $key=>$liste){
+ foreach ($liste as $balise=>$value) {
+ $mnogo_resultats[$key][preg_replace(',^balise_,i','',$balise)] = applatit_arbre($value);
+ }
+ }
+ }
+ }
+}
+
+?>
\ No newline at end of file
Added: _plugins_/_agora_/mnogosearch/mnogo_mes_fonctions.php
--- _plugins_/_agora_/mnogosearch/mnogo_mes_fonctions.php (added)
+++ _plugins_/_agora_/mnogosearch/mnogo_mes_fonctions.php Sun Jul 2 01:08:32 2006
@@ -0,0 +1,139 @@
+<?php
+
+function balise_MNOGO_RECHERCHE_dist($p) {
+ $p->code = "mnogo_checkresults()?\$GLOBALS['mnogo_resultats_synthese']['MNOGO_RECHERCHE']:''";
+ return $p;
+}
+function balise_MNOGO_RESUME_RESULTATS_dist($p) {
+ $p->code = "mnogo_checkresults()?\$GLOBALS['mnogo_resultats_synthese']['MNOGO_RESUME_RESULTATS']:''";
+ return $p;
+}
+function balise_MNOGO_PREMIER_dist($p) {
+ $p->code = "mnogo_checkresults()?\$GLOBALS['mnogo_resultats_synthese']['MNOGO_PREMIER']:''";
+ return $p;
+}
+function balise_MNOGO_DERNIER_dist($p) {
+ $p->code = "mnogo_checkresults()?\$GLOBALS['mnogo_resultats_synthese']['MNOGO_DERNIER']:''";
+ return $p;
+}
+function balise_MNOGO_TOTAL_dist($p) {
+ $p->code = "mnogo_checkresults()?\$GLOBALS['mnogo_resultats_synthese']['MNOGO_TOTAL']:''";
+ return $p;
+}
+function balise_MNOGO_SEARCHTIME_dist($p) {
+ $p->code = "mnogo_checkresults()?\$GLOBALS['mnogo_resultats_synthese']['MNOGO_SEARCHTIME']:''";
+ return $p;
+}
+
+
+function balise_MNOGO_ITEM_NUMERO_dist($p) {
+ $_arg='0';
+ if ($p->param && !$p->param[0][0]){
+ $_arg = calculer_liste($p->param[0][1],
+ $p->descr,
+ $p->boucles,
+ $p->id_boucle);
+ }
+ $p->code = "mnogo_checkresults()?\$GLOBALS['mnogo_resultats'][$_arg]['MNOGO_ITEM_NUMERO']:''";
+ return $p;
+}
+function balise_MNOGO_ITEM_TITRE_dist($p) {
+ $_arg='0';
+ if ($p->param && !$p->param[0][0]){
+ $_arg = calculer_liste($p->param[0][1],
+ $p->descr,
+ $p->boucles,
+ $p->id_boucle);
+ }
+ $p->code = "mnogo_checkresults()?\$GLOBALS['mnogo_resultats'][$_arg]['MNOGO_ITEM_TITRE']:''";
+ return $p;
+}
+function balise_MNOGO_ITEM_URL_dist($p) {
+ $_arg='0';
+ if ($p->param && !$p->param[0][0]){
+ $_arg = calculer_liste($p->param[0][1],
+ $p->descr,
+ $p->boucles,
+ $p->id_boucle);
+ }
+ $p->code = "mnogo_checkresults()?\$GLOBALS['mnogo_resultats'][$_arg]['MNOGO_ITEM_URL']:''";
+ return $p;
+}
+function balise_MNOGO_ITEM_POINTS_dist($p) {
+ $_arg='0';
+ if ($p->param && !$p->param[0][0]){
+ $_arg = calculer_liste($p->param[0][1],
+ $p->descr,
+ $p->boucles,
+ $p->id_boucle);
+ }
+ $p->code = "mnogo_checkresults()?\$GLOBALS['mnogo_resultats'][$_arg]['MNOGO_ITEM_POINTS']:''";
+ return $p;
+}
+function balise_MNOGO_ITEM_POPULARITE_dist($p) {
+ $_arg='0';
+ if ($p->param && !$p->param[0][0]){
[... 83437 lines stripped ...]