zb5beta - 모듈 자료실
안녕하세요. 오늘은 달력 모듈입니다.
부족하지만...기본적인 뼈대 구성이라고 생각해주세요. 나중에 다른분이 더 좋은 모듈을 만들어주시면 감사하겠습니다.
플러그인에 올려놓은 것은 기존의 달력 플러그인을 수정해서 올려놓은 것입니다. 그리고 이 모듈은 그 플러그인을 기반으로 제 맘대로 편집해 보았습니다. 기본적으로 모듈만 올리면 좋으련만...몇가지 동작을 위해 클래스 파일을 수정하게 되었습니다. 이 점 상당히 죄송하게 생각합니다.
달력의 핵심은 archive가 아닐까하고 생각해봅니다.
기존의 search구조를 보면 이 것을 이용해서 날짜별로 불러올 수 있는 시스템이 되어있습니다. 이 부분을 달력 플러그인을 위해 수정을 했는데 이번 모듈에서도 그 부분을 동일하게 사용했습니다. 즉, 같은 부분을 수정해줘야한다는 얘기입니다.
일단, 제가 올린 예제파일을가지고 설명해드리겠습니다.
앞에 붙어있는 Line은 실제 파일에서 라인을 말합니다.
그러므로 복사를 하실때는 이 주석 부분을 제외하고 사용하시길 바랍니다.
제가 올린 모듈을 사용하시려면 아래의 1, 2 ,3단계를 모두 적용하셔야 정상동작합니다.
1. board_calendar.zip[폴더입니다.] -> /public_html/zb5/modules/ 에 복사하시면 됩니다.
2. zSvc클래스(/public_html/zb5/classes/zSvc.class.php)에서 archive를 사용할 수 있도록 선언해주면 됩니다. 즉, 아래의 2개의 추가부분을 추가하시면 됩니다.
...
...
var $archive = null; //추가부분 Line 67
...
...
$this->archive= $_REQUEST['archive']?trim(stripslashes($_REQUEST['archive'])):null; //추가부분 Line 95
이 부분을 제외하고는 기존의 zSvc.class.php파일과 동일합니다.
3.zArticle 클래스(/public_html/zb5/classes/zArticle.class.php)에서 다음을 변경합니다. 이 부분을 변경하셔야 새 글을 작성할때 날짜 변경한것이 적용됩니다.
기존: $obj->regdate = date("YmdHis"); //변경되어야할 부분 Line 276
변경후: if(!$obj->regdate)$obj->regdate = date("YmdHis");
수정사항:
1. 2007/02/05 17:26 하단의 전체보기 메뉴 -> Today로 변경
우선 스케줄러가 절실히 필요한데.....만들어 주셔서 매우 감사드립니다...
목마름에 잠시 도움을 얻어.....시원한 물한모금을 얻어마셨으나....
갈증이 해소대자.....샤워를 하고 싶은...격이랄까....
몇가지 아쉬운점이 있어서 코멘트를 달아요...^^;
우선....위 설명대로 했을시....
메인에 빠져나와있는 켈린더 플러그인에도 그 효과가 발생합니다....
즉....
기존대로 글이 올라온날도 회색으로 표시대고...
일정에 있는 날도 회색으로 표시대고....
수정전에 글이올라온날짜가 회색으로 표시되는것을 막고 아예 스케줄러로 사용할순 없을까요....??
그리고....
염치없지만....
윗분 슬봉이님 말대로...
제목표시가 간략히 나와줬으면....합니다....
해결방법
1. 메뉴에서 연결대상을 내부 페이지로 놓고 경로 부분에 해당 모듈의 sid또는 mid를 적는다.
2. 캘린더 플러그인의 대상을 메뉴가 아니고 다중 모듈로 수정한다.
3. 캘린더 모듈 전용의 캘린더 플러그인을 만든다.
.....
그런데...별로 안 깔끔하네요...좀더 연구를 해봐야겠어요.
그리고 날짜 밑에 올린 글의 제목이 나타나지 않는 것은 아직 그 부분까지 수정을 하지 않아서입니다. 조만간 수정해보겠습니다. 요즘 다른 부분을 보느라고....
개인적인 소견을 말씀드리자면....현재 제가 만들어놓은 달력 모듈은 달력 부분과 밑에 리스트 부분이 서로 다른 프로세서를 거쳐서 나오도록 되어있습니다. 이유인 즉슨 모듈 자체 설정을 보면 listorder와 modify_order이렇게 2종류 밖에 없습니다. 그래서 기본적으로 2가지 밖에 안나옵니다. 리스트 순서로 나오던가, 아니면 올린 순서로 나오던가....순방향또는 역방향으로 밖에 리스트가 출력되지 않습니다. 추가 옵션이 있는 경우만 다르게 동작합니다. 이 부분에 today_order 등등의 리스트 오더를 설정하고 이 모듈에만 today_order를 적용하면 되지 않을까 생각합니다. 리스트 순서를 정하는 부분에서 today_order가 들어오는 경우는 listorder로 쓰고 추가로 archive쪽에 오늘 날짜를 넣어 주시면 될 듯합니다.
$oSearch->setArchive($this->oModule->archive);
이 문장을 보면...모듈쪽 클래스에서 archive가 선언되어있어야한다는 건데....좀 연구가 필요할 것 같습니다. 요즘 이 부분을 작업을 못하고있습니다.
저는 게시물달력플러그인하고 달력모듈 두개모두를 사용중인데요
게시물달력플러그인쪽에서 위의 광견님처럼 엑박이 발생됩니다.
모듈쪽하고 게시물달력쪽하고 수정하다보니 zSvc.class.php을 양쪽모두 수정하게 되는데 양쪽의 파일내용이 조금씩 틀린부분이 있어서 조금 애매하기도 합니다.
그런것때문일까요..저도 위의 광견님처럼 엑박이 발생되는데 잠순이님의 리플 내용을 알아들을수가 없어서요..
제가 워낙 무지하다 보니...ㅠ.ㅠ
조금 쉽게 해결 방법을 알려주시면 안될까요...
엑박을 놔둘수는 없어서...부탁드립니다.
"나릿물미르"님 안녕하세요.
엑박을 없애고 싶으시다고요? 레이아웃 폴더의 tpl 폴더에 가시면 view_articles.tpl가 있습니다.
여기서 다음 내용이 타이틀에 표시되는데...
<div class="title">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
{if $site_info->use_exp eq 'Y'}
<td><img src="{$target_info->exp_icon}" border="0" title="{$target_info->exp_per}%" /></td>
{/if}
{if $target_info->image_mark}
<td><img src="{$target_info->image_mark}" border='0' /></td>
{/if}
{if $target_info->image_nick}
<td><img src="{$target_info->image_nick}" border='0' /></td>
{else}
<td>{$target_info->nick_name}</td>
{/if}
<td>({$target_info->user_id})</td>
</tr>
</table>
</div>
이중 일부 내용이 쓰레기 내용이 들어가서 나오는 것일 수 있습니다.
일단, {if $site_info->use_exp eq 'Y'} 이 부분을 다음으로 교체해주세요.
{if ($site_info->use_exp eq 'Y') && ($target_info->exp_icon)}
제 개인적인 생각으로는 님이 사용하시고 계신 홈페이지는 경험치 포인트를 사용하여서 회원이 레벨을 갖고있는 듯합니다. 그래서 위의 부분에서 엑박이 생기지 않나 생각합니다. 만일 이 부분으로도 해결이 안되면 다음을 추가해주세요.
zSvc.class.php에서
function _viewCalendarArticles($type=null) { 의 내용중
if($type == 'comment')
{
$this->target_info->user_id = " Total comment list [date: {$this->archive}] ";
}else
{
$this->target_info->user_id = " Total article list [date: {$this->archive}] ";
}
$this->$target_info->exp_icon=null; //추가부분
$this->$target_info->image_mark=null; //추가부분
$this->$target_info->image_nick=null; //추가부분
$this->$target_info->nick_name=null; //추가부분
라고 임시로 정보를 제공하면 엑박이 생기지 않을 것입니다.
아~ 그리고 zSvc.class.php파일이 여기저기 난립해서 어떤 파일이 최신것인지 혼동이 온다고 말씀하셨는데...저도 이 부분은 상당히 죄송하게 생각합니다. 가장 확실한 방법은 제가 올린글중 가장 최근에 올린 zSvc.class.php 가 최신이라고 밖에 말씀드릴 수 없네요.
오늘 날짜 기준으로
function _viewCalendarArticles($type=null) {
$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);
if($type == 'comment')
{
$output = $oSearch->searchComment(20,10);
}else
{
$output = $oSearch->searchArticle(20,10);
}
$this->total_articles = $output->total_articles;
$this->oPageNav = $output->oPageNav;
if($type == 'comment')
{
$this->target_info->user_id = " Total comment list [date: {$this->archive}] ";
}else
{
$this->target_info->user_id = " Total article list [date: {$this->archive}] ";
}
$this->$target_info->exp_icon=null; //추가부분
$this->$target_info->image_mark=null; //추가부분
$this->$target_info->image_nick=null; //추가부분
$this->$target_info->nick_name=null; //추가부분
$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;
}
}
이 함수가 가장 최근 함수입니다.
이미지 액박의 원인은 템플릿(*.tpl) 파일에 있습니다. 기존에 사용하고있는 템플릿을 그냥 사용하면서 포맷을 맞추지 않아서 발생하는 것입니다. 해결 방법은 템플릿 파일을 새로 만들던가 아니면 기존 템플릿에 형식을 맞추는 것입니다. 현재 사용하고있는 템플릿은 view_articles.tpl 입니다. 이 템플릿은 사용자 정보중 작성한 글 보기 템플릿입니다. http://beta.zb5.zeroboard.com/?sid=8&action=view_articles&page=1&target_srl=28490 이런 식으로 target_srl을 지정하게 되어있습니다. 여기서 target_srl은 사용자 고유 번호입니다. 이 번호는 mysql에 들어가보시면 맴버쪽 테이블에 지정되어있습니다. target_srl을 지정하는 경우는 그 회원이 올린 글만 보이게 됩니다.





안녕하세요. 감사히 잘쓸게요.
그런데 달력에.. 글의 제목이 나오도록 할 수는 없나요?
달력에 제목이 안나오니.. 그 날이 어떤 날인지 한눈에 확인 하기가힘들어서요.. ^^
아무튼 감사합니다.