Extra Form
PHP PHP 7.0
CMS Rhymix

실시간 새글 알림 애드온을 특정게시판에서만 적용하고 싶습니다.

즉, 알림은 어떤 페이지에서도 다 뜨지만 베스트 게시판(타임라인 모듈)게시판에 글이 올라왔을시 알림이 뜨도록 하고 싶습니다.

 

애드온은  https://xe1.xpressengine.com/index.php?mid=download&package_id=22672196 요걸 사용하고 있습니다.

 

<?php

Context::addHtmlfooter('<script>
;(function($){
$.ajaxSetup({
global: false
});
})(jQuery);
</script>');

 /*
 new_document_notify.addon.php
 새글이 등록되어있을 경우를 체크 후 알림
 */
 if($called_position == 'before_module_proc') {
  $is_document_new = false;
  if(!$addon_info->settime){
   $time_interval = 60; //글 체크 주기 초단위
   $settimeout = 60000;
  }else{
   $time_interval = $addon_info->settime;
   $settimeout = $time_interval*1000;
  }
  if(!$addon_info->hidetime) $hide_time = 3000;
  else $hide_time = $addon_info->hidetime * 1000;
  if(!$addon_info->ajaxtarget) $ajax_target = '';
  else $ajax_target = '?mid='.$addon_info->ajaxtarget;
  $time_check = date("YmdHis", time()-$time_interval);
  $args->list_count = 1;
  $args->order_type = 'asc';
  $args->statusList = 'PUBLIC';
  if(isset($addon_info->exclude_module_srl)) $args->exclude_module_srl = $addon_info->exclude_module_srl;
  $args->module_srl = $addon_info->module_srl;
  $output = executeQueryArray('document.getDocumentList', $args);
  if(!count($output->data)) return;
  if($output->data)
  {
   foreach($output->data as $doc)
   {
    if($doc->regdate > $time_check) $is_document_new = true; //현재 시간으로 부터 1분안에 등록된 글이 있을경우
   }
  }
   if(!$addon_info->lineborder) $addon_info->lineborder = '1px';
   if(!$addon_info->bgcolor) $addon_info->bgcolor = '#EBEEF4';
   if(!$addon_info->linecolor) $addon_info->linecolor = '#369';
   if(!$addon_info->fontcolor) $addon_info->fontcolor = '#369';
   if(!$addon_info->cuttitle) $doc->title = cut_str($doc->title,$addon_info->cuttitle,'...');

   if($is_document_new == true && $_COOKIE['docsrl']!=$doc->document_srl){
    $addBody = '<script type="text/javascript">document.cookie = "docsrl='.$doc->document_srl.'";</script>';
    $addLayerdiv ='<div id="ndc"><div id="ndcLayer" style="position:fixed;display:block;left:100%;top:100%;margin-top:-83px;margin-left:-365px;width:350px;background:#FFF;border:'.$addon_info->lineborder.' solid '.$addon_info->linecolor.';z-index:'.$addon_info->notifyzindex.';color:'.$addon_info->fontcolor.';"><div style="border:1px solid#FFF;background: '.$addon_info->bgcolor.';"><span style="display:inline-block;width:280px;font:11px Dotum;letter-spacing:-1px;line-height: 22px;padding: 4px 10px;margin: 0 10px 0 0;height: 20px;text-shadow:1px 1px 0#FFF">[알림]  <b>'.$doc->nick_name.'</b>님이 새글을 등록하셧습니다.</span><span><embed src="/museeneuf/addons/new_document_notify/sound.mp3" width=0 height=0></embed><a href="javascript:ndcClose();" style="text-decoration:none;text-shadow:1px 1px 0#FFF;font:11px verdana;letter-spacing:-1px;color:'.$addon_info->fontcolor.'">Close</a></span></div><div class="alram" style="border-top:1px solid '.$addon_info->linecolor.';background:#FFF;padding: 5px 10px"><a style="font:700 12px Gulim;letter-spacing:-1px;height: 28px;line-height: 30px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-o-text-overow: ellipsis;-moz-binding:url(js/ellipsis.xml#ellipsis)undefinedundefinedundefined;color:'.$addon_info->fontcolor.'" href='.$doc->document_srl.'>'.$doc->title.'</a></div></div></div>';
   }
   else{
    $addLayerdiv ='<div id="ndc"><div id="ndcLayer" style="position:fixed;display:none;left:100%;top:100%;margin-top:-50px;margin-left:-330px;width:300px;height:30px;padding:5px;font-size:11px;background:'.$addon_info->bgcolor.';border:'.$addon_info->lineborder.' solid '.$addon_info->linecolor.';z-index:'.$addon_info->notifyzindex.'"><span></span></div></div>';
    $addBody = '';
   }
   $nJquery = '<script type="text/javascript">function newdocumentchk() {jQuery("#ndc").load(request_uri+"index.php'.$ajax_target.'#ndcLayer");setTimeout(newdocumentchk, '.$settimeout.');}function ndcClose() {jQuery("#ndcLayer").fadeOut("slow");}setTimeout(newdocumentchk, '.$settimeout.');setTimeout(function(){jQuery("#ndcLayer").fadeOut("slow");}, '.$hide_time.');</script>';
   
   Context::addBodyHeader($addLayerdiv);
   Context::addBodyHeader($nJquery);
   Context::addBodyHeader($addBody);

   
   
 }

?>

 

코드는 요런식으로 되있습니다.

 

그래서 전  $args->module_srl = $addon_info->module_srl;  이부분을  $args->module_srl = 137; 이런식으로 srl 번호만 넣어봤더니 전혀 작동을 안하더군요..;

 

타임라인이라서 그런건가요..?

 

  • profile
    보통 타임라인은 글 작성을 하는 게시판이 아닌 글을 모으는 용도로 사용합니다. 아마 그렇게 구성하셨을 것이니 글이 작성될 일이 없죠.
  • profile ?
    흐음..타임라인에도 적용이 되게 하는 방법은 없을까요?
    일단 다 뒤적거리면서 찾아보고 있기는 합니다만..
  • ? profile

    글을 아무도 쓰지 않는데 새글 알림이 발생하지 않죠. 접근을 완전 잘못 하고 계십니다.

    타임라인의 글들은 이미 다른 게시판에서 오래전에 write act로 글이 써진 상태입니다.

    베스트글로 지정되었다고 알림을 하는건 어떤 글이 지정된 베스트 기준(추천)에 도달하는 것을 확인된 시점에 알림을 발생시켜야 해서 지금 ajax방식으로는 구현이 적합하지 않다고 보셔야 합니다.

    특정 추천수를 카운트 하는 시점에 웹소켓으로 브라우저로 쏘아주는 방식으로 해야 합니다.

    그리고 새글 작성을 ajax로 확인하게 되면 방문자가 많아지면 부하가 많이 걸립니다. 대부분 방문자가 어느정도 있는 사이트가 되길 기대하며 사이트를 시작하실거기에 결국 사이트가 성공하지 못하는 그런 상황에서나 유효한 방식입니다.

  • profile ?
    항상 감사드립니다.
    완전 잘못 이해하고 있었네요;