1. XpressEngine 애드온에서 트리거 사용하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<?php
if(!defined('__XE__'))
{
exit();
}
if(!class_exists('addon_wst_addon_nameController'))
{
class addon_wst_addon_nameController
{
function triggerBeforeInsertDocument($args)
{
// Trigger Code...
return $args;
}
}
}
// 컨트롤러 클래스 로드
$GLOBALS['_loaded_module']['addon_wst_addon_name']['controller']['svc'] = new addon_wst_addon_nameController();
// 트리거 등록
$trigger = new stdClass();
$trigger->trigger_name = 'document.insertDocument';
$trigger->called_position = 'before';
$trigger->module = 'addon_wst_addon_name';
$trigger->type = 'controller';
$trigger->called_method = 'triggerBeforeInsertDocument';
$GLOBALS['__triggers__']['document.insertDocument']['before'][] = $trigger;
|
cs |
2. Rhymix 애드온에서 트리거 사용하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<?php
if(!defined('__XE__'))
{
exit();
}
if(!function_exists('addon_wst_addon_name_trigger'))
{
function addon_wst_addon_name_trigger($args)
{
// Trigger Code...
return $args;
}
}
// 트리거 등록
$oModuleController = getController('module');
$oModuleController->addTriggerFunction('document.insertDocument', 'before', 'addon_wst_addon_name_trigger');
|
cs |
3. XE/Rhymix 전부 지원되도록 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
<?php
if(!defined('__XE__'))
{
exit();
}
if(!$called_position !== 'before_module_proc')
{
return;
}
if(!function_exists('addon_wst_addon_name_trigger_before_insert_document'))
{
function addon_wst_addon_name_trigger_before_insert_document($args)
{
// Trigger Code...
return $args;
}
}
// Rhymix일 경우
if(defined('RX_BASEDIR'))
{
// 트리거 등록
$oModuleController = getController('module');
$oModuleController->addTriggerFunction('document.insertDocument', 'before', 'addon_wst_addon_name_trigger_before_insert_document');
}
// Rhymix가 아닐 경우
else
{
if(!class_exists('addon_wst_addon_nameController'))
{
class addon_wst_addon_nameController
{
function addon_wst_addon_name_trigger_before_insert_document($args)
{
return addon_wst_addon_name_trigger_before_insert_document($args);
}
}
}
$GLOBALS['_loaded_module']['addon_wst_addon_name']['controller']['svc'] = new addon_wst_addon_nameController();
// 트리거 등록
$trigger = new stdClass();
$trigger->trigger_name = 'document.insertDocument';
$trigger->called_position = 'before';
$trigger->module = 'addon_wst_addon_name';
$trigger->type = 'controller';
$trigger->called_method = 'addon_wst_addon_name_trigger_before_insert_document';
$GLOBALS['__triggers__']['document.insertDocument']['before'][] = $trigger;
}
|
cs |
1, 2번 코드의 경우 $called_position 이 고려되지 않은 코드이다.
따라서 트리거의 중복 등록 가능성이 있으므로, 실 적용 시 $called_position 체크 로직을 추가하자.
XE에서 저런 꼼수로 트리거를 추가하는 것은 생각하지 못했네요. ㅋㅋㅋ
그런데 라이믹스라면 함수 선언할 필요도 없습니다. 거의 jQuery 수준으로 줄일 수 있어요.
getController('module')->addTriggerFunction('document.insertDocument', 'before', function($args) {
// 처리
return $args;
});