4,395
edits
(Created page with "{{TemplateDocDevEs}} {{ToTranslate}} Hooks is a developer feature to allow developer to add personalized code intod Dolibarr core code with no need to patch Dolibarr. On the con...") |
No edit summary |
||
| Line 1: | Line 1: | ||
{{TemplateDocDevEs}} | {{TemplateDocDevEs}} | ||
Hooks | Hooks es una funcionalidad de desarrollo que permite a los desarrolladores agregar código personalizado en el código del núcleo de Dolibarr sin necesidad de parchear Dolibarr. | ||
Al contrario que los triggers (otra funcionalidad para interactuar con el código de Dolibarr) que están vinculados a una acción de negociado, los hooks pueden producirse en cualquier lugar y en cualquier momento, son un punto de entrada en el programa. | |||
* Hooks | * Hooks trabaja por contexto (es decir por módulo, ej: "productcard" para productos, "invoicecard" para facturas, etc.). Es fácil de encontrar, solo hay que burcar por "'''callHooks('''" | ||
* Hooks | * Hooks son funciones que pueden ser sobrecargadas por las suyas propias. Usted es el que decide si su código se añade al código estandar de Dolibarr o si reemplaza al código de Dolibarr. Puede encontrar funciones sobrecargables buscando por "'''executeHooks('''" | ||
= | = Implementaición = | ||
Para usar un hook (sobrecarga de una función), debe de haber definido un módulo antes (vea la wiki para ello), y entonces tiene que hacer 2 cosas: | |||
1- | 1- Añadir su módulo a los hooks del contexto que desee. | ||
Esto significa que cuando este contexto (módulo) va a suceder, el módulo será llamado. | |||
Para ello edite su /htdocs/includes/modSuModulo.class.php y edite la variable $this->const con algo como esto: | |||
<source lang="php"> | <source lang="php"> | ||
$this->const = array( | $this->const = array( 0=>array('MAIN_MODULE_SUMODULO_HOOKS', 'chaine', 'productcard:invoicecard:propalcard', 'Hooks list for managing printing functions of the CustomFields module', 0); | ||
</source> | </source> | ||
Por supuesto, cambie SuModulo por el nombre de su módulo. | |||
No toque 'chaine': define el tipo de la constante. | |||
Entonces obtendrá un valor en el tercer índice, una cadena con los contextos separados por una coma. | |||
''' | '''IMPORTANTE''': Tenga cuidado: No olvide DESACTIVAR y luego ACTIVAR el módulo en el panel de administración para aceptar los nuevos valores de las constantes, ya que estas constantes solo se añaden a la base de datos cuando se activa el módulo. | ||
Y tenga en cuenta que la constante se actualiza porque se encuentra en la función remove() del mismo archivo, que le dice a Dolibarr que elimine las constantes en la desactivación del módulo, de lo contrario Dolibarr no actualiza las constantes si no se elimina primero (incluso si los valores han cambiado). Su función remove() debería ser algo similar a esto: | |||
<source lang="php"> | <source lang="php"> | ||
/** | |||
* Function called when module is disabled. | |||
* Remove from database constants, boxes and permissions from Dolibarr database. | |||
* Data directories are not deleted. | |||
* @return int 1 if OK, 0 if KO | |||
*/ | |||
function remove() | |||
{ | |||
$sql = array("DELETE FROM ".MAIN_DB_PREFIX."const WHERE name like '%_mymodulename' OR name like '%_mymodulename_%';"); | |||
return $this->_remove($sql); | |||
} | |||
</source> | </source> | ||
2- | 2- Sobrecargar un hook (una función) con la suya propia. | ||
Cree un archivo '''/htdocs/''sumodulo''/class/actions_''sumodulo''.class.php''' y luego escriba algo como esto: | |||
<source lang="php"> | <source lang="php"> | ||
class ActionsYourModuleName // extends CommonObject | class ActionsYourModuleName // extends CommonObject | ||
{ | { | ||
| Line 62: | Line 55: | ||
* @return void | * @return void | ||
*/ | */ | ||
function doActions($parameters, $object, $action) { | function doActions($parameters, $object, $action) | ||
{ | |||
print_r($parameters); | print_r($parameters); | ||
echo "action: ".$action; | echo "action: ".$action; | ||
print_r($object); | print_r($object); | ||
if ($parameters->context == 'somecontext') { | if ($parameters->context == 'somecontext') | ||
// do something only for the context 'somecontext'} | { | ||
// do something only for the context 'somecontext' | |||
} | |||
} | |||
} | |||
</source> | </source> | ||
donde | |||
* $parameters | * '''$parameters''' es un array de meta-datos acerca de los datos contenidos en el hook (ej: el contexto, siempre accesible mediante $parameters->context). | ||
* $object | * '''$object''' es el objeto con el que va a trabajar. Ej: el producto si se encuentra en el contexto productcard. | ||
* $action | * '''$action''' es la acción si se ha enviado alguna (generalmente "create", "edit" o "view"). | ||
Su función debería llamarse cuando se acceda al módulo/contexto y podrá ver los parámetros, el objeto y la acción. | |||
= Listado de Hooks disponibles = | |||
{{ToComplete}} | |||
* '''formObjectOptions''': llamado cada vez que los campos asociados al objeto principal son impresos o introducidos (ej: creation form, datasheet, edit form, etc.). | |||
¿Cómo encontrar hooks disponibles? | |||
Realice una búsqueda de "'''executeHooks('''" y le será fácil encontrar las llamadas a los métodos Hook. | |||