El sistema Hooks: Difference between revisions

Jump to navigation Jump to search
no edit summary
No edit summary
Line 7: Line 7:
* 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('''"
* 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('''"


= Implementación =
= Añadir un hook para permitir la inserción de código =
Para implementar un hook en su propio módulo (para que su módulo pueda ser "hookeado" por otros), deberá realizar dos pasos.
 
Estos pasos deben ser reproducidos para cada script php de su módulo donde quiera implementar los hooks.
 
1- Inicializar el objeto HookManager (ponga este código al inicio de su script php, justo después o antes de los lincludes):
 
<source lang="php">
// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
include_once(DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php');
$hookmanager=new HookManager($db);
$hookmanager->initHooks(array('context'));
</source>
 
$hookmanager->initHooks() acepta un parámetro (un array de contextos) y activa la carga de los hooks para este script:
 
- ''''context'''' est la cadena que contiene el contexto de ejecución. Es un simple indicador que puede ser usado por las funciones hook para detectar en que caso son llamadas (varias páginas/módulos pueden llamar al mismo hook en diferentes lugares, y una función de hook puede no querer ejecutarse para ciertos contextos).
 
Nota: Puede posicionar varios contextos al mismo tiempo (por ejemplo si necesita un contexto común para varias páginas pero también quiere un contexto específico para una determinada página).
 
 
2- Colocar a continuación la llamada a los hooks que permiten la adición de código:
 
<source lang="php">
$parameters=array();
$reshook=$hookmanager->executeHooks('hookname',$parameters,$object,$action); // See description below
// Note that $action and $object may have been modified by hook
</source>
 
'''$hookmanager->executeHooks()''' acepta 4 parámetros y añade un hook (que es un punto de entrada a su script para las funciones externas a su script y módulo):
 
- ''''hookname'''' es el nombre del método que será llamado. Por ejemplo: 'formObjectOptions'
 
- '''$parameters''' es un array para enviar datos al hook (la función hooking function puede procesarlos). Cree todo lo que necesite, puede ser un archivo, un array de strings, cualquier cosa.. Por ejemplo:
<source lang="php">
$parameters=array('file'=>'my/path/to/a/file', 'customnames'=>array('henry','david','john'));
</source>
 
- '''$object''' es el objeto al que hay que pasarle la funcion hooking, principalmente el actual módulo de datos (ej: objeto factura si es el módulo de facturas, etc..). Puede ser lo que quiera, pero recuerde que será el componente principal de las funciones hooking que vaya a usar.
 
- '''$action''' es un string que indica la acción actual (puede ser null o algo más claro como 'create' o 'edit').
 
Nota: Tendrá que repetir este paso varias veces si desea agregar varios hooks en diferentes lugares en el script.
 
Ahora su módulo debería poder ser hookeado, puede seguir los pasos de '''Implementar un hook" para implementar una función a usar (permite también comprobar que funcione).
 
= Implementar un hook =
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:
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:


Line 55: Line 101:
}  
}  
</source>
</source>
El método será llamado automáticamente llamado en el momento de la llamada del código que contiene el executeHooks con el paso de los elementos $parameters, $object y $action.


'''Donde''':
'''Donde''':
Line 60: Line 107:
* '''$object''' es el objeto con el que va a trabajar. Ej: el producto si se encuentra en el contexto productcard.
* '''$object''' es el objeto con el que va a trabajar. Ej: el producto si se encuentra en el contexto productcard.
* '''$action''' es la acción si se ha enviado alguna (generalmente "create", "edit" o "view").
* '''$action''' es la acción si se ha enviado alguna (generalmente "create", "edit" o "view").
* '''$hookmanager''' es propagado para permitir a su hook llamar a otros hooks.


= Listado de Hooks disponibles =
= Listado de Hooks disponibles en Dolibarr =
¿Cómo encontrar hooks disponibles?  
¿Cómo encontrar hooks disponibles?  
Realice una búsqueda de "'''executeHooks('''" y le será fácil encontrar las llamadas a los métodos Hook.
Realice una búsqueda de "'''executeHooks('''" y le será fácil encontrar las llamadas a los métodos Hook.
Line 67: Line 115:
{{ListOfHooks}}
{{ListOfHooks}}
...
...
= Listado de Contextos disponibles en Dolibarr =
Para encontrar los contextos disponibles en Dolibarr, el proceso es similar a los hooks.
Haga una búsqueda de "'''initHooks('''" en el código fuente y encontrará fácilmente todos los contextos ya implementados
Viendo este listado (no completo):
{{ListOfContexts}}
...
Nota: Tenga en cuenta que esta lista puede cambiar en cualquier momento en el futuro a medida que los hooks y los contextos se implementen en Dolibarr, así que si realmente quiere saber si un determinado contexto o hook existe, por favor busque directamente en el código fuente con el método indicado anteriormente.


= Vea también =
= Vea también =

Navigation menu