Subversion Repositories eFlore/Applications.coel-consultation

Compare Revisions

Ignore whitespace Rev 46 → Rev 47

/branches/barsac-v1.0/controleurs/Recherche.php
13,6 → 13,9
*/
class Recherche extends ColControleur {
private $chaine_recherche = null;
private static $url_exemple = null;
//+----------------------------------------------------------------------------------------------------------------+
// Méthodes
/**
29,10 → 32,8
$donnees = array();
// Gestion des données de la requête
$chaine = $this->obtenirChaineRecherche();
$this->memoriserChaineRecherche($chaine);
$donnees['recherche'] = htmlspecialchars(stripslashes($chaine));
$donnees['recherche'] = htmlspecialchars($this->obtenirChaineRecherche());
 
// Gestion des urls
$this->url->setVariableRequete('module', 'Recherche');
$this->url->setVariableRequete('action', 'rechercher');
40,7 → 41,7
$donnees['url_module'] = 'Recherche';
$donnees['url_action'] = 'rechercher';
$this->url->setVariableRequete('recherche', '%s');
$donnees['url_exemple'] = $this->url->getUrl();
self::$url_exemple = $this->url->getUrl();
$this->url->unsetVariablesRequete(array('module', 'action', 'recherche'));
// Gestion du squelette et de la sortie
49,8 → 50,17
private function obtenirChaineRecherche() {
$chaine = '';
if (isset($_GET['recherche'])) {
if (!is_null($this->chaine_recherche)) {
$chaine = $this->chaine_recherche;
} else if (isset($_GET['recherche'])) {
// Pré-traitement de la chaine de recherche
$chaine = $_GET['recherche'];
// Suppression des slash ajouté automatiquement par PHP devant les guillemets
$chaine = stripslashes($chaine);
// Mémorisation de la chaine
$this->memoriserChaineRecherche($chaine);
// Stockage dans la classe pour éviter d'effectuer à nouveau le traitement ci-dessus
$this->chaine_recherche = $chaine;
} else if (isset($_SESSION['col']['recherche'])) {
$chaine = $_SESSION['col']['recherche'];
}
60,6 → 70,19
private function memoriserChaineRecherche($chaine) {
$_SESSION['col']['recherche'] = $chaine;
}
 
public static function getUrlExemple($chaine) {
$url = '';
if (!is_null(self::$url_exemple)) {
// L'utilisation d'urlencode nécessiate de pré-encodé la chaine dans le format de sortie si nécessaire
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$chaine = mb_convert_encoding($chaine, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
$chaine = urlencode($chaine);
$url = sprintf(self::$url_exemple, $chaine);
}
return $url;
}
/**
* Recherche des collections.
71,9 → 94,8
$parametres = array('mots' => '*');
// Récupération des paramêtres de l'url
$chaine_de_recherche = '';
if (isset($_GET['recherche'])) {
$chaine_de_recherche = $_GET['recherche'];
$chaine_de_recherche = $this->obtenirChaineRecherche();
if (!empty($chaine_de_recherche)) {
$this->url->setVariableRequete('recherche', $chaine_de_recherche);
}
$parametres = $this->parserChaineDeRecherche($chaine_de_recherche);
91,6 → 113,7
$fragmenteur = Composant::fabrique('fragmenteur', $options);
$donnees['fragmenteur'] = $fragmenteur->executer();
list($de, $a) = $fragmenteur->getDeplacementParPageId();
$this->url->unsetVariableRequete('recherche');
 
// Gestion de l'accès aux données
$rechercheDao->setLimitation(($de - 1), $fragmenteur->getDonneesParPage());
129,11 → 152,7
$this->chargerPiedDePage();
}
private function parserChaineDeRecherche($chaine) {
// Pré-traitement de la chaine de recherche
// Suppression des slash ajouté automatiquement par PHP
$chaine = stripslashes($chaine);
private function parserChaineDeRecherche($chaine) {
$mots = preg_split('/ /i', $chaine, -1, PREG_SPLIT_NO_EMPTY);
$parametres = array('mots' => '');
$cle_precedente = null;
/branches/barsac-v1.0/squelettes/moteur.tpl.html
31,13 → 31,13
<p>Par défaut, la recherche est insensible à la casse (majuscule / minuscule) et s'effectue
en intercalant automatiquement le joker % avant et après la chaine recherchée et entre chaque mot de celle-ci.</p>
<p>Le moteur de recherche permet d'utiliser des opérateurs dans le texte recherché pour préciser la requête.</p>
<p>Exemples&nbsp;: <a href="<?=sprintf($url_exemple, urlencode('mpu'))?>">mpu</a>,
<a href="<?=sprintf($url_exemple, urlencode('"herbier de Coste"'))?>">"herbier de Coste"</a>,
<a href="<?=sprintf($url_exemple, urlencode('bot:he'))?>">bot:he</a>,
<a href="<?=sprintf($url_exemple, urlencode('Coste bot:he'))?>">Coste bot:he</a>,
<a href="<?=sprintf($url_exemple, urlencode('herbier zg:France'))?>">herbier zg:France</a>,
<a href="<?=sprintf($url_exemple, urlencode('p:coste pr:co'))?>">p:coste pr:co</a>,
<a href="<?=sprintf($url_exemple, urlencode('Ecole sci:1'))?>">Ecole sci:1</a>.</p>
<p>Exemples&nbsp;: <a href="<?=Recherche::getUrlExemple('mpu')?>">mpu</a>,
<a href="<?=Recherche::getUrlExemple('"herbier de Coste"')?>">"herbier de Coste"</a>,
<a href="<?=Recherche::getUrlExemple('bot:he')?>">bot:he</a>,
<a href="<?=Recherche::getUrlExemple('Coste bot:he')?>">Coste bot:he</a>,
<a href="<?=Recherche::getUrlExemple('herbier zg:France')?>">herbier zg:France</a>,
<a href="<?=Recherche::getUrlExemple('p:coste pr:co')?>">p:coste pr:co</a>,
<a href="<?=Recherche::getUrlExemple('Ecole sci:1')?>">Ecole sci:1</a>.</p>
<table>
<thead>
<tr>
55,7 → 55,7
<td>Recherches scientifiques</td>
<td>Limite les résultats aux institutions autorisant la consultation des collections
<em>sans (=0)</em> ou <em>avec (=1)</em> des objectifs de recherches scientifiques.</td>
<td><a href="<?=sprintf($url_exemple, urlencode('sci:0'))?>">sci:0</a></td>
<td><a href="<?=Recherche::getUrlExemple('sci:0')?>">sci:0</a></td>
</tr>
<tr>
<td>bot:</td>
63,7 → 63,7
AL (Collection en alcool), XY (Xylothèque), PM (Collection de préparations microscopiques).</td>
<td>Type de collection botanique</td>
<td>Limite les résultats aux collections botaniques du type indiqué.</td>
<td><a href="<?=sprintf($url_exemple, urlencode('bot:he'))?>">bot:he</a></td>
<td><a href="<?=Recherche::getUrlExemple('bot:he')?>">bot:he</a></td>
</tr>
<tr>
<td>zg:</td>
70,7 → 70,7
<td>Texte libre</td>
<td>Origine géographique du contenu de la collection</td>
<td>Limite les résultats aux collections dont le contenu correspond à la zone géographique indiquée.</td>
<td><a href="<?=sprintf($url_exemple, urlencode('zg:lozère'))?>">zg:lozère</a></td>
<td><a href="<?=Recherche::getUrlExemple('zg:lozère')?>">zg:lozère</a></td>
</tr>
<tr>
<td>p:</td>
78,7 → 78,7
<td>Nom ou partie du nom d'une personne.</td>
<td>Limite les résultats aux institutions et collections liées a une personne dont le nom ou une
partie du nom correspond à la valeur indiquée.</td>
<td><a href="<?=sprintf($url_exemple, urlencode('p:coste'))?>">p:coste</a></td>
<td><a href="<?=Recherche::getUrlExemple('p:coste')?>">p:coste</a></td>
</tr>
<tr>
<td>pr:</td>
87,15 → 87,15
<td>Rôle d'une personne.</td>
<td>Limite les résultats aux institutions et collections liées a une personne dont le rôle
correspond à la valeur indiquée.</td>
<td><a href="<?=sprintf($url_exemple, urlencode('pr:AU'))?>">pr:AU</a></td>
<td><a href="<?=Recherche::getUrlExemple('pr:AU')?>">pr:AU</a></td>
</tr>
</tbody>
</table>
<p>Pour les opérateurs dont la valeur possible est un <em>texte libre</em>, il est possible d'utiliser des jokers.
Ces "jokers" permettent de modifier la recherche sur une chaine de caractères.</p>
<p>Exemples&nbsp;: <a href="<?=sprintf($url_exemple, urlencode('"herbier de Coste"'))?>">"herbier de Coste"</a>,
<a href="<?=sprintf($url_exemple, urlencode('"herbier % Montpellier"'))?>">"herbier % Montpellier"</a>,
<a href="<?=sprintf($url_exemple, urlencode('p:"Jo_l"'))?>">p:"Jo_l"</a>.
<p>Exemples&nbsp;: <a href="<?=Recherche::getUrlExemple('"herbier de Coste"')?>">"herbier de Coste"</a>,
<a href="<?=Recherche::getUrlExemple('"herbier % Montpellier"')?>">"herbier % Montpellier"</a>,
<a href="<?=Recherche::getUrlExemple('p:"Jo_l"')?>">p:"Jo_l"</a>.
</p>
<table>
<thead>
109,19 → 109,19
<tr>
<td>""</td>
<td>Permet de rechercher sur une expression exacte.</td>
<td><a href="<?=sprintf($url_exemple, urlencode('"Archives de l\'herbier Granger"'))?>">
<td><a href="<?=Recherche::getUrlExemple('"Archives de l\'herbier Granger"')?>">
"Archives de l'herbier Granger"</a></td>
</tr>
<tr>
<td>%</td>
<td>Remplace n'importe quel nombre de caractères, y compris aucun.</td>
<td><a href="<?=sprintf($url_exemple, urlencode('"herbier %Abbé% Carondelet"'))?>">
<td><a href="<?=Recherche::getUrlExemple('"herbier %Abbé% Carondelet"')?>">
"herbier %Abbé% Carondelet"</a></td>
</tr>
<tr>
<td>_</td>
<td>Remplace exactement un caractère</td>
<td><a href="<?=sprintf($url_exemple, urlencode('p:"Jo_l"'))?>">p:"Jo_l"</a></td>
<td><a href="<?=Recherche::getUrlExemple('p:"Jo_l"')?>">p:"Jo_l"</a></td>
</tr>
</tbody>
</table>