zb5beta - 모듈 자료실
안녕하세요. 오늘은 달력 플러그인을 살펴봤어요.
일단 이 내용은 어쩌면 유용한 팁에 가까울지도 모릅니다.
현재, 달력 플러그인을 살펴보면 날짜와 올라온 글(링크로 표시)을 확인할 수는 있지만 클릭하면 아무 동작도 하지 않고있습니다.(메뉴가 모듈로 연결된 경우는 모듈내에서 날짜별로 표시, 메뉴가 페이지로 된 경우는 아무 표시 없음.)
이 이유는 달력클릭해보면 나오는 변수 archive가 레이아웃에서는 동작하지 않고 모듈에서만 동작하기 때문입니다. 그런 이유로 원하는 모양이 나오지 않는 것입니다.
그래서 이 부분을 약간 수정해봤습니다. 일단 레이아웃상에서 적용을 하기 위해(레이아웃이 없는 상태에서는 확인 못해봤습니다.) 프로세스를 간단히 살펴보면,
맨처음 실행되는 파일은 /public_html/zb5/index.php 이며 여기서 중요한 부분은
$oSvc = &zSvc::instance();
$oSvc->proc();
즉, zSvc클래스에서 proc()함수를 실행하는 것입니다.
그러므로 이 클래스에 archive를 사용할 수 있도록 선언해주면 됩니다.
class zSvc extends Zeroboard {
이 함수에 보면 사용 변수를 선언하는 부분이 있습니다. 여기서
var $action_list = array(
'show_info',
'signup',
'login',
'denied',
'hidden',
'modify_info',
'register',
'find_password',
'change_passwd',
'leave_out',
'message_box',
'view_info',
'view_serial',
'view_articles',
'calendar',
'search'
);
사용할 액션을 추가해줍니다.
var $archive = null;
이 부분역시 추가해줍니다.
function zSvc () {
...
...
$this->archive= $_REQUEST['archive']?trim(stripslashes($_REQUEST['archive'])):null;
...
...
그런 후,
function _doAction() {
...
case 'search' :
$this->_siteSearch();
$filename = "site_search.tpl";
break;
...
이 함수는 액션을 지정할때, 그 액션 수행 함수입니다.이 함수안에 윗 부분이 있습니다. 이 부분에 다음을 추가합니다.
case 'calendar' :
$this->_viewCalendarArticles();
$filename = "view_articles.tpl";
break;
즉, 'calendar' 라는 액션을 사용하기 위해 첨가하는 부분입니다.
이 부분은 viewCalendarArticles() 함수를 이용해서 리스트를 찾아오고
view_articles.tpl(레이아웃 폴더에 보면 있는 파일)를 이용해서 화면에 보여주는 것입니다.
마지막으로
function _viewCalendarArticles() {
$target_srl = $this->target_srl;
$this->_getTargetInfo($target_srl);
$oMember = &zMember::instance();
$member_obj->return_type = 'object';
$output = $oMember->proc('get_module_list',$member_obj);
if(!count($output->module_srl_list)) return;
$module_srl_list = $output->module_srl_list;
$module_name_list = $output->module_name_list;
require_class('zSearch');
$oSearch = new zSearch();
$oSearch->setMemberSrl($target_srl);
$oSearch->setModuleSrlList($module_srl_list);
if($this->archive) $oSearch->setArchive($this->archive);
$output = $oSearch->searchArticle(20,10);
$this->total_articles = $output->total_articles;
$this->oPageNav = $output->oPageNav;
$article_list = $output->article_list;
if(count($article_list)) foreach($article_list as $_k => $tmp) {
$tmp->url = zUrl::getSourceUrl($tmp->article_srl);
$tmp->module_url = "./?mid={$tmp->module_srl}";
$tmp->module_name = $module_name_list[$tmp->module_srl];
$this->article_list[] = $tmp;
}
}
이 함수를 추가함으로써 리스트를 원하는 날짜별로 정리할 수있는 것입니다.
이제 실제 적용 부분입니다.
/public_html/zb5/plugins/calendar/theme/default/calendar.tpl
이 파일안을 보시면
<td height="17" {if $obj->cnt ge '1'}class="dat {$sun_class} {$sel_class}" onClick="location.href='./?sid={$sid}&archive={$obj->regdate}"{else}class="{$sun_class} {$sel_class}"{/if}>{$obj->day}</td>
이 부분이 있습니다.
이부분을 다음과 같이 바꿈으로써 액션을 사용할 수 있습니다.
<td height="17" {if $obj->cnt ge '1'}class="dat {$sun_class} {$sel_class}" onClick="location.href='./?sid={$sid}&archive={$obj->regdate}&action=calendar'"{else}class="{$sun_class} {$sel_class}"{/if}>{$obj->day}</td>
이해를 돕기위해 예제 파일을 올려드립니다.
홈페이지 만드는데 많은 도움이 되시길 바랍니다.
수정사항
1. 2007/02/02 13:11 달 이동 오류 수정: 이전 달이나 다음달로 이동할 경우 이동이 되지않는 버그가 있더군요. 수정했습니다.
calendar.class.php 이 파일 안에서 이전달과 현재달을 구하는 부분이 잘못되어 수정합니다. 또한 처음날과 마지막 날도 약간 달라서 수정합니다. 또한, archive 변수를 직접 구하게 되있었으나 zSvc클레스에서 가져옵니다.
중요한 지적입니다. 내용을 자세히 읽어 보셨다면 아셨겠지만...이 플러그인은 기존의 플러그인이 동작상에 문제가 있어서 수정을 해준 것입니다. 일정관리 모듈로 사용하기에는 아직 무리가 있지않은가 생각합니다. 현재는 메뉴상에 링크되어있는 모듈을 모두 불러오는 형태로 되어있습니다. 일정 관리를 하려면 원하는 날짜에 글을 올려야합니다. 그러나 현재는 올린 시간을 조절할 수 없는 구조이므로 일정관리로 사용하실 수 없습니다.
말씀드리고자하는 요지는 일정관리를 위해서는 달력 플러그인이 아닌 달력 모듈이 필요하다는 말입니다.
안녕하세요. 제가 너무 주저리주저리 글을 써 놓았군요.
일단 제일 간단한 방법은
1. 압축파일의 압축을 푼후 /public_html/zb5/plugins/ 에 복사한다. 이때, 같은 폴더가 존재하지만 덮어쓴다.
2. zSvc.class.php파일을 /public_html/zb5/classes/에 복사한다. 이때, 같은 파일이 존재하지만 덮어쓴다.
이상이 제일 간단한 방법입니다.
그다음 1차 복잡한 방법
1. 압축파일은 동일하게 폴더에 덮어쓴다.
2. zSvc.class.php을 찾아서 다른 부분만 수정해서 올린다. 파란색으로 지정된 부분이 추가부분입니다.
2.1.
'calendar', //추가해야함 Line 30
var $archive = null; //추가해야함 Line 67
$this->archive= $_REQUEST['archive']?trim(stripslashes($_REQUEST['archive'])):null;//추가해야함 Line 95
//아래부분 추가 Line 604
case 'calendar' :
$this->_viewCalendarArticles();
$filename = "view_articles.tpl";
break;
//여기까지
//또 추가할 부분 Line 613
function _viewCalendarArticles() {
$target_srl = $this->target_srl;
$this->_getTargetInfo($target_srl);
$oMember = &zMember::instance();
$member_obj->return_type = 'object';
$output = $oMember->proc('get_module_list',$member_obj);
if(!count($output->module_srl_list)) return;
$module_srl_list = $output->module_srl_list;
$module_name_list = $output->module_name_list;
require_class('zSearch');
$oSearch = new zSearch();
$oSearch->setMemberSrl($target_srl);
$oSearch->setModuleSrlList($module_srl_list);
if($this->archive) $oSearch->setArchive($this->archive);
$output = $oSearch->searchArticle(20,10);
$this->total_articles = $output->total_articles;
$this->oPageNav = $output->oPageNav;
$article_list = $output->article_list;
if(count($article_list)) foreach($article_list as $_k => $tmp) {
$tmp->url = zUrl::getSourceUrl($tmp->article_srl);
$tmp->module_url = "./?mid={$tmp->module_srl}";
$tmp->module_name = $module_name_list[$tmp->module_srl];
$this->article_list[] = $tmp;
}
}
//여기까지
그다음 두번째로 복잡한 방법
1,2에서 틀린 부분만 찾아서 수정한다.
제일 복잡한 방법
파일들을 참고만하고 직접 만든다
이상입니다. 또, 궁금한점이 있으시면 말씀해주세요 ^^
Warning: main(./classes/smarty/Smarty.class.php) [function.main]: failed to open stream: No such file or directory in /home/wisil/public_html/zb5/zb.inc.php on line 42
Fatal error: main() [function.require]: Failed opening required './classes/smarty/Smarty.class.php' (include_path='.:/usr/local/lib/php') in /home/wisil/public_html/zb5/zb.inc.php on line 42
이렇게만 뜨고 아예 관리자 로그인도 안 됩니다. 고수님들 도와주세요
기본적으로는 그렇습니다.
calendar.zip 파일은 압축해제후 /public_html/zb5/plugins/에 복사하시면 됩니다. 물론 기존의 플러그인이 있습니다. 그냥 과감히 덮으셔도 문제 없을 거라고 생각합니다.
zSvc.class.php파일은 /public_html/zb5/classes/에 복사하시면 되지만....제가 다른거 올릴때에도 강조했듯이..이 파일은 제로보드5.0에서 중요하게 사용되는 파일이며, 저작권과도 밀접한 관계가 있으니 되도록 필요한 부분만 복사해 쓰시길 바랍니다.



행사일정 스케줄러가 필요해썬는데...우훗..언능 적용해볼께용~ ^0^ 추천 꾸욱!!