포럼
으으.. 어렵네요.;;;
2012.12.12 05:13
아래쪽에 보니까..
일베에 있는 실시간 글 알림 관련 글이 보이길래 한번 애드온으로 만들어 보자 싶어서 해봤는데
어렵네요.. ;; 대충 아래 처럼 해봤는데 제대로 데이터가 빠져나오는지 알수가 없네요.;
디버그 사용법좀 찾아봐야겠네요 ;;
newdocument.addon.php
<?php /** * 새글이 등록되어있는지 체크 **/ if($called_position == 'before_display_content') { Context::addJsFile('./addons/newdocument/js/newdocumentdiv.js'); Context::addJsFile('./addons/newdocument/js/newdocument.js'); } if($called_position == 'before_module_init') { $is_document_new = false; $time_interval = 60; $time_check = date("YmdHis", time()-$time_interval); $args->list_count = 1; $args->order_type = 'asc'; $db_output = executeQuery('document.getDocumentList', $args); if(!$db_output->toBool()) continue; if($db_output->data) { foreach($db_output->data as $doc) { if($doc->regdate > $time_check) $is_document_new = true; } } if($is_document_new == true){ print sprintf('{"new_document_chk" : "Y"},{"document_srl" : "%s"},{"document_title" : "%s"}', $request_uri.$doc->document_srl, $doc->title); } } ?>
newdocument.js
jQuery(document).ready(newdocumentchk); function ndc() { setTimeout(newdocumentchk, 10000); } function newdocumentchk() { jQuery.ajax({ url : default_url + 'index.php', dataType : "json", complete : ndc, timeout : 10000, success : function(data) { if(data.new_document_chk == "Y") { $("#ndcLayer").prepend("새로운 글이 올라왔습니다.<br/>제목 : <a href='"+data.document_srl+"' alt=''>"+data.document_title+"</a>"); $("#ndcLayer").show(); } } }); }
newdocumentdiv.js
$(document).ready(function(){ $("body").prepend("<div id='ndcLayer' style='position:absolute;left:0px;top:0px;display:none;width:300px;height:30px;padding:5px;font-size:11px;background:#ffffff;border:2px solid #666666;'></div>"); });
이런식으로 해봤는데 일단 Jquery 쪽 ajax는 갱신이 계속 되는데 데이터가 안들어오는건지.. 표시를 못해주네요 ;;
댓글 10
-
푸시아
2012.12.12 07:35
-
배워서남준다
2012.12.12 09:03
제 나름대로 수정해 보았습니다.
newdocument.addon.php
/**
* 새글이 등록되어있는지 체크
**/
if($called_position == 'before_module_init') {
Context::addJsFile('./addons/newdocument/js/newdocument.js');
$is_document_new = false;
$time_interval = 60*60*24; //24시간
$time_check = date("YmdHis", time()-$time_interval);
$args->list_count = 1;
$args->order_type = 'asc';
$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;
}
}
//관리자에게만...
$logged_info = Context::get('logged_info');if($is_document_new == true&&$logged_info->is_admin=='Y')
{
$docinfo = sprintf('var new_document_chk = "Y", document_srl = "%s", document_title = "%s";', $request_uri.$doc->document_srl, $doc->title);
$addBody = '<script type="text/javascript">'.$docinfo.'</script>';
Context::addBodyHeader($addBody); // body 상단에 등록
}
}
newdocument.js
jQuery(function($){
window.newdocumentchk = function(title,srl){
var $notice = $('<div id="ndcLayer" style="position:absolute;left:0px;top:0px;width:300px;height:30px;padding:5px;font-size:11px;background:#ffffff;border:2px solid #666666;" />') .hide().prependTo(document.body);$notice.html('<p><a href="' + srl +'">'+title+'</a></p>').height();
$notice.slideDown(600).animate({top:0});
setTimeout(function(){$notice.slideUp()}, 10000);
};
newdocumentchk(document_title,document_srl);
});
제가 초보라서 ajax는 아직 학습을 못했는데, 고수분들이 좀더 다듬어 주시길 바랍니다.
-
Canto
2012.12.12 17:43
으으으.. 꼼수로 성공했습니다..
정리해서 댓글로 올려놓을께요 (...)
-
Canto
2012.12.12 18:44
일단 @배워서남준다 님께 감사드립니다. ㅎㅎ
index로 Ajax요청해서 div 요소를 바꿔치는 식으로 해봤는데..
간편하고 좋은 방법이 있을텐데 실력 부족 OTL
newdocument.addon.php
/*
newdocument.addon.php
새글이 등록되어있을 경우를 체크
*/
if($called_position == 'before_module_proc') {
Context::addJsFile('./addons/newdocument/js/newdocument.js');
$is_document_new = false;
$time_interval = 60; //글 체크 주기 초단위
$time_check = date("YmdHis", time()-$time_interval);
$args->list_count = 1;
$args->order_type = 'asc';
$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분안에 등록된 글이 있을경우
}
}
$docinfo = sprintf('var new_mid = "%s",new_document_chk = "Y", document_srl = "%s", document_title = "%s";', $current_url,$request_uri.$doc->document_srl, $doc->title);
$addBody = '<script type="text/javascript">'.$docinfo.'</script>';
if($is_document_new == true) $addLayerdiv ='<div id="ndc"><div id="ndcLayer" style="position:fixed;display:block;left:100%;top:100%;margin-top:-50px;margin-left:-330px;width:300px;height:30px;padding:5px;font-size:11px;background:#ffffff;border:2px solid #666666;z-index:10;"><span >게시판에 새로운 글이 등록되었습니다<br/><a style="color:#000000" href='.$doc->document_srl.'>'.$doc->title.'</a> - 작성자 : '.$doc->nick_name.'</span></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:#ffffff;border:2px solid #666666;"><span></span></div></div>';
Context::addBodyHeader($addBody); // body 상단에 등록
Context::addBodyHeader($addLayerdiv);
}
newdocument.js
jQuery(document).ready(newdocumentchk);
function newdocumentchk() {
$("#ndc").load('index.php #ndc > #ndcLayer');
setTimeout(function(){$("#ndcLayer").fadeOut('slow')}, 30000);
setTimeout(newdocumentchk, 60000);
}
-
Canto
2012.12.12 19:28
newdocument.js 에서.;;
$("#ndc").load('index.php #ndc > #ndcLayer');
Ajax로 로드하는 부분에.
index.php?mid=home
이런식으로 mid를 추가시켜 주지 않으면 안되네요.;; 뭐가 문제지 (...)
-
Canto
2012.12.12 19:44
애드온호출 시점 문제였군요.;;
호출시점을 before_module_proc 로 해주니 이젠 index.php 로만으로 괜찮네요 (...)
-
BonaSera
2012.12.17 00:51
혹시...
애드온으로 만들어주시면 정말 좋을 것 같아요... ^^
조심스레 기대해봅니다 ^^
-
Canto
2012.12.20 14:23
일단 운영하는 사이트에서 사용해보고 있는데요 손봐야될 곳이 많은 듯 하여
배포는 늦어질꺼 같네요 ㅠㅠ
-
라르게덴
2012.12.12 19:34
언제 공부한번 할까요? :p -
Canto
2012.12.12 19:40
좋죠 ㅎㅎ
근데 이번달은 바뻐서 ㅠㅠㅠ
다음달이면 괜찮습니다. ㅎㅎ
왜 called_position 을 두개로 쓰죠?
컨텐츠 보일때 js 파일 호출하고 모듈 초기화할때 나머지를 호출하는 특별한 이유가 있나요?