Est-il possible avec un nouveau module d’ajouter dans la zone de recherche de gauche une nouvelle entrée pour faire des recherches sur un autre champ (ex : recherche sur les factures).
Je n’ai rien vu dans la doc ni dans le forum à ce sujet
Apparemment, cette gestion est faite en dure dans le fichier main.inc.php
En fait les hooks permettent d’exécuter du code n’importe où dans Dolibarr. Et pour savoir à quel endroit le code doit être exécuté, les hooks utilisent cette notion de contextes qui sont tous simplement des repères sur les pages de Dolibarr. Par exemple, la fiche d’une facture est repérée par le contexte ‹ invoicecard ›, celle d’un membre par ‹ membercard ›, etc…
Tous ces contextes sont définis durant l’initialisation de Dolibarr par appel à la fonction « initHooks ». C’est Dolibarr qui gère cette initialisation, pas vous.
Dans votre cas, vous souhaitez rajouter un bloc de recherche sur la gauche. Ces blocs de recherche sont initialisés dans la fonction left_menu de main.inc.php. Dans cette fonction, on trouve l’appel à initHooks suivant :
Il y a donc deux contextes ici : ‹ searchform › (qui définit le repère associé aux blocs de recherche) et ‹ leftblock › qui est le bloc situé en-dessous.
Seul le contexte ‹ searchform › nous est utile donc lors de la définition du module on spécifie :
Pour la première partie, c’est très claire (merci pour les explications), mais je ne comprend pas comment je dois nommer ma fonction pour qu’elle s’exécute.
Si je regarde dans ‹ main.inc.php › la fonction ‹ left_menu ›, je vois cette ligne :
Dans le fichier « htdocs/monmodule/code/module/modMonModule.class.php », j’ai mis cette ligne « $this->module_parts = array(‹ hooks › => array(‹ searchform ›)); »
J’ai créé le « fichier "monmodule/class/actions_yourmodulename.class.php » avec la fonction « printSearchForm » mais je ne comprend pas comment est appelé cette fonction étant donné que je n’indique nul part le nom de cette class
va dire à dolibarr que le module « monmodule » fait appel au contexte « searchform »
une foi que ce contexte est appelé, il va vérifier si la classe « /monmodule/class/actions_monmodule.class.php » existe, si oui il charge la classe « ActionsMonmodule », ensuite lorsqu’il rencontre le hook « printSearchForm », il vérifie si cette méthode existe dans la classe, si oui il l’exécute.
Pour avoir un peu cherché sur le sujet des hook et en particuliers celui de recherche, je post ici le bout de code que j’ai finalement utilisé pour ajouter à mon module la recherche par numéro de série d’un équipement.
1 ajouter dans la classe de déclaration du module la ligne suivante :
$this->module_parts = array(‹ hooks › => array(‹ searchform ›));
2 créer un fichier action_mymodule.class.php dans le dossier où se trouve déjà les classes de votre module
3 voici le hook codé pour réaliser une recherche sur le numéro de série de l’équipement :
/*\* Overloading the doActions function : replacing the parent's function with the one below
\* @param parameters meta datas of the hook (context, etc...)
\* @param object the object you want to process (an invoice if you are in invoice module, a propale in propale's module, etc...)
\* @param action current action (if set). Generally create or edit or null
\* @return void
*/
function printSearchForm($parameters, $object, $action)
{
global $conf,$langs;
$langs-\>load("equipement");
$title = img_object('','equipement').' '.$langs-\>trans("Equipements");
$ret='';
$ret.='<div class="menu_titre"\>';
$ret.='<a class="vsmenu" href="'.DOL_URL_ROOT.'/equipement/list.php'.'"\>';
$ret.=$title.'</a\><br\>';
$ret.='</div\>';
$ret.='<form action="'.DOL_URL_ROOT.'/equipement/list.php'.'" method="post"\>';
$ret.='<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'"\>';
$ret.='<input type="hidden" name="mode" value="search"\>';
$ret.='<input type="text" class="flat" ';
if (! empty($conf-\>global-\>MAIN_HTML5_PLACEHOLDER)) $ret.=' placeholder="'.$langs-\>trans("SearchOf").''.strip_tags($title).'"';
else $ret.=' title="'.$langs-\>trans("SearchOf").''.strip_tags($title).'"';
$ret.=' name="search_ref" size="10" /\> ';
$ret.='<input type="submit" class="button" value="'.$langs-\>trans("Go").'"\>';
$ret.="</form\>\n";
return $ret;
}
}[/code]
Je n’ai en fait que repris la fonction printSearchForm générique que j’ai adapté pour ma recherche spécifique. il doit être possible d’utiliser la fonction générique dans le hook mais comme les deux on le même nom…