Q&A

알림 센터의 알림 클릭시 실행되는 act를 php 상에서 실행하는 방법이 있을까요?

2020.05.04 03:55
398
0
CMS/프레임워크 XE 1.x
개발 언어 PHP 5.x

최근 들어서 질문이 잦아서 죄송합니다.

 

사이트의 기능을 좀 커스터마이징을 하고 있는데 기본적인 지식 밖에 없는 터라 

이렇게 문의 글을 올립니다.

 

알림센터의 알림을 클릭하면 다음과 같은 act가 실행되는데요...

http://사이트 주소/index.php?act=procNcenterliteRedirect&notify=e3c8a81d3a7af194b1fb6af7bc633bb8

 

이 act를 그대로 별도 웹페이지의 php 상에서 실행하는 방법을 찾고 있습니다.

 

이러한 act는 사용자의 클릭 행위만으로만 가능한지,

혹시라도 일반적인 php 내에서 프로그래밍을 통해 실행 가능하다면, 그 방법을 찾고 있는데...

 

너무 어렵습니다~ 조언을 구하고자 합니다,

댓글 10

  • 2020.05.04 04:10 #1391679

    XE의 모든 act는 모듈 view/controller 파일에 정의된 함수이므로, 당연히 수동 호출이 가능합니다.
    (getView, getController 함수로 해당 모듈의 view/controller를 불러온뒤 함수 실행)

    다만 대부분의 view/controller 함수는 사용자가 호출했다는 가정하에 작성되어 있으므로, 수동으로 호출시 Context::set으로 몇몇 변수를 직접 설정해 주어야 할 수 있습니다.(본문의 act는 Context::set("notify","e3c8a81d3a7af194b1fb6af7bc633bb8") 등으로 설정 필요)

    이렇듯 act 함수를 수동 호출하는 방법보다는 해당 기능을 하는 코드를 직접 넣는 것이 효율적인 경우가 대부분이므로, 해당 act를 호출해야 하는 이유도 남겨주시면 다른분들 답변이 더 쉬울 것으로 보입니다.

  • 2020.05.04 04:36 #1391715
    네네. 감사합니다. 특정 알림을 선택하면, 특정 페이지로 이동하도록 구현했는데요.
    이렇게 했더니, "알림 읽음" 처리가 안되서 계속 알림이 뜨는 상황입니다. (당연한 상황입니다.)

    그래서, act를 수동 호출하려고 했는데, 지금 생각해 보니, act 후 다시 알림 원천이 되는 페이지로 이동하니까 안될거 같습니다. 에효 어렵네요.

    혹시 알림을 읽음 처리하는 별도 모듈이나 act가 있는지요? 만약 있다면 그걸 수동으로 호출하여 처리하면 될거 같습니다.

    혹시 간단한 조언이라도 주시면 감사하겠습니다. ^^
  • 2020.05.04 04:28 #1391692
    일반적인 상황에서 보았을 때, act로 접근하여 얻을 수 있는 결과라고는 알림 읽기처리 밖에 없는 것 같은데요.
    혹~시 알림 읽기처리를 위해 해당 act를 호출하려는 생각이시라면, 굳이 그럴 필요가 없다고 말씀드리고싶네요.
     
    $notify = 'e3c8a81d3a7af194b1fb6af7bc633bb8';
    $member_srl = Context::get('logged_info')->member_srl;

    $oNcenterliteController = getController('ncenterlite');
    $oNcenterliteController->updateNotifyRead($notify, $member_srl);

     

    이런 식으로 알림 읽음처리가 가능합니다 :)

  • 2020.05.04 04:37 #1391723
    와!!!! 감사합니다!
  • 2020.05.04 05:33 #1391833
    o->srl 에서 e3c8a81d3a7af194b1fb6af7bc633bb8 만 분리해서 가져오는 방법이 있을까요?
    substr 함수 등을 검색하는 방법이 있겠지만, 분명히 의미있는 토근 단위로 가져오는 방법이 있을거 같은데요.
  • 2020.05.04 06:32 #1391884
    $url = 'http://사이트 주소/index.php?act=procNcenterliteRedirect¬ify=e3c8a81d3a7af194b1fb6af7bc633bb8';
    $notify = explode('&', explode('notify=', $url)[1])[0];


    사용하시면 될 것 같네요.

  • 2020.05.04 06:41 #1391901

     아래와 같이 코드를 실행했는데, 알림 읽음 처리가 안되는거 같아요.

    $member_srl 이나 $notify 값은 잘 넘어오고 있습니다!

    <?
    if(!defined('__ZBXE__')) exit();
    define('__ZBXE__',true);
    require_once("config/config.inc.php");
    $oContext = &Context::getInstance();
    $oContext->init();
    $logged_info = Context::get('logged_info');
    $userid = $logged_info->user_id;
    $member_srl = $logged_info->member_srl;
    $group = $logged_info->group_list;

    $notify = Context::get('notify');
    $oNcenterliteController = getController('ncenterlite');
    $oNcenterliteController->updateNotifyRead($notify, $member_srl);
    ?>

     

  • 2020.05.04 07:45 #1391955

    위 코드에서 $member_srl, $notify 값이 넘어올 수가 있나요...?

    __ZBXE__ 가 정의되지 않았는데, __ZBXE__ 가 정의되었는지부터 확인하고 있네요.

    만약, __ZBXE__ 가 이미 정의된 곳에서 해당 파일을 불러오는거라면, 3번 라인에서 다시 정의할 이유가 없구요.

     

    아래 코드로 시도해 보시겠어요?

     

    <?php
    define('__ZBXE__',true);
    require_once("config/config.inc.php");

    $oContext = &Context::getInstance();
    $oContext->init();

    $logged_info = Context::get('logged_info');
    $user_id = $logged_info->user_id;
    $member_srl = $logged_info->member_srl;
    $group = $logged_info->group_list;

    $notify = Context::get('notify');
    $oNcenterliteController = getController('ncenterlite');
    $oNcenterliteController->updateNotifyRead($notify, $member_srl);

     

  • 2020.05.04 09:20 #1391987
    역시 안되는데요.. 혹시 로그를 확인해 볼 방법이 없을까요? 제 생각에서 getController에서 가져오지 못하는거 같은데...

    객체를 잘 가져오는지 여부만 확인하면 될거 같습니다~
  • 2020.05.10 05:27 #1396997
    해결 되었습니다. 문제는 "읽음" 처리는 되는데, 사용자에게 알려주는 알림센터에서 카운트나 해당 알림이 없어지지 않는 문제예요..