웹마스터 팁
BNU님의 Planner XE 1.2 버젼(일정관리)
2009.04.21 15:12
BNU님의 Planner가 pl8 이후 더 이상 개발을 하지 않으신다는 안타까운 소식을 접했습니다.
사실 XE 1.2로 업그레이드 하고 여러가지고 신경이 많이 쓰였던 부분입니다.
일정관리가 필요하긴 한데.. 사용은 불가능 하고..
결국 그냥 직접 수정 해보기로 했습니다.
이거 하느라고 하루를 몽땅 날려먹었네요 ㅠ.ㅠ
우선 관리자 페이지의 변경된 확장변수 입력 방식을 수정합니다.
1. /xe/modules/planner/tpl/module_insert.html // 관리자 페이지의 플래너 추가 화면
- line 140 ~ 201 제거 // 확장 변수 입력 폼 삭제
- line 139 "</tr>" 누락 된거 추가.
// 플래너 추가 화면에 확장 변수가 표시 되지 않습니다.
2. /xe/modules/planner/tpl/header.html // 확장변수 탭 추가
- line 20 추가
<li <!--@if($act=='dispPlannerAdminExtraVars')-->class="on"<!--@end-->><a href="{getUrl('act','+ '+ 'dispPlannerAdminExtraVars')}">{$lang->extra_vars}</a></li>
3. /xe/modules/planner/conf/module.xml
- line 36 추가 //확장 변수 탭으로 이동하는 액션 추가
<action name="dispPlannerAdminExtraVars" type="view" standalone="true" />
4. /xe/modules/planner/planner.admin.view.php // 확장 변수 페이지 표시 함수
- line 151 ~ 160 추가
/**
* @brief 확장변수 설정
**/
function dispPlannerAdminExtraVars() {
$oDocumentAdminModel = &getModel('document');
$extra_vars_content = $oDocumentAdminModel->getExtraVarsHTML($this->module_info->module_srl);
Context::set('extra_vars_content', $extra_vars_content);
$this->setTemplateFile('extra_vars');
}
5. 확장변수 출력 페이지 생성
- /xe/modules/board/tpl/extra_vars.html 을
-> /xe/modules/planner/tpl/로 복사
6. 관리자 페이지 -> 서비스관리 -> 플래너 -> 플래너 생성 -> 확장 변수 추가
- 이미 플래너가 있는 경우 확장 변수만 추가
- 시작일 (날짜형식),
- 종료일 (날짜형식),
- 종일 (체크박스),
- 비밀글 (체크박스) // 정확한 기능을 몰라 is_secret 소스를 보고 그냥 비밀글이라고 이름을 지엇습니다. BNU님의 도움이 필요ㅠ.ㅠ
7./xe/modules/planner/planner.view.php
- line 132 // 글 쓰기 버튼 누른 경우
/**
* @brief 글 작성 출력화면
**/
function dispPlannerWrite() {
if(!$this->grant->write_document) return $this->dispPlannerMessage('msg_not_permitted');
$oDocumentModel = &getModel('document');
/**
* 카테고리를 사용하는지 확인 후 사용시 카테고리 목록을 구해와서 Context에 셋팅, 권한도 함께 체크
**/
if($this->module_info->use_category=='Y') {
// 로그인한 사용자의 그룹 정보를 구함
if(Context::get('is_logged')) {
$logged_info = Context::get('logged_info');
$group_srls = array_keys($logged_info->group_list);
} else {
$group_srls = array();
}
$group_srls_count = count($group_srls);
// 카테고리 목록을 구하고 권한을 체크
$normal_category_list = $oDocumentModel->getCategoryList($this->module_srl);
if(count($normal_category_list)) {
foreach($normal_category_list as $category_srl => $category) {
$is_granted = true;
if($category->group_srls) {
$category_group_srls = explode(',', $category->group_srls);
$is_granted = false;
if(count(array_intersect($group_srls, $category_group_srls))) $is_granted = true;
}
if($is_granted) $category_list[$category_srl] = $category;
}
}
$oPlannerModel = &getModel('planner');
$categories_color = $oPlannerModel->getCategoriesColor($this->module_srl);
Context::set('category_list', $category_list);
Context::set('categories_color', $categories_color);
}
// GET parameter에서 document_srl을 가져옴
$document_srl = Context::get('document_srl');
$oDocument = $oDocumentModel->getDocument(0, $this->grant->manager);
$oDocument->setDocument($document_srl);
if(!$oDocument->isExists()) {
$document_srl = getNextSequence();
Context::set('document_srl',$document_srl);
}
// 글을 수정하려고 할 경우 권한이 없는 경우 비밀번호 입력 화면으로
if($oDocument->isExists()&&!$oDocument->isGranted()) return $this->setTemplateFile('+ 'input_password_form');
$oMemberModel = &getModel('member');
$group_list = $oMemberModel->getGroups();
Context::set('group_list', $group_list);
Context::set('document_srl',$document_srl);
Context::set('oDocument', $oDocument);
// 확장 변수처리를 위해 xml_js_filter를 직접 header에 적용
$oDocumentController = &getController('document');
$oDocumentController->addXmlJsFilter($this->module_info->modules_srl);
$this->setTemplateFile('write_form');
}
// $this->module_info 가 $this->module_info->modules_srl 로 변경됨
8. /xe/modules/planner/skins/lifepod/write_form.html
- line 23 ~ 27 //extra_vars11 = extra_vars1로 extra_vars12 = extra_vars@
<!--@if(!$oDocument->getExtraValue(1))-->
{@ $oDocument->variables['extra_vars1'] = date('YmdH00')}
{@ $plus_h = sprintf('%02d', date('H') + 1)}
{@ $oDocument->variables['extra_vars2'] = date('Ymd'.$plus_h.'00')}
<!--@end-->
-line 69 ~ 70 수정
<!--@if(!$oDocument->getExtraValue(1))-->{zdate($oDocument->get('extra_vars1'+ '), 'Y/m/d H:i')}<!--@else-->{zdate($oDocument->getExtraValue(1), 'Y/m/d H:i')}<!--@end-->"> ~
<input type="text" name="end_date" class="inputTypeText w100" readonly="readonly" value="<!--@if(!$oDocument->getExtraValue(2))-->{zdate($oDocument->get('extra_vars2'), 'Y/m/d H:i')}<!--@else-->{zdate($oDocument->getExtraValue(2), 'Y/m/d H:i')}<!--@end-->">
- line 136 제거
<!--@if($key >= 11) continue; //-->
9. /xe/modules/planner/planner.controller.php // 확장변수를 일정에 등록
- line 29 ~ 33 // extra_vars11, 12, 13, 14 를 1,2,3,4
/**
* @brief 문서 입력
**/
function procPlannerInsertEntry() {
if(!$this->grant->write_document) return new Object(-1, 'msg_not_permitted');
$obj = Context::getRequestVars();
$obj->module_srl = $this->module_srl;
if($obj->is_notice!='+ 'Y'||!$this->grant->manager) $obj->is_notice = 'N';
if($obj->title == '') $obj->title = cut_str(strip_tags($obj->content),20,'...');
if(!$this->grant->manager) {
unset($obj->title_color);
unset($obj->title_bold);
}
// 모듈에서 사용하는 extra_vars11~ 확장변수에 대입
if($obj->start_date) $obj->{'extra_vars1'} = str_replace(array('/',':',' '), '', $obj->start_date);
if($obj->end_date) $obj->{'extra_vars2'} = str_replace(array('/',':',' '), '', $obj->end_date);
$obj->{'extra_vars3'} = ($obj->is_daylong == 'Y') ? 'daylong' : 'schedule';
if(!$obj->is_secret && $obj->open_group) $obj->{'extra_vars4'} = $obj->open_group;
else $obj->{'extra_vars4'} = '';
$oDocumentModel = &getModel('document');
$oDocumentController = &getController('document');
$oDocument = $oDocumentModel->getDocument($obj->document_srl, $this->grant->manager);
if($oDocument->isExists() && $oDocument->document_srl == $obj->document_srl) {
$output = $oDocumentController->updateDocument($oDocument, $obj);
$msg_code = 'success_updated';
} else {
$output = $oDocumentController->insertDocument($obj);
$msg_code = 'success_registed';
$obj->document_srl = $output->get('document_srl');
}
if(!$output->toBool()) return $output;
$this->add('mid', Context::get('mid'));
$this->add('document_srl', $output->get('document_srl'));
$this->setMessage($msg_code);
}
10. /xe/modules/planner/skins/lifepod/index.html
- line 15 수정
http://www.lifepod.co.kr/api/calendar.js 를 lifepod.js로 첨부 하였습니다.
{@ Context::addHtmlHeader('<script type="text/javascript" src="./modules/planner/skins/lifepod/js/lifepod.js'.$param.'"></script>')}
11. /xe/modules/planner/planner.model.php
- line 17 ~ 51 삭제 // getPlannerEntries() 함수를 통합
/**
* 엔트리를 Ajax로 가져옴
*/
function getPlannerEntriesXml() {
if(!$this->grant->list) return;
$oModuleModel = &getModel('module');
$logged_info = Context::get('logged_info');
$module_srl = Context::get('module_srl');
$year = Context::get('year');
$month = sprintf('%02d',Context::get('month'));
$cur_date = $year.$month;
$args->module_srl = $module_srl;
$args->cur_date = date('Ym', ztime($cur_date));
$var_idx[] = array();
$var_idx[1] = 1;
$var_idx[2] = 2;
$args->var_idx = $var_idx;
$args->sort_index = 'value';
$output = executeQueryArray('planner.getEntry', $args);
$oDocumentModel = &getModel('document');
if($output->toBool() && $output->data) {
foreach($output->data as $key => $val) {
if(!$val->document_srl) continue;
$document = $oDocumentModel->getDocument($val->document_srl);
if($args->module_srl==$document->get('module_srl')){
$start_date = str_replace(' ', '', $document->getExtraValue(1));
$end_date = str_replace(' ', '', $document->getExtraValue(2));
$icons = $document->getExtraImages(60 * 60 * $module_info->duration_new);
if($icons) {
$icon_list = null;
foreach($icons as $no => $icon) {
$icon_list[$no] = $icon;
}
} else { $icon_list = null; }
$icon_path = sprintf('%s%s', getUrl(), 'modules/document/tpl/icons/');
$description = str_replace(' ', ' ', $document->getSummary(50));
// 엔트리 JSON 배열 포맷으로
$entries[$key]->id = $document->document_srl;
$entries[$key]->module_srl = $document->get('module_srl');
$entries[$key]->start = zdate($document->getExtraValue(1), 'Y-m-d H:i:s'+ ', false).$timezone;
$entries[$key]->end = zdate($document->getExtraValue(2), 'Y-m-d H:i:s', false).$timezone;
$entries[$key]->title = $document->get('title');
$entries[$key]->description = $description;
$entries[$key]->type = $document->getExtraValue(3);
$entries[$key]->category = $this->category_list[$document->get('category_srl')]->title;
$entries[$key]->color = $categories_color[$document->get('category_srl')];
$entries[$key]->bg = null;
$entries[$key]->icon = null;
$entries[$key]->allowTag = 1;
$entries[$key]->comment = $document->get('comment_count');
$entries[$key]->icons = $icon_list;
}
}
}
if($entries) {
$json = new JSON;
$entries = $json->serialize($entries);
//$entries = '{['.implode(',', $entries).']}';
$this->add('entries'+ ', $entries);
}
$this->add('iconpath', $icon_path);
}
12. /xe/modules/planner/queries/getEntry.xml
- 게시물 가져오는 쿼리 수정
<query action="select">
<tables>
<table name="document_extra_vars" />
</tables>
<columns>
<column name="distinct(document_srl)" />
</columns>
<conditions>
<condition operation="in" column="module_srl" var="module_srl" />
<condition operation="in" column="var_idx" var="var_idx" pipe="and" />
<group pipe="and">
<condition operation="like_prefix" column="value" var="cur_date" />
</group>
</conditions>
<navigation>
<index var="sort_index" default="value" order="asc" />
</navigation>
</query>
// 기존의 documents 테이블에서 document_extra_vars 테이블로 수정
// 필드는 document_srl만 가져옴
// var_idx가 1,2 인 것 중 날짜가 일치하는 것을 날짜순으로 정렬하여 가져옴
13. /xe/modules/planner/skins/lifepod/view_document.html
- line 63
<div>{zdate($oDocument->getExtraValue(1), 'Y.m.d H:i', false)} ~ {zdate($oDocument->getExtraValue(2), 'Y.m.d H:i', false)}</div>
lifepod.js 는 보기 좋게 줄바꿈 처리를 다 해둔 상태입니다.
-line 3097 ~3390 주석을 해제하면 휴일이 표시됩니다. (어떤분 위젯에서 퍼왔는데 기억이 안나네요 ㅠ.ㅠ)
BNU님께서 더 확실하게 수정해 주시면 좋겠지만.
제 실력이 부족하여 이정도까지밖에 수정이 안되네요.
그냥 돌아는 갑니다.. ^^;;;
위 내용 수정된 파일 첨부합니다. (xe 1.2 사용자분들에게 도움이 되시길 바랍니다 ^^)
// 누락된 부분이 있어 누락부분과 오타 부분 수정하여 다시 올립니다.
// 첨부 파일에서 write_form.html 은 수정이 안되어 있으니 참고 바랍니다.(추가 수정 누락)
- [2009/06/15] 묻고답하기 플래너 1.2.2용 질문드립니다. *2
- [2009/06/04] 묻고답하기 플래너 등록된 글 표시 박스 색깔 변경 *1
- [2009/01/23] 묻고답하기 BNU 님의 미니달력을 찾습니다. *4
- [2008/05/06] 묻고답하기 BNU님의 플래너에서 이번 달 일정만 뽑을 수 있는지...
댓글 9
-
띵야
2009.04.21 19:27
오웃~ 추천 열방!!!(이런 한 번 밖에 안 먹네요...^^;;) -
띵야
2009.04.21 20:04
윽... 고친 일정이 사라지는데요...^^;; -
개돌
2009.04.22 08:33
윽;;; 수정 됐었는데.. 파일 업로드 때문에 깔끔한 소스로 다시 만들면서 수정 부분 빼먹었나 보네요ㅠ.ㅠ
확인 해보고 다시 올리겠습니다.
아공;;;; 죄송합니다. -
개돌
2009.04.22 09:52
제가 테스트 해보니까 입력된 날짜 정보를 수정 페이지에서 제대로 가져 오지 못해서 날짜가 오늘 날짜로 바뀌 더군요.
수정 방법은
wite_form.html 에서<!--@if(!$oDocument->getExtraValue(1))-->
<!--@if($ymd)-->
{@ $oDocument->variables['extra_vars1'] = $ymd}
{@ $oDocument->variables['extra_vars2'] = $ymd}
<!--@else-->
{@ $oDocument->variables['extra_vars1'] = date('YmdH00')}
{@ $plus_h = sprintf('%02d', date('H') + 1)}
{@ $oDocument->variables['extra_vars2'] = date('Ymd'.$plus_h.'00')}
<!--@end-->
<!--@end--><input type="text" name="start_date" class="inputTypeText w100" readonly="readonly" value="<!--@if(!$oDocument->getExtraValue(1))-->{zdate($oDocument->get('extra_vars1'), 'Y/m/d H:i')}<!--@else-->{zdate($oDocument->getExtraValue(1), 'Y/m/d H:i')}<!--@end-->"> ~
<input type="text" name="end_date" class="inputTypeText w100" readonly="readonly" value="<!--@if(!$oDocument->getExtraValue(2))-->{zdate($oDocument->get('extra_vars2'), 'Y/m/d H:i')}<!--@else-->{zdate($oDocument->getExtraValue(2), 'Y/m/d H:i')}<!--@end-->">이렇게 해서 날짜 정보를 제대로 가져오도록 수정하였습니다
-
sakurastorm
2009.04.22 20:41
안녕하세요 개돌님 일단 pl8을 깐 다음에 첨부하신 파일을 덮어 씌우면 1.2.1에서도 pl8을 쓸 수 있는건가요? -
개돌
2009.04.23 09:08
제가 첨부한 파일은
pl7에 pl8 패치 파일 추가한 겁니다.
BNU님이 올려주신pl8 파일에는 패치된 파일만 있어서 그것만 설치하면 오류가 나더군요.어쨋든 현 상황에서 BNU님의 pl8파일만으로는 플래너 자체가 동작이 안되니 우선은 제가 올린 파일을 사용하시면 될겁니다.
write_form.html 부분을 수정을 못해서.. 그부분은 추가로 수정이 필요하실겁니다. 죄송합니다.(__) -
sotheb
2009.04.23 15:20
저는 1.1.5 까지 사용하다가, 1.2.0 부터 사용 불능 상태에 빠졌었는데, 올려주신 내용을 적용했지만, 정상적으로 적용이 안되네요.
이전에 쓴 글들이 모두 오늘 날짜로 보였다 안보였다 하고, 새글을 날짜 지정으로 써도 모두 오늘 날짜로 등록 되네요.
날짜가 지나도, 쓰여진 모든 글들이 오늘 날짜에 등록되 있는 증상이 ... ^^
그리고, 관리 메뉴에서 등록된 planner "재설정 필요" 가 적용이 되지 않는게 변함 없네요.
-
개돌
2009.04.23 17:36
이전에 쓴 글하고는 연동이 안될 겁니다.
이전에 BNU님이 만드신 플래너와 제가 수정한 플래너가 변경된 확장변수 때문에 형식이 다르거든요.
이전 데이터와의 연동은 제가 생각을 못했네요.새글의 경우는 날짜지정을 해도 오늘날짜로 적용이 된다는 건가요?
정리하자면 기존의 플래너와 연동을 한 경우 문제가 있다라는 결론이 되는군요 ;;
우선 저의 경우 새글을 작성하는데는 아무 문제가 없거든요...;;;;
그리고 재설정필요는 요 위에 말씀드린 것처럼 기존의 BNU님이 배포하신 플래너와 형식이 달라서 굳이 사용되지 않습니다. -
개돌
2009.04.28 08:58
백성찬님이 플래너 수정해서 올려주셨네요 ^^
모듈 다운로드 가시면 있어요백성찬님이 올려주신 플래너 1.2.2 사용하시면 위에 문제점들 모두 해결 되실듯 합니다.
제목 | 글쓴이 | 날짜 |
---|---|---|
묻고 답하기용 게시판 [1] | yunesb | 2009.01.24 |
음악판매 [5] | 물푸레646 | 2008.12.27 |
서브 메뉴 배경색 바꾸기 [4] | Chang-Jo(창조) | 2007.08.17 |
BGM 가로스크롤바 없애는 방법.. | 청개굴이 | 2009.06.03 |
글쓴이 이메일 정보 감추기 [2] | 대암지기 | 2007.11.22 |
BGM 쓰시는분 게시판 에서 첨부파일 다운받을때 끊어지시죠?ㅎㅎ [4] | 우리아기 | 2009.05.23 |
스프링노트 연동문제 [2] | nonoboy | 2009.05.21 |
별도 페이지 로그인방법 | cornet | 2009.05.21 |
까페 아이디 삭제후 동일 아이디로 생성하는 방법 | 키스메리 | 2009.05.15 |
winxp IE7 rwapm에서 한글이름파일 업로드 [12] | 공수래 | 2007.09.17 |
페이지 및 게시판 메뉴 경로 [2] | 자반튀김 | 2009.04.15 |
1.2.2 업데이트 이후 위젯이 출력안되시는 분들 [1] [1] | 반도체맨 | 2009.05.01 |
BNU님의 Planner XE 1.2 버젼(일정관리) [9] | 개돌 | 2009.04.21 |
[질문]회원가입시 음력생일입력 가능 한가요? [1] | 신정 | 2009.04.27 |
주민등록번호 입력 폼 추가 (1.1.5 기준) [39] | 개돌 | 2009.02.16 |
XE 위키에 최근 접속 페이지 정보 출력 | 개돌 | 2009.04.27 |
초보 xe1.1.5에대한질문 [3] | 울프 | 2009.04.26 |
졸졸이 스토커 가두어보기 2탄(보드우측에 포함된 것처럼) [1] | 갯가 | 2008.04.26 |
게시판에서 확장 변수를 쓰는 경우 1.2.0 이상 버전으로 업그레이드하기 전에 패치하시기 바랍니다. [5] | mooo | 2009.04.14 |
홈페이지 타이틀이 $user_lang->home ,freeboard등으로 나오는 문제 수정방법(자체해결) [1] | 정박사닷컴 | 2009.04.18 |