4,395
edits
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('''" | ||
= | = 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 = | ||