Personnalisation de la recherche avancée

De WIKI-BOKEH
Aller à : navigation, rechercher
ATTENTION
En l'état actuel cette fonctionnalité nécessite des connaissances en programmation PHP.

Bokeh propose un formulaire de recherche avancée par défaut.

Recherche avancee.png

Vous pouvez désormais personnaliser ce formulaire et proposer plusieurs formulaires de recherche eux-même personnalisé.

Activation[ ]

La personnalisation de la recherche avancée peut être activée par la variable "CUSTOM_SEARCH_FORM".

Cette variable n'est modifiable que par le compte administrateur système.

Suite à l'activation:

  • un nouveau menu apparait dans l'administration "Système" > "Formulaire de recherche", accessible uniquement aux administrateurs
  • une nouvelle option apparait dans la configuration de l'écran de recherche avancée

Admin menu system customform.png Custom form options.png

Choix des formulaires à afficher[ ]

En tant qu'administrateur, vous pouvez configurer les formulaires à afficher directement à partir de la clef à molette dans l'écran de recherche avancée. Custom form options.png

Le formulaire par défaut de Bokeh est affiché lorsqu'aucun formulaire n'est sélectionné ou si aucun formulaire sélectionné n'est valide.

Si vous êtes connecté en tant qu'administrateur Bokeh affichera toujours les formulaires sélectionnés pour vous permettre de les prévisualiser:

  • avec un message spécifiant que le formulaire n'est pas visible si c'est le cas
  • avec un message d'erreur si le fichier de description du formulaire n'est pas correct (cf. infra pour le format du fichier de description)

Propriétés des formulaires[ ]

Dans l'administration le menu "Système" > "Formulaires de recherche" vous permet d'accéder à la liste des formulaires personnalisés.

Admin searchform index.png

Vous pouvez ajouter et modifier vos formulaires à partir de cette liste.

Admin searchform edit.png

Un formulaire se compose d'un libellé obligatoire qui

  • permettra de le sélectionner dans la configuration de l'écran de recherche avancée
  • servira de libellé de l'onglet affichant le formulaire dans l'écran de recherche avancée

Il se compose aussi d'un fichier de définition obligatoire écrit en PHP et placé dans l'explorateur de fichier (cf. infra pour la description de ce fichier).

Il se compose enfin de la propriété "visible" vous permettant de publier ou dépublier le formulaire sur le site. Un formulaire non publié ne s'affiche que pour les administrateurs.

NB : pour pouvoir déposer des fichiers .php dans l'explorateur de fichier, vous devez ajouter l'extension .php dans la variable ALLOWED FILES EXTENSIONS FOR IMPORT

Format du fichier de description[ ]

ATTENTION: cette section nécessite des connaissances en programmations PHP

Le fichier de description d'un formulaire est au format PHP.

Un fichier de description valide reçoit une variable $form qui représente le formulaire à personnaliser.

Il s'agit d'un objet qui suit l'API de Zend_Form du Zend Framework 1.6 utilisé par Bokeh et lui ajoute des méthodes raccourcis pour faciliter la saisie.

Le script demande au formulaire d'ajouter ou retirer des éléments et des groupes d'éléments.

Exemple:

<?php
$form
  ->addElement('text', 'expressionRecherche', ['label' => 'Chercher partout'])
  ->addElement('hidden', 'type_doc', ['value' => 10])
  ->addUniqDisplayGroup('default', ['legend' => 'Critères']);

Explication:

  • ajoute un élément de type text, de nom "expressionRecherche" avec un libellé "Chercher partout"
  • ajoute un élément de type hidden, de nom "type_doc" avec une valeur de "10"
  • ajoute tous les éléments définis jusqu'ici dans un groupe d'élément dont la légende sera "Critères"

L'ajout d'un élément de formulaire se compose donc de 3 informations

  • le type d'élément à ajouter, doit exister dans bokeh
  • son nom, doit être compris par le moteur de recherche Bokeh
  • ses options qui varient selon le type

Les types d'éléments basiques[ ]

Tous les éléments basiques ont en commun les options:

  • label : libellé apparaissant à côté de l'élément
  • value : sa valeur lorsqu'on veut préremplir le champ

De plus, toute autre option inconnue de Bokeh sera rendue en tant qu'attribut html de l'élément de formulaire.

Ainsi, vous pouvez passer une option "maxlength" à un élément "text", Bokeh produira le html suivant:

<input type="text" maxlength="..."

text[ ]

Un simple champ de saisie de texte

select, radio[ ]

Un sélecteur, une suite de boutons radio ou de cases à cocher proposant de choisir dans une liste. La liste des choix possibles doit être passée en tant que tableau dans l'option "multiOptions". Pour chaque élément du tableau, la clé deviendra la valeur choisi, le contenu de la cellule deviendra le libellé visible. Par exemple:

