Carnet Wiki

Ajouter une recherche limitée à la page courante

Version 3 — Décembre 2013 YannX

S’il existe deux formulaires généraux de Recherche dans l’ensemble du site SPIP ( #FORMULAIRE_RECHERCHE et #FORMULAIRE_RECHERCHE_ECRIRE ), il n’est pas évident qu’il est très facile de rajouter une facilité de recherche, s’appliquant de façon limitée au contenu de la boucle exposé dans le contenu de la page courante, simplement en rajoutant un critère conditionnel et ce mini-formulaire....

N.B. : Vous pouvez aussi regarder le plugin Jolie Recherche et toute la http://contrib.spip.net/Recherche sur Contrib.

Pour ajouter une recherche qui se limitera a rajouter un filtre à la liste affichée dans une boucle de la page courante, une préparation, et deux modifications à faire :
-  ajouter dans le sous-dossier ./formulaires d’un dossier de squelette, les deux fichiers joints : recherche_contenu.html et recherche_contenu.php [1] ou, si vous ne voulez meme pas re-styler votre formulaire : utilisez #FORMULAIRE_RECHERCHE_ECRIRE ci-dessous !
- dans chaque page ou vous voulez proposer a vos visiteurs de filtrer les éléments affichés dans une boucle par le texte indiqué en recherche :

  • positionnez l’appel à #FORMULAIRE_RECHERCHE_CONTENU{#SELF} où vous souhaitez dans votre squelette (en principe, dans la noisette de contenu-principal) [2].
  • ajoutez simplement dans la ligne de critères de la boucle cible de votre recherche, l’élément {recherche ?}
     [3]

Modifier les styles

à suivre...
-  les styles (utilise une classe .formulaire_recherche_contenu )
-  les images utilisées ( #CHEMIN_IMAGE et |balise_img )

Appliquer cette recherche sur des objets externes

Fichiers sources (à tester)

[(#REM) d'après: prive/formulaires/recherche_ecrire.html ]
<style>
 div.formulaire_recherche_contenu {  display:inline; }
  div.formulaire_recherche_contenu label {  width:250px; }
</style>
<div class="formulaire_spip formulaire_recherche formulaire_recherche_contenu" role='search'>
<form action="[(#ENV{action})]" method="get">
   <div class="formulaire_recherche_contenu">
	[(#ENV{action}|form_hidden)]
	[<input type="hidden" name="lang" value="(#ENV{lang})" />]
	<label class="for="#ENV{_id_champ,recherche}">Rechercher dans cette liste</label>
       [(#REM) mini-bouton d'annulation !]
       [<a
	(#ENV{recherche}|oui)
		class="cancel[ (#ENV{class,''})]"
		href="[(#ENV{action}|parametre_url{'recherche',''})]"
		onclick="$(this).siblings('input.text').val('')"
		title='<:annuler_recherche|attribut_html:>'>[(#CHEMIN_IMAGE{fermer-16.png}
	|balise_img
	|inserer_attribut{alt,<:annuler_recherche:>})]</a>]
	<input type="text"
				 class="text[(#ENV{recherche}|oui) cancelable]"
				 size="10"
				 name="recherche"
				 id="#ENV{_id_champ,recherche}"
				 placeholder="texte cherché"[
				 value="(#ENV{recherche})"]
	/>[<a
	(#ENV{recherche}|oui)
		class="cancel[ (#ENV{class,''})]"
		href="[(#ENV{action}|parametre_url{'recherche',''})]"
		onclick="$(this).siblings('input.text').val('')"
		title='<:annuler_recherche|attribut_html:>'>[(#CHEMIN_IMAGE{fermer-16.png}
	|balise_img
	|inserer_attribut{alt,<:annuler_recherche:>})]</a>]<input type='image'
					 src='[(#CHEMIN_IMAGE{rechercher-20.png})]'
					 class="image"
					 alt='<:info_rechercher|attribut_html:>'
					 onclick="return recherche_submit_#ENV{_id_champ,recherche}.apply(this);"
					 onkeypress="return recherche_submit_#ENV{_id_champ,recherche}.apply(this);"
	/><a class="none[ (#ENV{class,''})] refresh" href="[(#ENV{action}|parametre_url{'recherche',''})]"></a>
</div></form>
</div>
<?php

/***************************************************************************\
 *  SPIP, Systeme de publication pour l'internet                           *
 *                                                                         *
 *  Copyright (c) 2001-2012                                                *
 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
 *                                                                         *
 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
\***************************************************************************/

if (!defined('_ECRIRE_INC_VERSION')) return;

// chargement des valeurs par defaut des champs du formulaire
function formulaires_recherche_contenu_charger_dist($action = '',$class=''){
	if ($GLOBALS['spip_lang'] != $GLOBALS['meta']['langue_site'])
		$lang = $GLOBALS['spip_lang'];
	else
		$lang='';

	return 
		array(
			'action' => ($action ? $action : generer_url_ecrire('recherche')), # action specifique, ne passe pas par Verifier, ni Traiter
			'recherche' => _request('recherche'),
			'lang' => $lang,
			'class' => $class,
			'_id_champ' => 'rechercher_'.substr(md5($action.$class),0,4),
		);
}

?>