member.insertMember
위와 같이 모듈명이 명시된 경우 명시된 모듈에서 제공하는 트리거호출 시점에 내가 만든 함수가 작동되도록 하겠다라는 의미로 해석이 됩니다.
그런데 모듈명이 없는
display 와 같은 경우가 등장합니다.
이해를 해보려고 검색을 하는 과정에서 발견한 문서가
https://xetown.com/tips/1556223
위 문서인데 여기에 설명에서
\DisplayHandler->printContent()
의 부분이라고 되어 있던데요.
저 함수에서 전,후 트리거가 실행이 된다는 것인거죠??
실제로 저 함수를 찾아보니
/classes/display/DisplayHandler.class.php
public function printContent(&$oModule)
이 부분이고 여기 함수 내
// call a trigger before display
ModuleHandler::triggerCall('display', 'before', $output);
// call a trigger after display
self::$response_size = $this->content_size = strlen($output);
ModuleHandler::triggerCall('display', 'after', $output);
부분이 등장하네요.
특정 모듈인 경우 해당모듈명.트리거명
그렇지 않은 경우 트리겨명
이렇게 된건로 보이는데 맞겠죠??
그럼 특정모듈이 아닌 곳에서 제공되는 트리거는 제가 위에 언급한 문서에 등장하는
moduleHandler.init - before
moduleHandler.init - after
moduleObject.proc - before
moduleObject.proc - after
layout - before
display - before
display - after
7가지 케이스가 전부인가요?
이름은 트리거와 아무 관련 없습니다. 마음만 먹으면 'asdfasdf1234' 같은 트리거명도 사용 가능합니다.
다만 일부 케이스 제외 그렇게 하지 않는 이유는 모듈명을 붙이지 않는 경우 충돌이 생길수 있기 때문입니다.(덤으로 혼동이 생길 우려도 있습니다) 예를 들어 복권 모듈에서 lotto 트리거명을 사용했는데 댓글 랜덤추첨 모듈에서도 같은 트리거명을 사용한다면 복권 정보를 받는 자료가 갑자기 댓글 정보를 받게 되는 일이 생길수 있는 것입니다.
참고로 트리거 동작 순서는 다음과 같습니다.
자료에서 triggerCall로 특정 이름의 트리거 호출 -> 서드파티 자료에서 insertTrigger로 등록한 함수 순차 호출 -> 특성에 따라 반환값 확인후 진행 중단 혹은 계속