Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

clients:impl:php_coredem [2012/02/02 19:34]
vincent
clients:impl:php_coredem [2013/04/05 17:12]
Ligne 1: Ligne 1:
-====== Implémentation sur le site de la Coredem ====== 
- 
-L'​implémentation en PHP est composé des éléments suivants : 
- 
-  * Un fichier fonctions.php qui comprend l'​essentiel du code sous la forme d"une fonction principale et d'une classe d'​accompagnement 
-  * Une série de fichiers de langues pour gérer les libellés à traduire 
-  * Quelques lignes de code PHP inclues dans un squelette Spip 
- 
- 
-===== Le fichier fonctions.php ===== 
- 
-<code php> 
-<?php 
- 
-/* 
-* Fonction principale qui effectue la requête auprès du serveur Scrutari, récupère le résultat 
-* au format JSON et le traduit en HTML. 
-* La valeur de retour est une chaine. 
-* - $url : l'url du serveur Scrutari avec la barre oblique de fin (exemple : http://​sct1.scrutari.net/​sct/​coredem/​) 
-* - $query : la chaine avec les paramètres de recherche (sera concaténé avec $url sous la forme $url.'​JSON?'​.$query pour construire 
-* l'​interrogation auprès du serveur Scrutari), $query doit comprendre le paramètre type=q-fiche et doit également définir la langue 
-* de l'​interface avec le paramètre langui 
-*/ 
- 
-function Sct_getResult($url,​ $query) { 
- 
-    ​ 
-    /* 
-    * Récupération de la réponse JSON  sous forme de chaine et transformation sous la forme d'​objet PHP. 
-    * $obj est en fait un tableau, on pourrait récupérer $obj sous forme d'​objet avec json_decode(false) 
-    */ 
-    $jsonString ​ = file_get_contents($url.'​JSON?'​.$query);​ 
-    $obj = json_decode($jsonString,​ true); 
-    ​ 
-    /* 
-    * $ficheSearchResult est l'​élément racine de l'​objet JSON 
-    * (ici, on ne fait pas de traitement d'​erreur,​ on suppose que $query est bien construit) 
-    */ 
-    $ficheSearchResult = $obj['​ficheSearchResult'​];​ 
-    ​ 
-    /* 
-    * Récupération de la langue d'​interface et initialisation d'un tableau 
-    * avec les éléments d'​interface traduits 
-    */ 
-    $langUi = $ficheSearchResult['​langUi'​];​ 
-    $locArray = parse_ini_file("​scrutariloc_"​.$langUi."​.ini"​);​ 
-    ​ 
-    /* 
-    * Récupération des mots de la recherche tels qu'​envoyés au serveur Scrutari 
-    */ 
-    $qSource = $ficheSearchResult['​qSource'​];​ 
-    ​ 
-    /* 
-    * Récupération du nombre de fiches dans le résultat 
-    * S'il est égal à 0, on arrête le traitement en retournant le message 
-    */ 
-    $ficheCount = $ficheSearchResult['​ficheCount'​];​ 
-    if ($ficheCount == 0) { 
-       ​return '<​h2>'​.$locArray["​sct_resultat_zero"​].$qSource.$locArray["​sct_finguillemet"​]."</​h2>";​ 
-    } 
-    ​ 
-    /* 
-    * Initialisation de la chaine à retourner et insertion de l'​entête 
-    */ 
-    $resultString = "";​ 
-    if ($ficheCount == 1)  { 
-        $resultString .= '<​h2>'​.$locArray["​sct_resultat_un"​].$qSource.$locArray["​sct_finguillemet"​]."</​h2>";​ 
-    } else { 
-        $resultString .= '<​h2>'​.$ficheCount.'​ '​.$locArray["​sct_resultat_plusieurs"​].$qSource.$locArray["​sct_finguillemet"​]."</​h2>";​ 
-    } 
-    ​ 
-    /* 
-    * Insertion du lien vers la version ods, le chemin est construit avec l'​identifiant du résultat de la recherche ($ficheSearchResult['​qId'​]) 
-    */ 
-    $resultString .= '<​p><​a href="'​.$url.'​export/​result_'​.$ficheSearchResult['​qId'​].'​_'​.$langUi.'​.ods">'​.$locArray["​sct_lien_ods"​].'</​a></​p>';​ 
-    ​ 
-    /* 
-    * Création d'une instance de la classe Sct_FicheSearchResultWrapper qui permettre un certain nombre de traitement 
-    * sur le résultat. '​SCT_Marque'​ est le nom de la classe appliquée aux balises <​span>​ qui servent à surligner les termes 
-    * de la recherche 
-    */ 
-    $sctFicheSearchResultWrapper = new Sct_FicheSearchResultWrapper($ficheSearchResult,​ '​SCT_Marque'​);​ 
- 
-    /* 
-    * Récupération du tableau des groupes de fiches et itération 
-    */ 
-    $ficheGroupArray = $ficheSearchResult['​ficheGroupArray'​];​ 
-    $groupCount = count($ficheGroupArray);​ 
-    for($i = 0; $i < $groupCount;​ $i++) { 
-        $ficheGroup = $ficheGroupArray[$i];​ 
-        if (array_key_exists('​corpusClasse',​ $ficheGroup)) { 
-            $corpusClasse = $ficheGroup['​corpusClasse'​];​ 
-            $resultString .= '<p class="​SCT_FicheGroup">';​ 
-            $resultString .= $corpusClasse['​intitule'​];​ 
-            $resultString .= '</​p>';​ 
-        } 
-        $ficheArray = $ficheGroup['​ficheArray'​];​ 
-        $count = count($ficheArray);​ 
-        $resultString .= '<​ul class="​SCT_UL_Fiche">';​ 
-        for($j = 0; $j < $count; $j++) { 
-            $fiche = $ficheArray[$j];​ 
-            $codecorpus = $fiche['​codecorpus'​];​ 
-            $resultString .= '<​li><​p class="​SCT_Fiche_Titre">';​ 
-            if (array_key_exists('​icon',​ $fiche)) { 
-                $resultString .= '<​img src="'​.$fiche['​icon'​].'"​ class="​SCT_Fiche_Icon"/>';​ 
-            } 
-            $resultString .= '<a href="'​.$fiche['​href'​].'">';​ 
-            $resultString .= $sctFicheSearchResultWrapper->​concatWithSpan($fiche['​mtitre'​]);​ 
-            $resultString .= '</​a></​p>';​ 
-            if (array_key_exists('​msoustitre',​ $fiche)) { 
-                $resultString .= '<p class="​SCT_Fiche_Soustitre">';​ 
-                $resultString .= $sctFicheSearchResultWrapper->​concatWithSpan($fiche['​msoustitre'​]);​ 
-                $resultString .= '</​p>';​ 
-            } 
-            $infoTech = "";​ 
-            if (array_key_exists('​mcomplementArray',​ $fiche)) { 
-                $mcomplementArray = $fiche['​mcomplementArray'​];​ 
-                $compCount = count($mcomplementArray);​ 
-                for($k = 0; $k < $compCount; $k++) { 
-                    $mcomplement = $mcomplementArray[$k];​ 
-                    $num = $mcomplement['​num'​];​ 
-                    if ($k > 0) { 
-                        $infoTech .= ', '; 
-                    } 
-                    $infoTech .= $sctFicheSearchResultWrapper->​concatWithSpan($mcomplement['​mcomp'​]);​ 
-                } 
-            } 
-            if (array_key_exists('​annee',​ $fiche)) { 
-                if (strlen($infoTech) > 0) { 
-                    $infoTech .= ' | '; 
-                } 
-                $infoTech .= $fiche['​annee'​];​ 
-            } 
-            if (strlen($infoTech) > 0) { 
-                $resultString .= '<p class="​SCT_Fiche_Complement">';​ 
-                $resultString .= $infoTech; 
-                $resultString .= '</​p>';​ 
-            } 
- 
-            if (array_key_exists('​codemotcleArray',​ $fiche)) { 
-                $motcleCount = count($codemotcleArray);​ 
-                $codemotcleArray = $fiche['​codemotcleArray'​];​ 
-                $resultString .= '<p class="​SCT_Fiche_Motscles">';​ 
-                $resultString .= '<​span class="​SCT_Intitule">';​ 
-                if ($motcleCount == 1) { 
-                    $resultString .= $locArray['​sct_motscles_un'​];​ 
-                } else { 
-                    $resultString .= $locArray['​sct_motscles_plusieurs'​];​ 
-                } 
-                $resultString .= " "; 
-                $resultString .= '</​span>​ '; 
-                for($k = 0; $k < $motcleCount;​ $k++) { 
-                    if ($k > 0) { 
-                        $resultString .=  ', '; 
-                    } 
-                    $codemotcle = $codemotcleArray[$k];​ 
-                    $resultString .= $sctFicheSearchResultWrapper->​getMotcleString($codemotcle);​ 
-                } 
-                $resultString .= '</​p>';​ 
-            } 
-            $resultString .= '</​li>'​."​\n";​ 
-        } 
-        $resultString .= "</​ul>";​ 
-    } 
-    return $resultString;​ 
-} 
- 
-  
-  
-/** 
-* Objet encapsulant le résultat d'une recherche et proposant 
-* des fonctions utilitaires. 
-*/ 
-class Sct_FicheSearchResultWrapper { 
-  
-    var $corpusIntituleArray;​ 
-    var $spanClass; //contenu de l'​attribut class des balises span 
-    var $motcleStringMap;​ //tableau associatif avec comme clé le code d'un mot-clé et comme valeur le libellé du mot-clé 
-  
-    function __construct($ficheSearchResult,​ $spanClass) { 
-        $this->​corpusIntituleArray = $ficheSearchResult['​corpusIntituleArray'​];​ 
-        $this->​spanClass = $spanClass; 
-        $this->​motcleStringMap = $this->​initMotcleStringMap($ficheSearchResult);​ 
-    } 
-  
-    /** 
-    * Retourne l'​intitulé du complément de numéro $compNum pour 
-    * le corpus de code $codecorpus 
-    */ 
-    function getComplementIntitule($codecorpus,​ $compNum) { 
-        $intituleCount = count($this->​corpusIntituleArray);​ 
-        for($i = 0; $i < $intituleCount;​ $i++) { 
-            $corpusIntitule = $this->​corpusIntituleArray[$i];​ 
-            if ($corpusIntitule['​codecorpus'​] == $codecorpus) { 
-                return $corpusIntitule['​complement_'​.$compNum];​ 
-            } 
-        } 
-        return "?";​ 
-    } 
-  
-    /** 
-    * $markedStringArray est un tableau qui contient soit des chaines soit des tableaux associatifs 
-    * comprenant une clé '​s'​ indiquant les chaines marquées. Ces dernières sont entourées d'une balise 
-    * span dont la classe est $spanClass 
-    */ 
-    function concatWithSpan($markedStringArray) { 
-        $result = "";​ 
-        $count = count($markedStringArray);​ 
-        for($i = 0; $i < $count; $i++) { 
-            $obj = $markedStringArray[$i];​ 
-            if (is_array($obj)) { 
-                $result .= '<​span class="'​.$this->​spanClass.'">';​ 
-                $result .= $obj['​s'​];​ 
-                $result .= '</​span>';​ 
-            } else { 
-                $result .= $obj; 
-            } 
-        } 
-        return $result; 
-    } 
-  
-    /** 
-    * Retourne le libellé du mot-clé de code $codemotcle 
-    */ 
-    function getMotcleString($codemotcle) { 
-        return $this->​motcleStringMap[$codemotcle];​ 
-    } 
-  
-    /** 
-    * Initialisation du tableau associatif des codes de mots-clés et de lerus libellés 
-    */ 
-    private function initMotcleStringMap($ficheSearchResult) { 
-        $motcleStringMap = array(); 
-        if (!array_key_exists('​motcleArray',​ $ficheSearchResult)) { 
-            return $motcleStringMap;​ 
-        } 
-        $motcleArray = $ficheSearchResult['​motcleArray'​];​ 
-        $count = count($motcleArray);​ 
-        for($i = 0; $i < $count; $i++) { 
-            $motcle = $motcleArray[$i];​ 
-            $codemotcle = $motcle['​codemotcle'​];​ 
-            $mlibelleArray = $motcle['​mlibelleArray'​];​ 
-            $lib = "";​ 
-            $libCount = count($mlibelleArray);​ 
-            for($j = 0; $j < $libCount; $j++) { 
-                if ($j > 0) { 
-                    $lib .= "/";​ 
-                } 
-                $mlib =$mlibelleArray[$j];​ 
-                $lib .= $this->​concatWithSpan($mlib['​mlib'​]);​ 
-            } 
-            $motcleStringMap[$codemotcle] = $lib; 
-        } 
-        return $motcleStringMap;​ 
-    } 
-  
-} 
- 
-</​code>​ 
- 
-===== Les fichiers de langue ===== 
- 
-Ce sont des fichiers .ini chargé par la fonction //​parse_ini_file//​ 
- 
-<code php> 
-sct_motscles_un = "​Mot-clé :" 
-sct_motscles_plusieurs = "​Mots-clés :" 
-sct_deuxpoints = " :" 
-sct_resultat_zero = "Aucun résultat pour la recherche « " 
-sct_resultat_plusieurs = "​résultats pour la recherche « " 
-sct_resultat_un = "Un résultat pour la recherche « " 
-sct_finguillemet = " »." 
-sct_lien_ods = "​Récupérez l'​intégralité du résultat au format ODS" 
-</​code>​ 
- 
- 
-===== Les lignes à inclure ===== 
- 
-La langue de l'​interface est celle de la langue de Spip en cours. Les mots de la recherche sont indiqués par le paramètre //q// transmis à la recherche. 
- 
-**Note :** si vous effectuez une recherche sur le moteur scrutari de la Coredem, n'​oubliez pas de modifier la valeur de la variable //​$sct_site//,​ c'est la seule trace que conserve la Coredem sur l'​origine de la recherche. Si vous désirez que le moteur ne garde aucune trace de la recherche, ajoutez //&​log=0//​ à la fin //​$sct_query//​. 
- 
- 
-<​code ​ php> 
-$sct_lang = #LANG; 
-$sct_url = '​http://​sct1.scrutari.net/​sct/​coredem/';​ 
-$sct_q = false; 
-if (isset($_REQUEST['​q'​])) { 
-    $sct_q = $_REQUEST['​q'​];​ 
-} 
-if ($sct_q) { 
-    $sct_site = '​coredem';​ //​indication du site d'​origine de la recherche, à modifier avec une chaine identifiant l'​origine 
-    $sct_query = '​type=q-fiche&​fichefields=codecorpus,​mtitre_def,​msoustitre_def,​mcomplements_def,​annee,​href,​icon&​motclefields=mlibelles&​langui='​.$sct_lang.'&​intitules=complement&​q='​.urlencode($sct_q).'&​site='​.$sct_site;​ 
-    include('​squelettes/​scrutari/​fonctions.php'​);​ 
-    echo Sct_getResult($sct_url,​ $sct_query);​ 
-} 
- 
-</​code>​ 
  
clients/impl/php_coredem.txt · Dernière modification: 2013/04/05 17:12 (modification externe)
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0