안녕하세요. 오늘은 달력 플러그인을 살펴봤어요.

일단 이 내용은 어쩌면 유용한 팁에 가까울지도 모릅니다.

현재, 달력 플러그인을 살펴보면 날짜와 올라온 글(링크로 표시)을 확인할 수는 있지만 클릭하면 아무 동작도 하지 않고있습니다.(메뉴가 모듈로 연결된 경우는 모듈내에서 날짜별로 표시, 메뉴가 페이지로 된 경우는 아무 표시 없음.)

이 이유는 달력클릭해보면 나오는 변수 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}&amp;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}&amp;archive={$obj->regdate}&amp;action=calendar'"{else}class="{$sun_class} {$sel_class}"{/if}>{$obj->day}</td>

이해를 돕기위해 예제 파일을 올려드립니다.
홈페이지 만드는데 많은 도움이 되시길 바랍니다.

수정사항
1. 2007/02/02 13:11 달 이동 오류 수정: 이전 달이나 다음달로 이동할 경우 이동이 되지않는 버그가 있더군요. 수정했습니다.
calendar.class.php 이 파일 안에서 이전달과 현재달을 구하는 부분이 잘못되어 수정합니다. 또한 처음날과 마지막 날도 약간 달라서 수정합니다. 또한, archive 변수를 직접 구하게 되있었으나 zSvc클레스에서 가져옵니다.

이 게시물을..