알림 센터의 알림 클릭시 실행되는 act를 php 상에서 실행하는 방법이 있을까요?
CMS/프레임워크 | XE 1.x |
---|---|
개발 언어 | PHP 5.x |
최근 들어서 질문이 잦아서 죄송합니다.
사이트의 기능을 좀 커스터마이징을 하고 있는데 기본적인 지식 밖에 없는 터라
이렇게 문의 글을 올립니다.
알림센터의 알림을 클릭하면 다음과 같은 act가 실행되는데요...
http://사이트 주소/index.php?act=procNcenterliteRedirect¬ify=e3c8a81d3a7af194b1fb6af7bc633bb8
이 act를 그대로 별도 웹페이지의 php 상에서 실행하는 방법을 찾고 있습니다.
이러한 act는 사용자의 클릭 행위만으로만 가능한지,
혹시라도 일반적인 php 내에서 프로그래밍을 통해 실행 가능하다면, 그 방법을 찾고 있는데...
너무 어렵습니다~ 조언을 구하고자 합니다,
댓글 10
XE의 모든 act는 모듈 view/controller 파일에 정의된 함수이므로, 당연히 수동 호출이 가능합니다.
(getView, getController 함수로 해당 모듈의 view/controller를 불러온뒤 함수 실행)
다만 대부분의 view/controller 함수는 사용자가 호출했다는 가정하에 작성되어 있으므로, 수동으로 호출시 Context::set으로 몇몇 변수를 직접 설정해 주어야 할 수 있습니다.(본문의 act는 Context::set("notify","e3c8a81d3a7af194b1fb6af7bc633bb8") 등으로 설정 필요)
이렇듯 act 함수를 수동 호출하는 방법보다는 해당 기능을 하는 코드를 직접 넣는 것이 효율적인 경우가 대부분이므로, 해당 act를 호출해야 하는 이유도 남겨주시면 다른분들 답변이 더 쉬울 것으로 보입니다.
이렇게 했더니, "알림 읽음" 처리가 안되서 계속 알림이 뜨는 상황입니다. (당연한 상황입니다.)
그래서, act를 수동 호출하려고 했는데, 지금 생각해 보니, act 후 다시 알림 원천이 되는 페이지로 이동하니까 안될거 같습니다. 에효 어렵네요.
혹시 알림을 읽음 처리하는 별도 모듈이나 act가 있는지요? 만약 있다면 그걸 수동으로 호출하여 처리하면 될거 같습니다.
혹시 간단한 조언이라도 주시면 감사하겠습니다. ^^
$member_srl = Context::get('logged_info')->member_srl;
$oNcenterliteController = getController('ncenterlite');
$oNcenterliteController->updateNotifyRead($notify, $member_srl);
이런 식으로 알림 읽음처리가 가능합니다 :)
substr 함수 등을 검색하는 방법이 있겠지만, 분명히 의미있는 토근 단위로 가져오는 방법이 있을거 같은데요.
$notify = explode('&', explode('notify=', $url)[1])[0];
사용하시면 될 것 같네요.
아래와 같이 코드를 실행했는데, 알림 읽음 처리가 안되는거 같아요.
$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);
?>
위 코드에서 $member_srl, $notify 값이 넘어올 수가 있나요...?
__ZBXE__ 가 정의되지 않았는데, __ZBXE__ 가 정의되었는지부터 확인하고 있네요.
만약, __ZBXE__ 가 이미 정의된 곳에서 해당 파일을 불러오는거라면, 3번 라인에서 다시 정의할 이유가 없구요.
아래 코드로 시도해 보시겠어요?
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);
객체를 잘 가져오는지 여부만 확인하면 될거 같습니다~