질문/조언질답게시판

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

 

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

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

 

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

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

 

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

 

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

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

 

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

  • profile

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

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

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

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

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

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

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

     

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

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


    사용하시면 될 것 같네요.

  • profile ?

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

    $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);
    ?>

     

  • ? profile

    위 코드에서 $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);

     

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

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