17.8.4 Recherche spécialisée
Pour toute recherche non prévue en standard par l'interface, il est possible de programmer des recherches spécifiques. Elles pourront ensuite être utilisées comme une recherche “normale” depuis l'interface grâce à la famille “recherche spécialisée”. Lorsque vous éditez une recherche spécialisée, vous devez renseigner
-
le fichier php où se trouve la fonction de recherche.
Ce fichier devra être dans le répertoire
EXTERNALS
du contexte. -
Le nom de cette fonction.
Cette fonction prend les 3 arguments suivants :
- start : start index pour la recherche,
- slice : nombre max d'éléments à retourner,
- userid : utilisateur courant.
Des arguments supplémentaires peuvent également être fournis.
Exemple : fichier EXTERNALS/mytest.php
:
namespace My; /** * function use for specialised search * return all document tagged TOVIEWDOC by current user * * @param int $start start cursor * @param int $slice offset ("ALL" means no limit) * @param int $userid user system identifier (NOT USED in this function) */ function myToViewTags($start="0", $slice="ALL", $userid=0) { $tag="TOVIEWDOC"; $s=new \SearchDoc(); $s->setObjectReturn(false); $s->join("id = docutag(id)"); $s->setSlice($slice); $s->setStart($start); $s->addFilter("docutag.uid = %d",$userid); $s->addFilter("docutag.tag = '%s'",$tag); return $s->search(); }
17.8.4.1 Enregistrement d'une recherche spécialisée
L'enregistrement se fait en créant un document de la famille SSEARCH
. Les
attributs se_phpfile
et se_phpfunc
permettent d'indiquer la fonction à
utiliser.
use \Dcp\AttributeIdentifiers as Attribute; /** * @var \Dcp\Family\Ssearch $rd */ $sd = createDoc("", \Dcp\Family\Ssearch::familyName); $sd->setValue(Attribute\Ssearch::ba_title, "Search TOVIEWDOC Tag"); $sd->setValue(Attribute\Ssearch::se_phpfile, "mytest.php"); // EXTERNALS/mytest.php $sd->setValue(Attribute\Ssearch::se_phpfunc, "My\\myToViewTags"); $sd->store();
17.8.4.2 Arguments supplémentaires de la fonction
Des arguments supplémentaires peuvent être ajoutés dans l'attribut 'Argument
PHP' (se_phparg
). Il sont ajoutés dans l'appel à partir de la quatrième
position. Pour rajouter plusieurs arguments, il faut les séparer par une virgule
(exemple : 1234,ceci est un test,dernier argument
).
Dans ces arguments, il est possible de référencer
-
N'importe quel attribut ou propriété du document recherche lui même, au moyen de la notation
%ATTRID%
ou%PROPID%
.Par exemple,
%TITLE%
pour avoir le titre de la recherche, ou%SE_IDCFLD%
pour avoir l'identifiant du dossier dans lequel s'exécute la recherche. L'objet recherche lui-même au moyen du mot clé
%THIS%
.
17.8.4.3 Retour de la fonction
La fonction de recherche doit retourner un tableau de documents bruts ( type
array
et non object
). Ce type est celui retourné par la classe SearchDoc
en
utilisant la méthode ::setObjectReturn(false)
.