<?php
$types = [
  '' => 'Tous',
  '1' => 'Livres',
  '2' => 'Périodiques'
];
$form->addElement('select', 'type_doc', ['label' => 'Type de document', 'multiOptions' => $types]);

Si vous passez l'option "value" avec une valeur faisant partie de la liste, elle sera préselectionnée.

checkbox[ ]

Une case à cocher. Par défaut la valeur non cochée est "0", la valeur cochée est "1". Vous pouvez modifier cela en utilisant les options "checkedValue" et "uncheckedValue".

On peut aussi faire en sorte que les cases soient cochées par défaut dans le formulaire ; pour cela, envoyer une "value". Exemple pour une sélection multicritères avec 2 cases, cochées par défaut :


<?php
$form->addElement('multiCheckbox', 'custom_multifacets',
                  ['label' => $form->_('Dans'),
                   'multiOptions' => ['T12' => 'Sélection1',
                                      'T21' => 'Sélection2'],
                   'autocomplete' => 'off',
                   'value' => ['T12', 'T21']
]); ?>

Types d'éléments avancés[ ]

Il s'agit d'éléments spécifiques au moteur de recherche Bokeh.

searchAxe[ ]

Élément proposant à la fois le choix d'un opérateur et la saisie d'un texte. Cet élément n'accepte pas d'option particulière mais il faut noter que l'option "value" sera sans effet.

range[ ]

Élément proposant la saisie de 2 valeurs. Il accepte les options spécifiques suivantes:

  • "separator" : texte devant s'afficher entre les 2 champs de saisie
  • "from_suffix" : texte ajouté à la fin du nom de champ pour le premier champ de saisie
  • "to_suffix": texte ajouté à la fin du nom de champ pour le second champ de saisie

Par exemple, si le nom de champ est "annee" et "from_suffix" est "_debut" alors le nom du premier champ de saisie sera "annee_debut". Il faut noter que l'option "value" sera sans effet pour cet élément.

cochesSuggestion[ ]

Élément proposant une aide à la saisie sur un grand nombre de cases à cocher pour certains types de données de Bokeh. Il accepte l'option spécifique "rubrique" qui doit préciser quel type de données proposer. Les types possibles sont :

  • type_doc
  • section
  • genre
  • langue
  • emplacement
  • nature_doc
  • bibliotheque
  • annexe
  • profile

listeSuggestion[ ]

Élément proposant une aide à la saisie sur un grand nombre d'éléments en proposant une recherche pour certains types de données de Bokeh. Il accepte l'option spécifique "rubrique" qui doit préciser quel type de données proposer. Les types possibles sont :

  • auteur
  • responsibility
  • matiere
  • interet
  • dewey
  • pcdm4
  • thesaurus
  • tag

Par exemple le code suivant:

