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 체크 로직을 추가하자.

 

 

 

출처 : https://webstack.me/tip/114

  • profile

    XE에서 저런 꼼수로 트리거를 추가하는 것은 생각하지 못했네요. ㅋㅋㅋ

    그런데 라이믹스라면 함수 선언할 필요도 없습니다. 거의 jQuery 수준으로 줄일 수 있어요.

    getController('module')->addTriggerFunction('document.insertDocument', 'before', function($args) {
        // 처리
        return $args;
    });

  • profile profile
    그쵸ㅋㅋㅋ
    라이믹스랑 XE 둘 다 지원하려면 함수로 따로 빼는게 조금 더 효율적이지 않나 싶네요.

    이런 저런 고민 안하고 익명함수를 사용하려면...
    IE 점유율이 낮아진(또는 낮아지게 사람들이 똑똑..?해 진) 이후에나 IE 신경 안써요! 한 것 처럼...
    XE에서 라이믹스로 전환하는 사람이 확! 하고 늘어나야 하는데... 말이죠ㅠ
    아직 XE를 고집(?) 하시는 분들도 많고, XE를 쓸 수 밖에 없는 분들도 많다보니...

    아무튼... 라이믹스 파이팅입니다!
  • profile profile
    XE도 오래 전부터 PHP 5.3 이상 버전을 요구하고 있으니 익명함수를 쓰는 데는 지장이 없지요. 그렇지만 XE와 라이믹스를 동시에 지원하려면 그냥 클래스에 메소드 하나 추가해서 쓰는 것이 가장 간단할 것 같기는 합니다.
  • profile
    역시 라이믹스가 간명하고 좋습니다 ㅎㅎ
    올려놨던 자료( https://xetown.com/point_contents/1370824 )도 이제 XE에서 사용가능할 수 있겠는데, 시간이...
    암튼 좋은 팁 감사합니다. 스크랩 고고씽~
  • profile profile
    함수를 따로 빼서 슬쩍 끼워넣기만 하면 되니까...
    시간나실때 업데이트 해주세요 :)
  • profile
    조...조은 코딩이네요
  • profile profile
    진짜 꼼수죠..ㅋㅋㅋㅋ
  • profile
    머.. 멋집니다.. 엄지 척!