Ir al contenido
Docs

Guía para desarrolladores

Eventos (triggers)

El núcleo y cada módulo disparan eventos (triggers) antes y después de sus acciones principales. Los módulos de terceros se enganchan ahí para ampliar el comportamiento sin modificar el núcleo.

Cómo funciona

  • La mayoría de los eventos se disparan dos veces, como un par before y after.
  • before: antes de ejecutar la tarea. Si el handler devuelve un error (un BaseObject fallido), puede detener la tarea.
  • after: después de completar la tarea. Normalmente se ignora el valor de retorno. Se usa para el procesamiento posterior (envío de notificaciones, actualización de caché, etc.).

Registrar un handler

Decláralo en module.xml y se registra al ejecutar la actualización del módulo.

<eventHandlers>
	<eventHandler before="document.insertDocument" class="Controllers\Trigger" method="beforeInsertDocument" />
	<eventHandler after="document.insertDocument" class="Controllers\Trigger" method="afterInsertDocument" />
</eventHandlers>
<?php

namespace Zittme\Modules\Mymodule\Controllers;

class Trigger extends Base
{
	// $obj 에 대상 데이터(문서 등)가 참조로 들어옵니다
	public function afterInsertDocument(&$obj)
	{
		try
		{
			// 예: 새 글 등록 시 외부 알림
		}
		catch (\Throwable $e)
		{
			// 전역 트리거에서 내 모듈 사정으로 코어를 죽이지 않는다
		}
	}
}

Eventos principales

La lista completa es enorme, así que solo anotamos los representativos de cada categoría. La regla de nombres es module.action.

Ciclo de vida de la solicitud

EventoMomento
moduleHandler.initPreparación del procesamiento de la solicitud
moduleObject.procAntes y después de ejecutar la acción
act:module.actionNameEngancharse a una acción concreta
displayJusto antes de la salida final

Documentos y comentarios

document.insertDocument document.updateDocument document.deleteDocument document.moveDocumentToTrash document.getDocumentList / comment.insertComment comment.updateComment comment.deleteComment, etc.

Miembros

member.insertMember member.updateMember member.deleteMember member.doLogin member.doLogout member.addMemberToGroup, etc.

Archivos y otros

file.insertFile file.deleteFile file.downloadFile / communication.sendMessage / point.setPoint / menu.getModuleListInSitemap (para que tu módulo aparezca en la lista de módulos de la pantalla de agregar menú)

Cómo encontrar el evento exacto

El código es más exacto que la documentación. Busca directamente en el núcleo dónde se dispara el evento.

grep -rn "triggerCall('찾을이름" modules/ classes/

En la llamada ModuleHandler::triggerCall('name', 'before|after', $obj) puedes ver exactamente qué datos se pasan en $obj.

Reglas para escribir handlers

  • El handler se ejecuta en cada una de las acciones correspondientes. Mantenlo ligero y haz el trabajo pesado solo después de acotar las condiciones.
  • No lances excepciones hacia fuera. Las acciones del núcleo, como publicar o iniciar sesión, no deben caerse por problemas de tu módulo.
  • Devuelve un error solo cuando quieras detener la tarea en before, y no dependas del valor de retorno en after.