<?php
$form->addElement('listeSuggestion', 'author',
                  ['label' => 'Auteur(s)',
                   'rubrique' => 'auteur');

Affichera l'élément suivant:

Customform author suggest.png


Suggestion sur une facette dynamique[ ]

Si on a une facette dynamique (ex: Sujet géographique) dont le code thésaurus est SUJE (soit un code facette HSUJE), alors le nom de l'élément doit reprendre le code thèsaurus SUJE avec rubrique thesaurus. Exemple:

$form->addElement('listeSuggestion', 
                  'SUJE',
                  ['label' => 'Sujet géographique',
                  'rubrique' => 'thesaurus']);


Mode de recherche sélectionné par défaut[ ]

L'option search_mode permet d'indiquer quel option du sélecteur de recherche est sélectionné par défaut ('Libellé commence par', 'Libellé contient', ...). Pour cela il faut passer la valeur de l'option. Par exemple pour sélectionner par défaut 'Libellé commence par' :

$form->addElement('listeSuggestion', 
                  'SUJE',
                  ['label' => 'Sujet géographique',
                  'rubrique' => 'thesaurus',
                  'search_mode' => 2]);

authority[ ]

Élément proposant la sélection d'une autorité en utilisant l'écran de recherche et navigation d'autorités décrit dans cette documentation.

Il accepte 2 options spécifiques permettant de paramétrer l'écran de recherche et navigation, à savoir:

  • facets : codes de facettes dynamiques filtrant les autorités affichées
  • tree_roots : identifiants 001 des notices d'autorités constituant les racines d'une arborescence à afficher

Ces 2 paramètres sont les mêmes que ceux acceptés par l'écran de recherche et navigation d'autorités.

L'utilisateur pourra choisir d'inclure ou pas les termes spécifiques de l'autorité lors de la recherche.

Par exemple le code suivant:

<?php
$form
  ->addElement('authority', 'auth',
               ['label' => 'Mot-clé',
                'facets' => 'HMOTS',
                'tree_roots' => '208660-208425-208347-208550']);

Affichera l'élément suivant:

Customform authority.png

Un clic sur le bouton choisir ouvrira l'écran de recherche d'autorités filtrés aux autorités liées à la facette dynamiques HMOTS et proposant une arborescence commençant par les 4 autorités dont les 001 correspondent à l'option tree_roots.

searchAxeMultiInput[ ]

Élément proposant la saisie d'une combinaison de critères avec choix des opérateurs.

Pour plus de détails voir la documentation de cet élément

Les critères compris par le moteur de recherche[ ]

Tous les critères possibles sont inscrits dans un objet Bokeh Class_CriteresRecherche.

Si vous ajoutez des éléments à votre formulaire dont le "name" n'est pas dans la liste des paramètres compris par Class_CriteresRecherche ils seront simplement ignorés.

De plus, certains critères ont une liste finie de valeurs possibles comprises par le moteur de recherche. Par exemple le critère de tri de la liste de résultat ne peut avoir comme valeur que

  • SORT_RELEVANCE = '*',
  • SORT_TITLE = 'alpha_titre',
  • SORT_AUTHOR = 'alpha_auteur',
  • SORT_PUBLICATION = 'annee desc',
  • SORT_DOCTYPE = 'type_doc,alpha_titre',
  • SORT_NOVELTY = 'date_creation desc',
  • SORT_VIEWS = 'nb_visu desc',

expressionRecherche[ ]

Un texte tel que saisi dans la recherche simple.

Exemple pour ajouter une recherche tous les champs de la recherche simple:

  ->addElement('text', 
               'expressionRecherche', 
                ['label' => $form->_("Tous les champs")])

rech_*, operateur_*[ ]

Texte dans les titres, auteurs, matieres, dewey, editeur, collection, correspond à un $form->addElement('searchAxe', 'titres') par exemple.


rech_thesaurus_*[ ]

Recherche dans les libellés d'une facette dynamique pour laquelle l'option Créer un axe de recherche plein texte sur les libelles est cochée. Le nom de l'élément doit être composé de rech_thesaurus_ suivi du code thésaurus sur lequel rechercher. Par exemple pour une facette dynamique Sujet géographique dont le code est SUJE :

 ->addElement('text',
              'rech_thesaurus_SUJE',
              ['label' => $form->_('Sujets géographiques')])

type_recherche[ ]

Précise comment traiter les termes saisis dans les champs de saisie textuels. Ne peut avoir comme valeur que:

  • fulltext : recherche fulltext mysql
  • commence : le champ commence par le texte saisi

Ceci ne s'applique que pour les axes de recherche "rech_*".

type_doc[ ]

Type de document, codification interne de Bokeh dont la liste s'obtient en appelant Class_TypeDoc::getMultiOptions()

nouveaute[ ]

Nombre de mois maximum depuis la date de nouveauté.

annee_debut, annee_fin[ ]

Année d'édition

annexe[ ]

Site du document, liste interne à Bokeh qui s'obtient en appelant Class_CodifAnnexe::getMultiOptions()

section[ ]

Section du document, liste interne à Bokeh qui s'obient en appelant Class_CodifSection::getMultiOptions()

genre[ ]

Genre du document, liste interne à Bokeh, correspond à $form->addElement('cochesSuggestion', 'genre', ['rubrique' => 'genre'])

langue[ ]

Langue du document, liste interne à Bokeh, correspond à $form->addElement('cochesSuggestion', 'langue', ['rubrique' => 'langue'])

cote_debut, cote_fin[ ]

Cote de l'exemplaire comprise entre ces deux valeurs, correspond à

<?php
$form->addElement('range', 'cote', 
                  ['label' => 'Cote entre',
                   'separator' => ' et ',
                   'from_suffix' => '_debut',
                   'to_suffix' => '_fin']);

library[ ]

Bibliothèque de rattachement d'un exemplaire, liste interne à Bokeh, correspond à $form->addElement('cochesSuggestion', 'library', ['rubrique' => 'bibliotheque'])

author[ ]

Liste multiple d'auteurs, liste interne à Bokeh, correspond à

<?php
$form->addElement('listeSuggestion', 'author', 
                  ['label' => 'Auteur(s)',
                   'rubrique' => 'auteur']);

subject[ ]

Matière / Sujet du document, liste interne à Bokeh, correspond à

<?php
$form->addElement('listeSuggestion', 'subject', 
                  ['label' => 'Matière(s)',
                   'rubrique' => 'matiere']);

dewey[ ]

Indice dewey du document, liste interne à Bokeh, correspond à

<?php
$form->addElement('listeSuggestion', 'dewey', 
                  ['label' => 'Indice(s) dewey',
                   'rubrique' => 'dewey']);

pcdm4[ ]

Indice PCDM4 du document, liste interne à Bokeh, correspond à

<?php
$form->addElement('listeSuggestion', 'pcdm4', 
                  ['label' => 'PCDM4',
                   'rubrique' => 'pcdm4']);

interest[ ]

Centre d'intéret du document, liste interne à Bokeh, correspond à

<?php
$form->addElement('listeSuggestion', 'interest', 
                  ['label' => 'Centre(s) d\'intérêt',
                   'rubrique' => 'interet']);

tag[ ]

Tag utilisateur du document, liste interne à Bokeh, correspond à

<?php
$form->addElement('listeSuggestion', 'tag', 
                  ['label' => 'Tags utilisateur',
                   'rubrique' => 'tag']);

location[ ]

Emplacement d'un exemplaire du document, liste interne à Bokeh, correspond à

<?php
$form->addElement('cocheSuggestion', 'location', 
                  ['label' => 'Emplacement(s)',
                   'rubrique' => 'emplacement']);

tri[ ]

Tri de la liste de résultat, ne peut avoir comme valeur que

  • SORT_RELEVANCE = '*',
  • SORT_TITLE = 'alpha_titre',
  • SORT_AUTHOR = 'alpha_auteur',
  • SORT_PUBLICATION = 'annee desc',
  • SORT_DOCTYPE = 'type_doc,alpha_titre',
  • SORT_NOVELTY = 'date_creation desc',
  • SORT_VIEWS = 'nb_visu desc'

Cette liste s'obtient en appelant (new Class_CriteresRecherche)->getListeTris()

page[ ]

Page courante de la liste de résultat

page_size[ ]

Nombre de résultat par page

in_files[ ]

Lorsque vous utilisez l'indexation des fichiers liés aux notices, ce paramètre mis à 1 active la recherche dans le contenu des fichiers.

Reproduire le formulaire par défaut[ ]

Plutôt que de partir d'un formulaire vide vous pouvez décidé de partir du formulaire par défaut et de l'adapter. L'objet $form fourni dispose d'une methode loadDefaults() qui reproduit le comportement du formulaire de recherche avancée par défaut. Le détail de cette construction est disponible dans le code source.

Par exemple:

<?php
$form->loadDefaults();
$form->removeElement('type_doc');
$form->addElement('hidden', 'type_doc', ['value' => 1]);

Explication:

  • charge les éléments par défaut
  • supprime l'élément par défaut qui propose la sélection du type de document
  • ajoute un élément caché qui force le type de document à 1 (Livres)

Limitations[ ]

Dans le fichier de description vous n'avez pas accès à toutes les fonctionnalités de PHP mais seulement à un sous-ensemble nécessaire à la définition des formulaires.

Si votre fichier contient des appels non autorisés le formulaire ne s'affichera pas pour les personnes non connectées et un message d'erreur s'affichera si vous êtes connecté en tant qu'administrateur.

Searchform forbidden call.png

Il en sera de même si votre fichier contient des erreurs de syntaxe.

Searchform syntax error.png

La liste des fonctionnalités autorisées est tenue dans library/Class/SearchForm/Validator.php et peut être amenée à évoluer.

Elle comprend toutes les fonctionnalités de PHP vous permettant de lire des données en y ajoutant des fonctions propres à Bokeh.

Appels possibles sur l'objet formulaire[ ]

  • $form->loadDefaults() ajoute tous les éléments et groupes d'éléments du formulaire par défaut
  • $form->addElement(string type, string name, array options) ajoute un élément au formulaire
  • $form->addDisplayGroup(array names, string id, array options) ajoute un groupe d'élément au formulaire
  • $form->addUniqDisplayGroup(string id, array options) ajoute un groupe d'élément au formulaire qui contiendra tous les éléments ajoutés jusqu'ici
  • $form->removeElement(string name) retire un élément précédemment ajouté au formulaire
  • $form->removeDisplayGroup(string name) retire un groupe d'élément précédemment ajouté au formulaire, les éléments ne sont pas retirés seulement leur regroupement

Appels possibles sur des modèles Storm[ ]

Storm est la couche d'accès à la base de données dans Bokeh, consultez la documentation pour en connaitre les principes.

Par exemple pour l'objet représentant la liste des annexes

  • Class_CodifAnnexe::find(mixed id) retourne l'annexe dont la clé primaire est id ou null si elle n'existe pas en base
  • Class_CodifAnnexe::findAll() retourne la liste complète des annexes sous forme de tableau dans leur ordre d'insertion en base, s'il n'y a pas d'annexe le tableau sera vide
  • Class_CodifAnnexe::findAllBy(array criteres) retourne la liste des annexes correspondant aux critères sous forme de tableau, s'il n'y en a pas le tableau sera vide
  • Class_CodifAnnexe::findFirstBy(array criteres) retourne la première annexe correspondant aux critères ou null s'il n'en existe aucune
  • Class_CodifAnnexe::countBy(array criteres) retourne le nombre d'annexes correspondant aux critères ou 0 s'il n'en existe aucune

Appels possibles sur des collections Storm[ ]

Lorsque que vous obtenez une liste d'objets Storm en resultat d'un appel à findAll ou findAllBy vous pouvez la passer à une collection Storm qui fournira des facilités supplémentaires pour travailler avec cette liste. Vous pouvez à tout moment obtenir un tableau PHP simple correspondant à la collection en appelant $collection->getArrayCopy()

Par exemple : $annexes = new Storm_Model_Collection(Class_CodifAnnexe::findAll());

  • $annexes->collect('id') retourne une collection contenant uniquement les identifiants des annexes
  • $annexes->select('isVisible') retourne une collection contenant uniquement les annexes pour lesquels l'appel à isVisible() retourne true
  • $annexes->reject('isVisible') retourne une collection contenant uniquement les annexes pour lesquels l'appel à isVisible() retourne false
  • $annexes->isEmpty() retourne true si la liste est vide
  • $annexes->first() retourne le premier objet de la liste
  • $annexes->includes(objet) retourne true si objet est dans la liste
  • $annexes->getArrayCopy() retourne un tableau simple PHP contenant les éléments de la liste

Appels spécifiques Bokeh[ ]

  • (new Class_CriteresRecherche)->getListeTris() retourne un tableau d'options possibles pour le tri de la liste de résultats
  • Class_TypeDoc::getMultiOptions() retourne un tableau d'options possibles pour les types de documents
  • Class_CodifSection::getMultiOptions() retourne un tableau d'options possibles pour les sections

Fonctions standard php[ ]

  • count() retourne le nombre d'élément d'un tableau php

Quelques exemples d'éléments de recherche à copier coller[ ]

Rechercher sur les titres[ ]

<?php $form->addElement('searchAxe', 'titres', ['label' => $form->_("Titres")]); ?>
<?php $form->addElement('text', 'titres', ['label' => $form->_("Titres")]); ?>

Affiner la recherche sur les titres[ ]

<?php $form->addElement('select', 'type_recherche',
                   ['label' => $form->_('Type de recherche sur les titres'),
                    'multiOptions' => ['fulltext' => $form->_('Recherche par mots contenus'),
                                       'commence' => $form->_('Commence par')]]); ?>
<?php $form->addElement('radio', 'type_recherche',
                   ['label' => $form->_('Type de recherche sur les titres'),
                    'multiOptions' => ['fulltext' => $form->_('Recherche par mots contenus'),
                                       'commence' => $form->_('Commence par')]]); ?>

Rechercher sur les auteurs[ ]

<?php $form->addElement('searchAxe', 'auteurs', ['label' => $form->_("Auteurs")]); ?>
<?php $form->addElement('text', 'auteurs', ['label' => $form->_("Auteurs")]); ?>

Rechercher sur les sujets[ ]

<?php $form->addElement('searchAxe', 'matieres', ['label' => $form->_("Sujets")]); ?>
<?php $form->addElement('text', 'matieres', ['label' => $form->_("Sujets")]); ?>

Rechercher sur les centres d'intérêt[ ]

<?php $form->addElement('searchAxe', 'dewey', ['label' => $form->_("Centres d'intérêt")]); ?>
<?php $form->addElement('text', 'dewey', ['label' => $form->_("Centres d'intérêt")]); ?>

Rechercher sur les éditeurs[ ]

<?php $form->addElement('searchAxe', 'editeur', ['label' => $form->_("Editeurs")]); ?>
<?php $form->addElement('text', 'editeur', ['label' => $form->_("Editeurs")]); ?>

Rechercher sur les collections[ ]

<?php $form->addElement('searchAxe', 'collection', ['label' => $form->_("Collections")]); ?>
<?php $form->addElement('text', 'collection', ['label' => $form->_("Collections")]); ?>

Filtrer à un type de document[ ]

Un select avec tous les documents :

<?php $form->addElement('select', 'type_doc', ['label' => $form->_("Type de document"), 'multiOptions' => Class_TypeDoc::getMultiOptions()]); ?>

Un radio avec tous les documents :

<?php $form->addElement('radio', 'type_doc', ['label' => $form->_("Type de document"), 'multiOptions' => Class_TypeDoc::getMultiOptions()]); ?>

Un select avec les documents "tous" et "livre" :

<?php $form->addElement('select', 'type_doc', ['label' => $form->_("Type de document"), 'multiOptions' => ['' => $form->_("Tous"), 1 => $form->_("livre")]]); ?>

Un radio avec les documents "tous" et "livre" :

<?php $form->addElement('radio', 'type_doc', ['label' => $form->_("Type de document"), 'multiOptions' => ['' => $form->_("Tous"), 1 => $form->_("livre")]]); ?>

Filtrer à une section[ ]

<?php $form->addElement('select', 'section',
                   ['label' => $form->_('Section'),
                    'multiOptions' => Class_CodifSection::getMultiOptions()]);
 ?>
<?php $form->addElement('radio', 'section',
                   ['label' => $form->_('Section'),
                    'multiOptions' => Class_CodifSection::getMultiOptions()]);
 ?>

Filtrer à la date de nouveauté[ ]

<?php $form->addElement('select', 'nouveaute',
                   ['label' => $form->_('Nouveautés de moins de'),
                    'multiOptions' => ['' => '',
                                       "1" => $form->_('1 mois'),
                                       "3" => $form->_('3 mois'),
                                       "6" => $form->_('6 mois'),
                                       "12" => $form->_('1 an'),
                                       "60" => $form->_('5 ans')]]); ?>
<?php $form->addElement('radio', 'nouveaute',
                   ['label' => $form->_('Nouveautés de moins de'),
                    'multiOptions' => ['' => '',
                                       "1" => $form->_('1 mois'),
                                       "3" => $form->_('3 mois'),
                                       "6" => $form->_('6 mois'),
                                       "12" => $form->_('1 an'),
                                       "60" => $form->_('5 ans')]]); ?>

Case à cocher et sélection des nouveautés[ ]

->addElement ('checkbox',
             'nouveaute',
             ['label' => $form->_('Est une nouveauté'),
             'checked' => '1', 'unChecked' => '0'])

Filtrer à la bibliothèque[ ]

<?php $possible = Class_CodifAnnexe::getMultiOptions();
    if (1 < count($possible))
      $form->addElement('select', 'annexe',
                        ['label' => $form->_('Bibliothèque'),
                         'multiOptions' => $possible]);
 ?>
<?php $possible = Class_CodifAnnexe::getMultiOptions();
    if (1 < count($possible))
      $form->addElement('radio', 'annexe',
                        ['label' => $form->_('Bibliothèque'),
                         'multiOptions' => $possible]);
 ?>

Filtrer aux genres[ ]

<?php $form->addElement('cochesSuggestion', 'genre',
                   ['label' => $form->_('Genres'),
                    'rubrique' => 'genre']);?>

Filtrer à la date de publication[ ]

<?php $form->addElement('range', 'annee',
                   ['label' => $form->_('Publié entre (Année sous forme 1980)'),
                    'separator' => $form->_('  et  '),
                    'from_suffix' => '_debut',
                    'to_suffix' => '_fin']); ?>

Filtrer à n'importe quelle facette[ ]

Attention : La configuration de cette élément de recherche est plus complexe.

Le simple copier coller ne fonctionnera pas.

Le terme "custom_multifacets_author" doit être unique dans votre formulaire.

Dans le cas où vous souhaitez ajouter un autre filtre sur des facettes il faudra remplacer le "author" par un texte différent.

Par exemple si vous souhaitez proposer un filtre sur des facettes de types de documents le texte devient "custom_multifacets_doctype".

Ensuite il faut configurer les "multiOptions". En effet chaque facette aura un code particulier et un libellé particulier.

Pour facilement repérer les facettes qui vous intéressent vous pouvez utiliser l'explorateur de codifications

Exemple pour proposer le filtre sur les auteurs Guillaume Musso et Françoise Bourdin :

<?php
$form->addElement('multiCheckbox', 'custom_multifacets_author',
                  ['label' => $form->_('Filtrer aux auteurs'),
                   'multiOptions' => ['A1' => 'Guillaume Musso',
                                               'A2' => 'Françoise Bourdin']]); ?>

Exemple pour proposer le filtre sur les types de documents Livres et DVD :

<?php
$form->addElement('multiCheckbox', 'custom_multifacets_doctype',
                  ['label' => $form->_('Filtrer aux types de documents'),
                   'multiOptions' => ['T1' => $this->_('Livres'),
                                               'T2' => $this->_('DVD')]]); ?>


Filtrer via des listes déroulantes sur des facettes dynamiques[ ]

L'élément selectDynamicFacet permet de proposer une liste déroulantes sur les facettes dynamiques. Par exemple, si Bokeh a été configuré avec des facettes dynamiques dont les codes sont: ANNE, MOIS, JOUR, vous pouvez composer le formulaire comme ceci:

$form
  ->addElement('selectDynamicFacet',                                                                                                                                                                               
               'rech_HANNE',                                                                                                                                                                                       
               ['label' => 'année de publication'])                                                                                                                                                                
                                                                                                                                                                                                                   
  ->addElement('selectDynamicFacet',                                                                                                                                                                               
               'rech_HMOIS',                                                                                                                                                                                       
               ['label' => 'mois de publication'])                                                                                                                                                                 
                                                                                                                                                                                                                   
  ->addElement('selectDynamicFacet',                                                                                                                                                                               
               'rech_HJOUR',                                                                                                                                                                                       
               ['label' => 'jour de publication']);

Cela proposera les éléments de la manière suivante:

Search form select dynamic facet.png

Choisir le tri du résultat de la recherche[ ]

<?php $form->addElement('select', 'tri',
                   ['label' => $form->_('Trier par'),
                    'multiOptions' => (new Class_CriteresRecherche())->getListeTris()]);
 ?>
<?php $form->addElement('radio', 'tri',
                   ['label' => $form->_('Trier par'),
                    'multiOptions' => (new Class_CriteresRecherche())->getListeTris()]);
 ?>

Comment afficher correctement mes éléments de recherche[ ]

Pour que le formulaire de recherche soit correctement aligné, vous devez impérativement ajouter cette ligne à la fin de votre fichier.

<?php $form->addUniqDisplayGroup('recherche_avancee'); ?>

Exemple de fichier complet[ ]

<?php                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
$form                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
  ->addElement('searchAxe',                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
               'titres',                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
               ['label' => $form->_("Titres")])                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
  ->addElement('radio',                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
               'type_recherche',                                                                                                                                                                                                                                                                                                                                                                                                                                                            
               ['label' => $form->_('Type de recherche sur les titres'),                                                                                                                                                                                                                                                                                                                                                                                                                    
                'multiOptions' => ['fulltext' => $form->_('Recherche par mots contenus'),                                                                                                                                                                                                                                                                                                                                                                                                   
                                   'commence' => $form->_('Commence par')]])                                                                                                                                                                                                                                                                                                                                                                                                                
  ->addElement('searchAxe',                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
               'auteurs',                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
               ['label' => $form->_("Auteurs")])                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
  ->addElement('searchAxe',                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
               'matieres',                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
               ['label' => $form->_("Sujets")])                                                                                                                                                                                                                                                                                                                                                                                                                                             
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
  ->addElement('searchAxe',                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
               'dewey',                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
               ['label' => $form->_("Centres d'intérêt")])                                                                                                                                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
  ->addElement('text',                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
               'editeur',                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
               ['label' => $form->_("Editeurs")])                                                                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
  ->addElement('text',                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
               'collection',                                                                                                                                                                                                                                                                                                                                                                                                                                                                
               ['label' => $form->_("Collections")])                                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
  ->addElement('select',                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
               'type_doc',                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
               ['label' => $form->_("Type de document"),                                                                                                                                                                                                                                                                                                                                                                                                                                    
                'multiOptions' => Class_TypeDoc::getMultiOptions()])                                                                                                                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
  ->addElement('select',                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
               'section',                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
               ['label' => $form->_('Section'),                                                                                                                                                                                                                                                                                                                                                                                                                                             
                'multiOptions' => Class_CodifSection::getMultiOptions()])                                                                                                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
  ->addElement('select',                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
               'nouveaute',                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
               ['label' => $form->_('Nouveautés de moins de'),                                                                                                                                                                                                                                                                                                                                                                                                                              
                'multiOptions' => ['' => '',                                                                                                                                                                                                                                                                                                                                                                                                                                                
                                   "1" => $form->_('1 mois'),                                                                                                                                                                                                                                                                                                                                                                                                                               
                                   "3" => $form->_('3 mois'),                                                                                                                                                                                                                                                                                                                                                                                                                               
                                   "6" => $form->_('6 mois'),                                                                                                                                                                                                                                                                                                                                                                                                                               
                                   "12" => $form->_('1 an'),                                                                                                                                                                                                                                                                                                                                                                                                                                
                                   "60" => $form->_('5 ans')]]);                                                                                                                                                                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
$possible = Class_CodifAnnexe::getMultiOptions();                                                                                                                                                                                                                                                                                                                                                                                                                                           
if (1 < count($possible))                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
  $form->addElement('select',                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                    'annexe',                                                                                                                                                                                                                                                                                                                                                                                                                                                               
                    ['label' => $form->_('Bibliothèque'),                                                                                                                                                                                                                                                                                                                                                                                                                                   
                     'multiOptions' => $possible]);                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
$form                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
  ->addElement('cochesSuggestion',                                                                                                                                                                                                                                                                                                                                                                                                                                                          
               'genre',                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
               ['label' => $form->_('Genres'),                                                                                                                                                                                                                                                                                                                                                                                                                                              
                'rubrique' => 'genre'])                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
  ->addElement('range',                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
               'annee',                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
               ['label' => $form->_('Publié entre (Année sous forme 1980)'),                                                                                                                                                                                                                                                                                                                                                                                                                
                'separator' => $form->_('  et  '),                                                                                                                                                                                                                                                                                                                                                                                                                                          
                'from_suffix' => '_debut',                                                                                                                                                                                                                                                                                                                                                                                                                                                  
                'to_suffix' => '_fin'])                                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
  ->addElement('select',                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
               'tri',                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
               ['label' => $form->_('Trier par'),                                                                                                                                                                                                                                                                                                                                                                                                                                           
                'multiOptions' => (new Class_CriteresRecherche())->getListeTris()])                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
  ->addElement('selectDynamicFacet',                                                                                                                                                                                                                                                                                                                                                                                                                                                        
               'rech_HANNE',                                                                                                                                                                                                                                                                                                                                                                                                                                                                
               ['label' => 'année de publication'])                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
  ->addElement('selectDynamicFacet',                                                                                                                                                                                                                                                                                                                                                                                                                                                        
               'rech_HMOIS',                                                                                                                                                                                                                                                                                                                                                                                                                                                                
               ['label' => 'mois de publication'])                                                                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
  ->addElement('selectDynamicFacet',                                                                                                                                                                                                                                                                                                                                                                                                                                                        
               'rech_HJOUR',                                                                                                                                                                                                                                                                                                                                                                                                                                                                
               ['label' => 'jour de publication'])                                                                                                                                                                                                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            
  ->addUniqDisplayGroup('recherche_avancee');         

Rendu:

Search form full.png

Formulaire de recherche avancée identique à celui par défaut[ ]

Si vous souhaitez modifier le formulaire existant par défaut de Bokeh, vous pouvez partir de ce code ci-dessous:

<?php
$form
  ->addElement('searchAxe',
               'titres',
               ['label' => $form->_("Titres")])


  ->addElement('searchAxe',
               'auteurs',
               ['label' => $form->_("Auteurs")])

  ->addElement('searchAxe',
               'matieres',
               ['label' => $form->_("Sujets")])

  ->addElement('searchAxe',
               'dewey',
               ['label' => $form->_("Centres d'intérêt")])

  ->addElement('searchAxe',
               'editeur',
               ['label' => $form->_("Editeurs")])

  ->addElement('searchAxe',
              'collection',
              ['label' => $form->_("Collections")])

// type de recherche

->addElement('select',
             'type_recherche',
             ['label' => $form->_('Type de recherche'),
              'multiOptions' => ['fulltext' => $form->_('Recherche par mots contenus'),
                                 'commence' => $form->_('Commence par')]])

// trier par
->addElement('select',
             'tri',
             ['label' => $form->_('Trier par'),
              'multiOptions' => (new Class_CriteresRecherche())->getListeTris()])

// publié entre
->addElement('range',
             'annee',
             ['label' => $form->_('Publié entre (Année sous forme 1980)'),
              'separator' => $form->_('  et  '),
              'from_suffix' => '_debut',
              'to_suffix' => '_fin'])

// nouveautés de moins de
->addElement('select',
             'nouveaute',
             ['label' => $form->_('Nouveautés de moins de'),
              'multiOptions' => ['' => '',
                                 "1" => $form->_('1 mois'),
                                 "3" => $form->_('3 mois'),
                                 "6" => $form->_('6 mois'),
                                 "12" => $form->_('1 an'),
                                 "60" => $form->_('5 ans')]])
// type de document
->addElement('select',
             'type_doc',
             ['label' => $form->_("Type de document"),
              'multiOptions' => Class_TypeDoc::getMultiOptions()])

// site

// section

  ->addElement('select',
               'section',
               ['label' => $form->_('Section'),
                'multiOptions' => Class_CodifSection::getMultiOptions()]);

// genres

$possible = Class_CodifAnnexe::getMultiOptions();
if (1 < count($possible))
  $form->addElement('select',
                    'annexe',
                    ['label' => $form->_('Site'),
                     'multiOptions' => $possible]);

$form
  ->addElement('cochesSuggestion',
               'genre',
               ['label' => $form->_('Genres'),
                'rubrique' => 'genre'])



  ->addUniqDisplayGroup('recherche_avancee');