삭제
git-svn-id: http://xe-core.googlecode.com/svn/sandbox@2327 201d5d3c-b55e-5fd7-737f-ddc643e51545
359
modules/board/board.admin.controller.php
Normal file
|
|
@ -0,0 +1,359 @@
|
|||
<?php
|
||||
/**
|
||||
* @class boardAdminController
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief board 모듈의 admin controller class
|
||||
**/
|
||||
|
||||
class boardAdminController extends board {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 관리자가 글 선택시 세션에 담음
|
||||
**/
|
||||
function procBoardAdminAddCart() {
|
||||
$document_srl = Context::get('srl');
|
||||
$check_flag = Context::get('check_flag');
|
||||
if(!$document_srl || !in_array($check_flag, array('add','remove'))) return;
|
||||
|
||||
$flag_list = $_SESSION['document_management'][$this->module_srl];
|
||||
|
||||
if($check_flag == 'remove') unset($flag_list[$document_srl]);
|
||||
else $flag_list[$document_srl] = true;
|
||||
|
||||
$_SESSION['document_management'][$this->module_srl] = $flag_list;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 세션에 담긴 선택글의 이동/ 삭제
|
||||
**/
|
||||
function procBoardAdminManageCheckedDocument() {
|
||||
$type = Context::get('type');
|
||||
$module_srl = Context::get('target_board');
|
||||
$message_content = Context::get('message_content');
|
||||
if($message_content) $message_content = nl2br($message_content);
|
||||
|
||||
$flag_list = $_SESSION['document_management'][$this->module_srl];
|
||||
|
||||
$document_srl_list = array_keys($flag_list);
|
||||
$document_srl_count = count($document_srl_list);
|
||||
|
||||
// 쪽지 발송
|
||||
if($message_content) {
|
||||
|
||||
$oMemberController = &getController('member');
|
||||
$oDocumentModel = &getModel('document');
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$title = cut_str($message_content,10,'...');
|
||||
$sender_member_srl = $logged_info->member_srl;
|
||||
|
||||
for($i=0;$i<$document_srl_count;$i++) {
|
||||
$document_srl = $document_srl_list[$i];
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
if(!$oDocument->get('member_srl') || $oDocument->get('member_srl')==$sender_member_srl) continue;
|
||||
|
||||
if($type=='move') $purl = sprintf("<a href=\"%s\" onclick=\"window.open(this.href);return false;\">%s</a>", $oDocument->getPermanentUrl(), $oDocument->getPermanentUrl());
|
||||
else $purl = "";
|
||||
$content .= sprintf("<div>%s</div><hr />%s<div style=\"font-weight:bold\">%s</div>%s",$message_content, $purl, $oDocument->getTitleText(), $oDocument->getContent());
|
||||
|
||||
$oMemberController->sendMessage($sender_member_srl, $oDocument->get('member_srl'), $title, $content, false);
|
||||
}
|
||||
}
|
||||
|
||||
if($type == 'move') {
|
||||
$oDocumentAdminController = &getAdminController('document');
|
||||
if(!$module_srl) return new Object(-1, 'fail_to_move');
|
||||
else {
|
||||
$output = $oDocumentAdminController->moveDocumentModule($document_srl_list, $module_srl, $this->module_srl);
|
||||
if(!$output->toBool()) return new Object(-1, 'fail_to_move');
|
||||
$msg_code = 'success_moved';
|
||||
$_SESSION['document_management'] = null;
|
||||
}
|
||||
|
||||
} elseif($type =='delete') {
|
||||
$oDB = &DB::getInstance();
|
||||
$oDB->begin();
|
||||
$oDocumentController = &getController('document');
|
||||
for($i=0;$i<$document_srl_count;$i++) {
|
||||
$document_srl = $document_srl_list[$i];
|
||||
$output = $oDocumentController->deleteDocument($document_srl, true);
|
||||
if(!$output->toBool()) return new Object(-1, 'fail_to_delete');
|
||||
}
|
||||
$oDB->commit();
|
||||
$msg_code = 'success_deleted';
|
||||
$_SESSION['document_management'] = null;
|
||||
}
|
||||
|
||||
$this->setMessage($msg_code);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 권한 추가
|
||||
**/
|
||||
function procBoardAdminInsertGrant() {
|
||||
$module_srl = Context::get('module_srl');
|
||||
|
||||
// 현 모듈의 권한 목록을 가져옴
|
||||
$grant_list = $this->xml_info->grant;
|
||||
|
||||
if(count($grant_list)) {
|
||||
foreach($grant_list as $key => $val) {
|
||||
$group_srls = Context::get($key);
|
||||
if($group_srls) $arr_grant[$key] = explode('|@|',$group_srls);
|
||||
}
|
||||
$grants = serialize($arr_grant);
|
||||
}
|
||||
|
||||
$oModuleController = &getController('module');
|
||||
$oModuleController->updateModuleGrant($module_srl, $grants);
|
||||
|
||||
$this->add('module_srl',Context::get('module_srl'));
|
||||
$this->setMessage('success_registed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 스킨 정보 업데이트
|
||||
**/
|
||||
function procBoardAdminUpdateSkinInfo() {
|
||||
// module_srl에 해당하는 정보들을 가져오기
|
||||
$module_srl = Context::get('module_srl');
|
||||
$oModuleModel = &getModel('module');
|
||||
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
|
||||
$skin = $module_info->skin;
|
||||
|
||||
// 스킨의 정보를 구해옴 (extra_vars를 체크하기 위해서)
|
||||
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin);
|
||||
|
||||
// 입력받은 변수들을 체크 (mo, act, module_srl, page등 기본적인 변수들 없앰)
|
||||
$obj = Context::getRequestVars();
|
||||
unset($obj->act);
|
||||
unset($obj->module_srl);
|
||||
unset($obj->page);
|
||||
|
||||
// 원 skin_info에서 extra_vars의 type이 image일 경우 별도 처리를 해줌
|
||||
if($skin_info->extra_vars) {
|
||||
foreach($skin_info->extra_vars as $vars) {
|
||||
if($vars->type!='image') continue;
|
||||
|
||||
$image_obj = $obj->{$vars->name};
|
||||
|
||||
// 삭제 요청에 대한 변수를 구함
|
||||
$del_var = $obj->{"del_".$vars->name};
|
||||
unset($obj->{"del_".$vars->name});
|
||||
if($del_var == 'Y') {
|
||||
@unlink($module_info->{$vars->name});
|
||||
continue;
|
||||
}
|
||||
|
||||
// 업로드 되지 않았다면 이전 데이터를 그대로 사용
|
||||
if(!$image_obj['tmp_name']) {
|
||||
$obj->{$vars->name} = $module_info->{$vars->name};
|
||||
continue;
|
||||
}
|
||||
|
||||
// 정상적으로 업로드된 파일이 아니면 무시
|
||||
if(!is_uploaded_file($image_obj['tmp_name'])) {
|
||||
unset($obj->{$vars->name});
|
||||
continue;
|
||||
}
|
||||
|
||||
// 이미지 파일이 아니어도 무시
|
||||
if(!eregi("\.(jpg|jpeg|gif|png)$", $image_obj['name'])) {
|
||||
unset($obj->{$vars->name});
|
||||
continue;
|
||||
}
|
||||
|
||||
// 경로를 정해서 업로드
|
||||
$path = sprintf("./files/attach/images/%s/", $module_srl);
|
||||
|
||||
// 디렉토리 생성
|
||||
if(!FileHandler::makeDir($path)) return false;
|
||||
|
||||
$filename = $path.$image_obj['name'];
|
||||
|
||||
// 파일 이동
|
||||
if(!move_uploaded_file($image_obj['tmp_name'], $filename)) {
|
||||
unset($obj->{$vars->name});
|
||||
continue;
|
||||
}
|
||||
|
||||
// 변수를 바꿈
|
||||
unset($obj->{$vars->name});
|
||||
$obj->{$vars->name} = $filename;
|
||||
}
|
||||
}
|
||||
|
||||
// serialize하여 저장
|
||||
$skin_vars = serialize($obj);
|
||||
|
||||
$oModuleController = &getController('module');
|
||||
$oModuleController->updateModuleSkinVars($module_srl, $skin_vars);
|
||||
|
||||
$this->setLayoutPath('./common/tpl');
|
||||
$this->setLayoutFile('default_layout.html');
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile("top_refresh.html");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 게시판 추가
|
||||
**/
|
||||
function procBoardAdminInsertBoard($args = null) {
|
||||
// 일단 입력된 값들을 모두 받아서 db 입력항목과 그외 것으로 분리
|
||||
if(!$args) {
|
||||
$args = Context::gets('module_srl','module_category_srl','board_name','layout_srl','skin','browser_title','description','is_default','header_text','footer_text','admin_id','open_rss');
|
||||
}
|
||||
|
||||
$args->module = 'board';
|
||||
$args->mid = $args->board_name;
|
||||
unset($args->board_name);
|
||||
if($args->is_default!='Y') $args->is_default = 'N';
|
||||
|
||||
// 기본 값외의 것들을 정리
|
||||
$extra_var = delObjectVars(Context::getRequestVars(), $args);
|
||||
if($extra_var->use_category!='Y') $extra_var->use_category = 'N';
|
||||
unset($extra_var->act);
|
||||
unset($extra_var->page);
|
||||
unset($extra_var->board_name);
|
||||
unset($extra_var->module_srl);
|
||||
|
||||
// 확장변수(20개로 제한된 고정 변수) 체크
|
||||
$user_defined_extra_vars = array();
|
||||
foreach($extra_var as $key => $val) {
|
||||
if(substr($key,0,11)!='extra_vars_') continue;
|
||||
preg_match('/^extra_vars_([0-9]+)_(.*)$/i', $key, $matches);
|
||||
if(!$matches[1] || !$matches[2]) continue;
|
||||
|
||||
$user_defined_extra_vars[$matches[1]]->{$matches[2]} = $val;
|
||||
unset($extra_var->{$key});
|
||||
}
|
||||
for($i=1;$i<=20;$i++) if(!$user_defined_extra_vars[$i]->name) unset($user_defined_extra_vars[$i]);
|
||||
$extra_var->extra_vars = $user_defined_extra_vars;
|
||||
|
||||
// module_srl이 넘어오면 원 모듈이 있는지 확인
|
||||
if($args->module_srl) {
|
||||
$oModuleModel = &getModel('module');
|
||||
$module_info = $oModuleModel->getModuleInfoByModuleSrl($args->module_srl);
|
||||
|
||||
// 만약 원래 모듈이 없으면 새로 입력하기 위한 처리
|
||||
if($module_info->module_srl != $args->module_srl) unset($args->module_srl);
|
||||
}
|
||||
|
||||
// $extra_var를 serialize
|
||||
$args->extra_vars = serialize($extra_var);
|
||||
|
||||
// module 모듈의 controller 객체 생성
|
||||
$oModuleController = &getController('module');
|
||||
|
||||
// is_default=='Y' 이면
|
||||
if($args->is_default=='Y') $oModuleController->clearDefaultModule();
|
||||
|
||||
// module_srl의 값에 따라 insert/update
|
||||
if(!$args->module_srl) {
|
||||
$output = $oModuleController->insertModule($args);
|
||||
$msg_code = 'success_registed';
|
||||
|
||||
// 파일업로드, 댓글 파일업로드, 관리에 대한 권한 지정
|
||||
if($output->toBool()) {
|
||||
$oMemberModel = &getModel('member');
|
||||
$admin_group = $oMemberModel->getAdminGroup();
|
||||
$admin_group_srl = $admin_group->group_srl;
|
||||
|
||||
$module_srl = $output->get('module_srl');
|
||||
$grants = serialize(array('fileupload'=>array($admin_group_srl), 'comment_fileupload'=>array($admin_group_srl), 'manager'=>array($admin_group_srl)));
|
||||
|
||||
$oModuleController->updateModuleGrant($module_srl, $grants);
|
||||
}
|
||||
} else {
|
||||
$output = $oModuleController->updateModule($args);
|
||||
$msg_code = 'success_updated';
|
||||
}
|
||||
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->add('page',Context::get('page'));
|
||||
$this->add('module_srl',$output->get('module_srl'));
|
||||
$this->setMessage($msg_code);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 게시판 삭제
|
||||
**/
|
||||
function procBoardAdminDeleteBoard() {
|
||||
$module_srl = Context::get('module_srl');
|
||||
|
||||
// 원본을 구해온다
|
||||
$oModuleController = &getController('module');
|
||||
$output = $oModuleController->deleteModule($module_srl);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->add('module','board');
|
||||
$this->add('page',Context::get('page'));
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 카테고리 추가
|
||||
**/
|
||||
function procBoardAdminInsertCategory() {
|
||||
// 일단 입력된 값들을 모두 받아서 db 입력항목과 그외 것으로 분리
|
||||
$module_srl = Context::get('module_srl');
|
||||
$category_title = Context::get('category_title');
|
||||
|
||||
// module_srl이 있으면 원본을 구해온다
|
||||
$oDocumentController = &getAdminController('document');
|
||||
$output = $oDocumentController->insertCategory($module_srl, $category_title);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->add('page',Context::get('page'));
|
||||
$this->add('module_srl',$module_srl);
|
||||
$this->setMessage('success_registed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 카테고리의 내용 수정
|
||||
**/
|
||||
function procBoardAdminUpdateCategory() {
|
||||
$module_srl = Context::get('module_srl');
|
||||
$category_srl = Context::get('category_srl');
|
||||
$mode = Context::get('mode');
|
||||
|
||||
$oDocumentModel = &getModel('document');
|
||||
$oDocumentController = &getAdminController('document');
|
||||
|
||||
switch($mode) {
|
||||
case 'up' :
|
||||
$output = $oDocumentController->moveCategoryUp($category_srl);
|
||||
$msg_code = 'success_moved';
|
||||
break;
|
||||
case 'down' :
|
||||
$output = $oDocumentController->moveCategoryDown($category_srl);
|
||||
$msg_code = 'success_moved';
|
||||
break;
|
||||
case 'delete' :
|
||||
$output = $oDocumentController->deleteCategory($category_srl);
|
||||
$msg_code = 'success_deleted';
|
||||
break;
|
||||
case 'update' :
|
||||
$selected_category = $oDocumentModel->getCategory($category_srl);
|
||||
$args->category_srl = $selected_category->category_srl;
|
||||
$args->title = Context::get('category_title');
|
||||
$args->list_order = $selected_category->list_order;
|
||||
$output = $oDocumentController->updateCategory($args);
|
||||
$msg_code = 'success_updated';
|
||||
break;
|
||||
}
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->add('module_srl', $module_srl);
|
||||
$this->setMessage($msg_code);
|
||||
}
|
||||
}
|
||||
?>
|
||||
241
modules/board/board.admin.view.php
Normal file
|
|
@ -0,0 +1,241 @@
|
|||
<?php
|
||||
/**
|
||||
* @class boardAdminView
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief board 모듈의 admin view class
|
||||
**/
|
||||
|
||||
class boardAdminView extends board {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
*
|
||||
* board 모듈은 일반 사용과 관리자용으로 나누어진다.\n
|
||||
**/
|
||||
function init() {
|
||||
// module_srl이 있으면 미리 체크하여 존재하는 모듈이면 module_info 세팅
|
||||
$module_srl = Context::get('module_srl');
|
||||
if(!$module_srl && $this->module_srl) {
|
||||
$module_srl = $this->module_srl;
|
||||
Context::set('module_srl', $module_srl);
|
||||
}
|
||||
|
||||
// module model 객체 생성
|
||||
$oModuleModel = &getModel('module');
|
||||
|
||||
// module_srl이 넘어오면 해당 모듈의 정보를 미리 구해 놓음
|
||||
if($module_srl) {
|
||||
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
|
||||
if(!$module_info) {
|
||||
Context::set('module_srl','');
|
||||
$this->act = 'list';
|
||||
} else {
|
||||
$this->module_info = $module_info;
|
||||
Context::set('module_info',$module_info);
|
||||
}
|
||||
}
|
||||
|
||||
// 모듈 카테고리 목록을 구함
|
||||
$module_category = $oModuleModel->getModuleCategories();
|
||||
Context::set('module_category', $module_category);
|
||||
|
||||
// 템플릿 경로 지정 (board의 경우 tpl에 관리자용 템플릿 모아놓음)
|
||||
$template_path = sprintf("%stpl/",$this->module_path);
|
||||
$this->setTemplatePath($template_path);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 게시판 관리 목록 보여줌
|
||||
**/
|
||||
function dispBoardAdminContent() {
|
||||
// 등록된 board 모듈을 불러와 세팅
|
||||
$args->sort_index = "module_srl";
|
||||
$args->page = Context::get('page');
|
||||
$args->list_count = 40;
|
||||
$args->page_count = 10;
|
||||
$args->s_module_category_srl = Context::get('module_category_srl');
|
||||
$output = executeQuery('board.getBoardList', $args);
|
||||
|
||||
// 템플릿에 쓰기 위해서 context::set
|
||||
Context::set('total_count', $output->total_count);
|
||||
Context::set('total_page', $output->total_page);
|
||||
Context::set('page', $output->page);
|
||||
Context::set('board_list', $output->data);
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
// 템플릿 파일 지정
|
||||
$this->setTemplateFile('index');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 선택된 게시판의 정보 출력
|
||||
**/
|
||||
function dispBoardAdminBoardInfo() {
|
||||
|
||||
// module_srl 값이 없다면 그냥 index 페이지를 보여줌
|
||||
if(!Context::get('module_srl')) return $this->dispBoardAdminContent();
|
||||
|
||||
// 레이아웃이 정해져 있다면 레이아웃 정보를 추가해줌(layout_title, layout)
|
||||
if($this->module_info->layout_srl) {
|
||||
$oLayoutModel = &getModel('layout');
|
||||
$layout_info = $oLayoutModel->getLayout($this->module_info->layout_srl);
|
||||
$this->module_info->layout = $layout_info->layout;
|
||||
$this->module_info->layout_title = $layout_info->layout_title;
|
||||
}
|
||||
|
||||
// 정해진 스킨이 있으면 해당 스킨의 정보를 구함
|
||||
if($this->module_info->skin) {
|
||||
$oModuleModel = &getModel('module');
|
||||
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $this->module_info->skin);
|
||||
$this->module_info->skin_title = $skin_info->title;
|
||||
}
|
||||
|
||||
// 템플릿 파일 지정
|
||||
$this->setTemplateFile('board_info');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 게시판 추가 폼 출력
|
||||
**/
|
||||
function dispBoardAdminInsertBoard() {
|
||||
|
||||
// 스킨 목록을 구해옴
|
||||
$oModuleModel = &getModel('module');
|
||||
$skin_list = $oModuleModel->getSkins($this->module_path);
|
||||
Context::set('skin_list',$skin_list);
|
||||
|
||||
// 레이아웃 목록을 구해옴
|
||||
$oLayoutMode = &getModel('layout');
|
||||
$layout_list = $oLayoutMode->getLayoutList();
|
||||
Context::set('layout_list', $layout_list);
|
||||
|
||||
// 템플릿 파일 지정
|
||||
$this->setTemplateFile('board_insert');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 게시판 삭제 화면 출력
|
||||
**/
|
||||
function dispBoardAdminDeleteBoard() {
|
||||
|
||||
if(!Context::get('module_srl')) return $this->dispBoardAdminContent();
|
||||
|
||||
$module_info = Context::get('module_info');
|
||||
|
||||
$oDocumentModel = &getModel('document');
|
||||
$document_count = $oDocumentModel->getDocumentCount($module_info->module_srl);
|
||||
$module_info->document_count = $document_count;
|
||||
|
||||
Context::set('module_info',$module_info);
|
||||
|
||||
// 템플릿 파일 지정
|
||||
$this->setTemplateFile('board_delete');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 스킨 정보 보여줌
|
||||
**/
|
||||
function dispBoardAdminSkinInfo() {
|
||||
|
||||
// 현재 선택된 모듈의 스킨의 정보 xml 파일을 읽음
|
||||
$module_info = Context::get('module_info');
|
||||
$skin = $module_info->skin;
|
||||
|
||||
$oModuleModel = &getModel('module');
|
||||
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin);
|
||||
|
||||
// skin_info에 extra_vars 값을 지정
|
||||
if(count($skin_info->extra_vars)) {
|
||||
foreach($skin_info->extra_vars as $key => $val) {
|
||||
$name = $val->name;
|
||||
$type = $val->type;
|
||||
$value = $module_info->{$name};
|
||||
if($type=="checkbox"&&!$value) $value = array();
|
||||
$skin_info->extra_vars[$key]->value= $value;
|
||||
}
|
||||
}
|
||||
|
||||
Context::set('skin_info', $skin_info);
|
||||
$this->setTemplateFile('skin_info');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 카테고리의 정보 출력
|
||||
**/
|
||||
function dispBoardAdminCategoryInfo() {
|
||||
|
||||
// module_srl을 구함
|
||||
$module_srl = Context::get('module_srl');
|
||||
|
||||
// 카테고리의 목록을 구해옴
|
||||
$oDocumentModel = &getModel('document');
|
||||
$category_list = $oDocumentModel->getCategoryList($module_srl);
|
||||
Context::set('category_list', $category_list);
|
||||
|
||||
// 수정하려는 카테고리가 있다면해당 카테고리의 정보를 가져옴
|
||||
$category_srl = Context::get('category_srl');
|
||||
|
||||
if($category_srl) {
|
||||
|
||||
$selected_category = $oDocumentModel->getCategory($category_srl);
|
||||
|
||||
if(!$selected_category) Context::set('category_srl','');
|
||||
else Context::set('selected_category',$selected_category);
|
||||
|
||||
$this->setTemplateFile('category_update_form');
|
||||
|
||||
} else {
|
||||
|
||||
$this->setTemplateFile('category_list');
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 권한 목록 출력
|
||||
**/
|
||||
function dispBoardAdminGrantInfo() {
|
||||
// module_srl을 구함
|
||||
$module_srl = Context::get('module_srl');
|
||||
|
||||
// module.xml에서 권한 관련 목록을 구해옴
|
||||
$grant_list = $this->xml_info->grant;
|
||||
Context::set('grant_list', $grant_list);
|
||||
|
||||
// 권한 그룹의 목록을 가져온다
|
||||
$oMemberModel = &getModel('member');
|
||||
$group_list = $oMemberModel->getGroups();
|
||||
Context::set('group_list', $group_list);
|
||||
|
||||
$this->setTemplateFile('grant_list');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 선택한 목록 출력
|
||||
**/
|
||||
function dispBoardAdminManageDocument() {
|
||||
// 선택한 목록을 세션에서 가져옴
|
||||
$flag_list = $_SESSION['document_management'][$this->module_srl];
|
||||
|
||||
// 목록이 있으면 게시글을 가져옴
|
||||
if(count($flag_list)) $document_srl_list = array_keys($flag_list);
|
||||
if(is_array($document_srl_list) && count($document_srl_list)) {
|
||||
$oDocumentModel = &getModel('document');
|
||||
$document_list = $oDocumentModel->getDocuments($document_srl_list, $this->grant->is_admin);
|
||||
Context::set('document_list', $document_list);
|
||||
}
|
||||
|
||||
// 게시판의 목록을 가져옴
|
||||
$output = executeQuery('board.getAllBoard', $args);
|
||||
$board_list = $output->data;
|
||||
if($board_list && !is_array($board_list)) $board_list = array($board_list);
|
||||
Context::set('board_list', $board_list);
|
||||
|
||||
// 팝업 레이아웃 선택
|
||||
$this->setLayoutPath('./common/tpl');
|
||||
$this->setLayoutFile('popup_layout');
|
||||
|
||||
$this->setTemplateFile('checked_list');
|
||||
}
|
||||
}
|
||||
?>
|
||||
76
modules/board/board.class.php
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
<?php
|
||||
/**
|
||||
* @class board
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief board 모듈의 high class
|
||||
**/
|
||||
|
||||
class board extends ModuleObject {
|
||||
|
||||
var $search_option = array('title','content','title_content','user_name','nick_name','user_id','tag'); ///< 검색 옵션
|
||||
|
||||
var $skin = "default"; ///< 스킨 이름
|
||||
var $list_count = 20; ///< 한 페이지에 나타날 글의 수
|
||||
var $page_count = 10; ///< 페이지의 수
|
||||
var $category_list = NULL; ///< 카테고리 목록
|
||||
|
||||
var $editor = 'default'; ///< 에디터 종류
|
||||
|
||||
/**
|
||||
* @brief 설치시 추가 작업이 필요할시 구현
|
||||
**/
|
||||
function moduleInstall() {
|
||||
// action forward에 등록 (관리자 모드에서 사용하기 위함)
|
||||
$oModuleController = &getController('module');
|
||||
$oModuleController->insertActionForward('board', 'view', 'dispBoardAdminContent');
|
||||
$oModuleController->insertActionForward('board', 'view', 'dispBoardAdminBoardInfo');
|
||||
$oModuleController->insertActionForward('board', 'view', 'dispBoardAdminInsertBoard');
|
||||
$oModuleController->insertActionForward('board', 'view', 'dispBoardAdminDeleteBoard');
|
||||
$oModuleController->insertActionForward('board', 'view', 'dispBoardAdminSkinInfo');
|
||||
$oModuleController->insertActionForward('board', 'view', 'dispBoardAdminCategoryInfo');
|
||||
$oModuleController->insertActionForward('board', 'view', 'dispBoardAdminGrantInfo');
|
||||
$oModuleController->insertActionForward('board', 'controller', 'procBoardAdminUpdateSkinInfo');
|
||||
|
||||
// 기본 게시판 생성
|
||||
$output = executeQuery('module.getDefaultMidInfo');
|
||||
if($output->data) return new Object();
|
||||
|
||||
// 기본 모듈을 찾음
|
||||
$oModuleModel = &getModel('module');
|
||||
$module_info = $oModuleModel->getModuleInfoByMid();
|
||||
|
||||
// 기본 모듈이 없으면 새로 등록
|
||||
if(!$module_info->module_srl) {
|
||||
$args->board_name = 'board';
|
||||
$args->browser_title = 'test module';
|
||||
$args->is_default = 'Y';
|
||||
$args->skin = 'xe_list';
|
||||
|
||||
// board 라는 이름의 모듈이 있는지 확인
|
||||
$module_info = $oModuleModel->getModuleInfoByMid($args->board_name);
|
||||
if($module_info->module_srl) $args->module_srl = $module_info->module_srl;
|
||||
|
||||
// 게시판 controller 생성
|
||||
$oBoardController = &getAdminController('board');
|
||||
$oBoardController->procBoardAdminInsertBoard($args);
|
||||
}
|
||||
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
**/
|
||||
function checkUpdate() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 업데이트 실행
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
return new Object();
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
225
modules/board/board.controller.php
Normal file
|
|
@ -0,0 +1,225 @@
|
|||
<?php
|
||||
/**
|
||||
* @class boardController
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief board 모듈의 Controller class
|
||||
**/
|
||||
|
||||
class boardController extends board {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 문서 입력
|
||||
**/
|
||||
function procBoardInsertDocument() {
|
||||
// 권한 체크
|
||||
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';
|
||||
|
||||
// document module의 model 객체 생성
|
||||
$oDocumentModel = &getModel('document');
|
||||
|
||||
// document module의 controller 객체 생성
|
||||
$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;
|
||||
|
||||
// 트랙백이 있으면 트랙백 발송
|
||||
$trackback_url = Context::get('trackback_url');
|
||||
$trackback_charset = Context::get('trackback_charset');
|
||||
if($trackback_url) {
|
||||
$oTrackbackController = &getController('trackback');
|
||||
$oTrackbackController->sendTrackback($obj, $trackback_url, $trackback_charset);
|
||||
}
|
||||
|
||||
// 결과를 리턴
|
||||
$this->add('mid', Context::get('mid'));
|
||||
$this->add('document_srl', $output->get('document_srl'));
|
||||
|
||||
// 성공 메세지 등록
|
||||
$this->setMessage($msg_code);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 문서 삭제
|
||||
**/
|
||||
function procBoardDeleteDocument() {
|
||||
// 문서 번호 확인
|
||||
$document_srl = Context::get('document_srl');
|
||||
|
||||
// 문서 번호가 없다면 오류 발생
|
||||
if(!$document_srl) return $this->doError('msg_invalid_document');
|
||||
|
||||
// document module model 객체 생성
|
||||
$oDocumentController = &getController('document');
|
||||
|
||||
// 삭제 시도
|
||||
$output = $oDocumentController->deleteDocument($document_srl, $this->grant->manager);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
// 성공 메세지 등록
|
||||
$this->add('mid', Context::get('mid'));
|
||||
$this->add('page', $output->get('page'));
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 추천
|
||||
**/
|
||||
function procBoardVoteDocument() {
|
||||
// document module controller 객체 생성
|
||||
$oDocumentController = &getController('document');
|
||||
|
||||
$document_srl = Context::get('document_srl');
|
||||
return $oDocumentController->updateVotedCount($document_srl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 코멘트 추가
|
||||
**/
|
||||
function procBoardInsertComment() {
|
||||
// 권한 체크
|
||||
if(!$this->grant->write_comment) return new Object(-1, 'msg_not_permitted');
|
||||
|
||||
// 댓글 입력에 필요한 데이터 추출
|
||||
$obj = Context::gets('document_srl','comment_srl','parent_srl','content','password','nick_name','nick_name','member_srl','email_address','homepage');
|
||||
$obj->module_srl = $this->module_srl;
|
||||
|
||||
// comment 모듈의 model 객체 생성
|
||||
$oCommentModel = &getModel('comment');
|
||||
|
||||
// comment 모듈의 controller 객체 생성
|
||||
$oCommentController = &getController('comment');
|
||||
|
||||
// comment_srl이 존재하는지 체크
|
||||
$comment = $oCommentModel->getComment($obj->comment_srl, $this->grant->manager);
|
||||
|
||||
// comment_srl이 없을 경우 신규 입력
|
||||
if($comment->comment_srl != $obj->comment_srl) {
|
||||
|
||||
// parent_srl이 있으면 답변으로
|
||||
if($obj->parent_srl) {
|
||||
$parent_comment = $oCommentModel->getComment($obj->parent_srl);
|
||||
if(!$parent_comment->comment_srl) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
$output = $oCommentController->insertComment($obj);
|
||||
|
||||
// 없으면 신규
|
||||
} else {
|
||||
$output = $oCommentController->insertComment($obj);
|
||||
}
|
||||
|
||||
// comment_srl이 있으면 수정으로
|
||||
} else {
|
||||
$obj->parent_srl = $comment->parent_srl;
|
||||
$output = $oCommentController->updateComment($obj, $this->grant->manager);
|
||||
$comment_srl = $obj->comment_srl;
|
||||
}
|
||||
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_registed');
|
||||
$this->add('mid', Context::get('mid'));
|
||||
$this->add('document_srl', $obj->document_srl);
|
||||
$this->add('comment_srl', $comment_srl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 코멘트 삭제
|
||||
**/
|
||||
function procBoardDeleteComment() {
|
||||
// 댓글 번호 확인
|
||||
$comment_srl = Context::get('comment_srl');
|
||||
if(!$comment_srl) return $this->doError('msg_invalid_request');
|
||||
|
||||
// comment 모듈의 controller 객체 생성
|
||||
$oCommentController = &getController('comment');
|
||||
|
||||
$output = $oCommentController->deleteComment($comment_srl, $this->grant->manager);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->add('mid', Context::get('mid'));
|
||||
$this->add('page', Context::get('page'));
|
||||
$this->add('document_srl', $output->get('document_srl'));
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 엮인글 삭제
|
||||
**/
|
||||
function procBoardDeleteTrackback() {
|
||||
$trackback_srl = Context::get('trackback_srl');
|
||||
|
||||
// trackback module의 controller 객체 생성
|
||||
$oTrackbackController = &getController('trackback');
|
||||
$output = $oTrackbackController->deleteTrackback($trackback_srl, $this->grant->manager);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->add('mid', Context::get('mid'));
|
||||
$this->add('page', Context::get('page'));
|
||||
$this->add('document_srl', $output->get('document_srl'));
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 문서와 댓글의 비밀번호를 확인
|
||||
**/
|
||||
function procBoardVerificationPassword() {
|
||||
// 비밀번호와 문서 번호를 받음
|
||||
$password = md5(Context::get('password'));
|
||||
|
||||
$document_srl = Context::get('document_srl');
|
||||
$comment_srl = Context::get('comment_srl');
|
||||
|
||||
// comment_srl이 있을 경우 댓글이 대상
|
||||
if($comment_srl) {
|
||||
// 문서번호에 해당하는 글이 있는지 확인
|
||||
$oCommentModel = &getModel('comment');
|
||||
$data = $oCommentModel->getComment($comment_srl);
|
||||
if(!$data) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
// 문서의 비밀번호와 입력한 비밀번호의 비교
|
||||
if($data->password != $password) return new Object(-1, 'msg_invalid_password');
|
||||
|
||||
$oCommentController = &getController('comment');
|
||||
$oCommentController->addGrant($comment_srl);
|
||||
} else {
|
||||
// 문서번호에 해당하는 글이 있는지 확인
|
||||
$oDocumentModel = &getModel('document');
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
if(!$oDocument->isExists()) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
// 문서의 비밀번호와 입력한 비밀번호의 비교
|
||||
if($oDocument->get('password') != $password) return new Object(-1, 'msg_invalid_password');
|
||||
|
||||
$oDocument->setGrant();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
370
modules/board/board.view.php
Normal file
|
|
@ -0,0 +1,370 @@
|
|||
<?php
|
||||
/**
|
||||
* @class boardView
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief board 모듈의 View class
|
||||
**/
|
||||
|
||||
class boardView extends board {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
*
|
||||
* board 모듈은 일반 사용과 관리자용으로 나누어진다.\n
|
||||
**/
|
||||
function init() {
|
||||
// 카테고리를 사용하는지 확인후 사용시 카테고리 목록을 구해와서 Context에 세팅
|
||||
if($this->module_info->use_category=='Y') {
|
||||
$oDocumentModel = &getModel('document');
|
||||
$this->category_list = $oDocumentModel->getCategoryList($this->module_srl);
|
||||
Context::set('category_list', $this->category_list);
|
||||
}
|
||||
|
||||
// 템플릿에서 사용할 변수를 Context::set()
|
||||
if($this->module_srl) Context::set('module_srl',$this->module_srl);
|
||||
|
||||
Context::set('module_info',$this->module_info);
|
||||
|
||||
// 기본 모듈 정보들 설정
|
||||
$this->list_count = $this->module_info->list_count?$this->module_info->list_count:20;
|
||||
$this->page_count = $this->module_info->page_count?$this->module_info->page_count:10;
|
||||
|
||||
// 스킨 템플릿 경로 지정
|
||||
$template_path = sprintf("%sskins/%s/",$this->module_path, $this->module_info->skin);
|
||||
$this->setTemplatePath($template_path);
|
||||
|
||||
// rss url
|
||||
if($this->module_info->open_rss != 'N') Context::set('rss_url', getUrl('','mid',$this->mid,'act','rss'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 목록 및 선택된 글 출력
|
||||
**/
|
||||
function dispBoardContent() {
|
||||
// 권한 체크
|
||||
if(!$this->grant->list) return $this->dispBoardMessage('msg_not_permitted');
|
||||
|
||||
// 템플릿에서 사용할 검색옵션 세팅
|
||||
$count_search_option = count($this->search_option);
|
||||
for($i=0;$i<$count_search_option;$i++) {
|
||||
$search_option[$this->search_option[$i]] = Context::getLang($this->search_option[$i]);
|
||||
}
|
||||
|
||||
// 확장변수에서도 검색이 설정되어 있는지 확인
|
||||
for($i=1;$i<=20;$i++) {
|
||||
$ex_name = $this->module_info->extra_vars[$i]->name;
|
||||
$ex_search = $this->module_info->extra_vars[$i]->search;
|
||||
if($ex_name && $ex_search == 'Y') {
|
||||
$search_option['extra_vars'.$i] = $ex_name;
|
||||
}
|
||||
}
|
||||
Context::set('search_option', $search_option);
|
||||
|
||||
// 목록 구현에 필요한 변수들을 가져온다
|
||||
$document_srl = Context::get('document_srl');
|
||||
$page = Context::get('page');
|
||||
|
||||
// document 객체를 생성. 기본 데이터 구조의 경우 document모듈만 쓰면 만사 해결.. -_-;
|
||||
$oDocumentModel = &getModel('document');
|
||||
|
||||
// 선택된 문서 표시를 위한 객체 생성
|
||||
$oDocument = $oDocumentModel->getDocument(0, $this->grant->manager);
|
||||
|
||||
// document_srl이 있다면 해당 글을 구해와서 $oDocument로 세팅
|
||||
if($this->grant->view && $document_srl) {
|
||||
|
||||
// 글을 구함
|
||||
$oDocument->setDocument($document_srl);
|
||||
if($this->grant->manager) $oDocument->setGrant();
|
||||
|
||||
if(!$oDocument->isExists()) {
|
||||
Context::set('document_srl','',true);
|
||||
} else {
|
||||
// 브라우저 타이틀 설정
|
||||
Context::setBrowserTitle($oDocument->getTitleText());
|
||||
|
||||
// 조회수 증가
|
||||
$oDocument->updateReadedCount();
|
||||
}
|
||||
|
||||
}
|
||||
Context::set('oDocument', $oDocument);
|
||||
|
||||
// 댓글에디터 설정
|
||||
$this->setCommentEditor(0, 100);
|
||||
|
||||
// 만약 document_srl은 있는데 page가 없다면 글만 호출된 경우 page를 구해서 세팅해주자..
|
||||
if($document_srl && !$page && ($oDocument->isExists()&&!$oDocument->isNotice())) {
|
||||
$page = $oDocumentModel->getDocumentPage($document_srl, $this->module_srl, $this->list_count);
|
||||
Context::set('page', $page);
|
||||
}
|
||||
|
||||
// 목록을 구하기 위한 옵션
|
||||
$args->module_srl = $this->module_srl; ///< 현재 모듈의 module_srl
|
||||
$args->page = $page; ///< 페이지
|
||||
$args->list_count = $this->list_count; ///< 한페이지에 보여줄 글 수
|
||||
$args->page_count = $this->page_count; ///< 페이지 네비게이션에 나타날 페이지의 수
|
||||
|
||||
// 검색 옵션
|
||||
$args->search_target = Context::get('search_target'); ///< 검색 대상 (title, contents...)
|
||||
$args->search_keyword = Context::get('search_keyword'); ///< 검색어
|
||||
if($this->module_info->use_category=='Y') $args->category_srl = Context::get('category'); ///< 카테고리 사용시 선택된 카테고리
|
||||
$args->sort_index = Context::get('sort_index');
|
||||
$args->order_type = Context::get('order_type');
|
||||
|
||||
// 스킨에서 설정한 기본 정렬 대상을 구함
|
||||
if(!$args->sort_index) {
|
||||
switch($this->module_info->order_target) {
|
||||
case "updated" :
|
||||
$args->sort_index = "update_order";
|
||||
$args->order_type = "asc";
|
||||
break;
|
||||
default :
|
||||
$args->sort_index = "list_order";
|
||||
$args->order_type = "asc";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 목록 구함, document->getDocumentList 에서 걍 알아서 다 해버리는 구조이다... (아.. 이거 나쁜 버릇인데.. ㅡ.ㅜ 어쩔수 없다)
|
||||
$output = $oDocumentModel->getDocumentList($args);
|
||||
|
||||
// 템플릿에 쓰기 위해서 document_model::getDocumentList() 의 return object에 있는 값들을 세팅
|
||||
Context::set('total_count', $output->total_count);
|
||||
Context::set('total_page', $output->total_page);
|
||||
Context::set('page', $output->page);
|
||||
Context::set('document_list', $output->data);
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
// 관리자일 경우 체크한 문서들의 목록을 세팅
|
||||
if($this->grant->is_admin) {
|
||||
Context::set('check_list',$_SESSION['document_management'][$this->module_srl]);
|
||||
}
|
||||
|
||||
$this->setTemplateFile('list');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 글 작성 화면 출력
|
||||
**/
|
||||
function dispBoardWrite() {
|
||||
// 권한 체크
|
||||
if(!$this->grant->write_document) return $this->dispBoardMessage('msg_not_permitted');
|
||||
|
||||
// GET parameter에서 document_srl을 가져옴
|
||||
$document_srl = Context::get('document_srl');
|
||||
|
||||
// document 모듈 객체 생성
|
||||
$oDocumentModel = &getModel('document');
|
||||
|
||||
$oDocument = $oDocumentModel->getDocument(0, $this->grant->manager);
|
||||
$oDocument->setDocument($document_srl);
|
||||
|
||||
if(!$oDocument->isExists()) Context::set('document_srl','');
|
||||
|
||||
if(!$document_srl) $document_srl = getNextSequence();
|
||||
|
||||
// 글을 수정하려고 할 경우 권한이 없는 경우 비밀번호 입력화면으로
|
||||
if($oDocument->isExists()&&!$oDocument->isGranted()) return $this->setTemplateFile('input_password_form');
|
||||
|
||||
Context::set('document_srl',$document_srl);
|
||||
Context::set('oDocument', $oDocument);
|
||||
|
||||
// 에디터 모듈의 getEditor를 호출하여 세팅
|
||||
$oEditorModel = &getModel('editor');
|
||||
$option->allow_fileupload = $this->grant->fileupload;
|
||||
$option->enable_autosave = true;
|
||||
$option->enable_default_component = true;
|
||||
$option->enable_component = true;
|
||||
$option->resizable = true;
|
||||
$option->height = 600;
|
||||
$editor = $oEditorModel->getEditor($document_srl, $option);
|
||||
Context::set('editor', $editor);
|
||||
|
||||
// 확장변수처리를 위해 xml_js_filter를 직접 header에 적용
|
||||
$oDocumentController = &getController('document');
|
||||
$oDocumentController->addXmlJsFilter($this->module_info);
|
||||
|
||||
$this->setTemplateFile('write_form');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 문서 삭제 화면 출력
|
||||
**/
|
||||
function dispBoardDelete() {
|
||||
// 권한 체크
|
||||
if(!$this->grant->write_document) return $this->dispBoardMessage('msg_not_permitted');
|
||||
|
||||
// 삭제할 문서번호를 가져온다
|
||||
$document_srl = Context::get('document_srl');
|
||||
|
||||
// 지정된 글이 있는지 확인
|
||||
if($document_srl) {
|
||||
$oDocumentModel = &getModel('document');
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
}
|
||||
|
||||
// 삭제하려는 글이 없으면 에러
|
||||
if(!$oDocument->isExists()) return $this->dispBoardContent();
|
||||
|
||||
// 권한이 없는 경우 비밀번호 입력화면으로
|
||||
if(!$oDocument->isGranted()) return $this->setTemplateFile('input_password_form');
|
||||
|
||||
Context::set('oDocument',$oDocument);
|
||||
|
||||
$this->setTemplateFile('delete_form');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 댓글의 답글 화면 출력
|
||||
**/
|
||||
function dispBoardReplyComment() {
|
||||
// 권한 체크
|
||||
if(!$this->grant->write_comment) return $this->dispBoardMessage('msg_not_permitted');
|
||||
|
||||
// 목록 구현에 필요한 변수들을 가져온다
|
||||
$document_srl = Context::get('document_srl');
|
||||
$parent_srl = Context::get('comment_srl');
|
||||
|
||||
// 지정된 원 댓글이 없다면 오류
|
||||
if(!$parent_srl) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
// 해당 댓글를 찾아본다
|
||||
$oCommentModel = &getModel('comment');
|
||||
$source_comment = $oCommentModel->getComment($parent_srl, $this->grant->manager);
|
||||
|
||||
// 댓글이 없다면 오류
|
||||
if(!$source_comment) return $this->dispBoardMessage('msg_invalid_request');
|
||||
|
||||
// 필요한 정보들 세팅
|
||||
Context::set('document_srl',$document_srl);
|
||||
Context::set('parent_srl',$parent_srl);
|
||||
Context::set('comment_srl',NULL);
|
||||
Context::set('source_comment',$source_comment);
|
||||
|
||||
// 댓글 에디터 세팅
|
||||
$this->setCommentEditor(0, 400);
|
||||
|
||||
$this->setTemplateFile('comment_form');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 댓글 수정 폼 출력
|
||||
**/
|
||||
function dispBoardModifyComment() {
|
||||
// 권한 체크
|
||||
if(!$this->grant->write_comment) return $this->dispBoardMessage('msg_not_permitted');
|
||||
|
||||
// 목록 구현에 필요한 변수들을 가져온다
|
||||
$document_srl = Context::get('document_srl');
|
||||
$comment_srl = Context::get('comment_srl');
|
||||
|
||||
// 지정된 댓글이 없다면 오류
|
||||
if(!$comment_srl) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
// 해당 댓글를 찾아본다
|
||||
$oCommentModel = &getModel('comment');
|
||||
$comment = $oCommentModel->getComment($comment_srl, $this->grant->manager);
|
||||
|
||||
// 댓글이 없다면 오류
|
||||
if(!$comment) return $this->dispBoardMessage('msg_invalid_request');
|
||||
|
||||
Context::set('document_srl',$comment->document_srl);
|
||||
|
||||
// 글을 수정하려고 할 경우 권한이 없는 경우 비밀번호 입력화면으로
|
||||
if($comment_srl&&$comment&&!$comment->is_granted) return $this->setTemplateFile('input_password_form');
|
||||
|
||||
// 필요한 정보들 세팅
|
||||
Context::set('comment_srl',$comment_srl);
|
||||
Context::set('comment', $comment);
|
||||
|
||||
// 댓글 에디터 세팅
|
||||
$this->setCommentEditor($comment_srl, 400);
|
||||
|
||||
$this->setTemplateFile('comment_form');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 댓글 삭제 화면 출력
|
||||
**/
|
||||
function dispBoardDeleteComment() {
|
||||
// 권한 체크
|
||||
if(!$this->grant->write_comment) return $this->dispBoardMessage('msg_not_permitted');
|
||||
|
||||
// 삭제할 댓글번호를 가져온다
|
||||
$comment_srl = Context::get('comment_srl');
|
||||
|
||||
// 삭제하려는 댓글가 있는지 확인
|
||||
if($comment_srl) {
|
||||
$oCommentModel = &getModel('comment');
|
||||
$comment = $oCommentModel->getComment($comment_srl, $this->grant->manager);
|
||||
}
|
||||
|
||||
// 삭제하려는 글이 없으면 에러
|
||||
if(!$comment) return $this->dispBoardContent();
|
||||
|
||||
Context::set('document_srl',$comment->document_srl);
|
||||
|
||||
// 권한이 없는 경우 비밀번호 입력화면으로
|
||||
if($comment_srl&&$comment&&!$comment->is_granted) return $this->setTemplateFile('input_password_form');
|
||||
|
||||
Context::set('comment',$comment);
|
||||
|
||||
$this->setTemplateFile('delete_comment_form');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 엮인글 삭제 화면 출력
|
||||
**/
|
||||
function dispBoardDeleteTrackback() {
|
||||
// 삭제할 댓글번호를 가져온다
|
||||
$trackback_srl = Context::get('trackback_srl');
|
||||
|
||||
// 삭제하려는 댓글가 있는지 확인
|
||||
$oTrackbackModel = &getModel('trackback');
|
||||
$output = $oTrackbackModel->getTrackback($trackback_srl);
|
||||
$trackback = $output->data;
|
||||
|
||||
// 삭제하려는 글이 없으면 에러
|
||||
if(!$trackback) return $this->dispBoardContent();
|
||||
|
||||
Context::set('trackback',$trackback);
|
||||
|
||||
$this->setTemplateFile('delete_trackback_form');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 메세지 출력
|
||||
**/
|
||||
function dispBoardMessage($msg_code) {
|
||||
$msg = Context::getLang($msg_code);
|
||||
if(!$msg) $msg = $msg_code;
|
||||
Context::set('message', $msg);
|
||||
$this->setTemplateFile('message');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 댓글의 editor 를 세팅
|
||||
* 댓글의 경우 수정하는 경우가 아니라면 고유값이 없음.\n
|
||||
* 따라서 고유값이 없을 경우 고유값을 가져와서 지정해 주어야 함
|
||||
**/
|
||||
function setCommentEditor($comment_srl=0, $height = 100) {
|
||||
if(!$comment_srl) {
|
||||
$comment_srl = getNextSequence();
|
||||
Context::set('comment_srl', $comment_srl);
|
||||
}
|
||||
|
||||
// 에디터 모듈의 getEditor를 호출하여 세팅
|
||||
$oEditorModel = &getModel('editor');
|
||||
$option->allow_fileupload = $this->grant->comment_fileupload;
|
||||
$option->enable_autosave = false;
|
||||
$option->enable_default_component = true;
|
||||
$option->enable_component = true;
|
||||
$option->resizable = true;
|
||||
$option->height = $height;
|
||||
$comment_editor = $oEditorModel->getEditor($comment_srl, $option);
|
||||
Context::set('comment_editor', $comment_editor);
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
20
modules/board/conf/info.xml
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<module version="0.1">
|
||||
<title xml:lang="ko">게시판</title>
|
||||
<title xml:lang="zh-CN">版面</title>
|
||||
<title xml:lang="en">Board</title>
|
||||
<title xml:lang="es">Boletín</title>
|
||||
<title xml:lang="jp">掲示板</title>
|
||||
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
|
||||
<name xml:lang="ko">제로</name>
|
||||
<name xml:lang="zh-CN">zero</name>
|
||||
<name xml:lang="en">zero</name>
|
||||
<name xml:lang="es">zero</name>
|
||||
<name xml:lang="jp">Zero</name>
|
||||
<description xml:lang="ko">게시판의 기능을 담당하는 모듈. 게시판의 생성/추가 관리등의 관리자 기능도 포함합니다.</description>
|
||||
<description xml:lang="zh-CN">给用户提供相应版面功能,将包含版面的生成/添加及版面管理等管理员功能。</description>
|
||||
<description xml:lang="en">Module of the board''s function. Also includes administrator functions such as creating/managing boards.</description>
|
||||
<description xml:lang="es">Es el módulo para funciónar a boletín. Incluye funciónes de administración como crear/ agregar o manejar boletín.</description>
|
||||
<description xml:lang="jp">掲示板の機能を担うモジュールです。掲示板の生成・追加・管理などの管理者機能も含まれています。</description>
|
||||
</author>
|
||||
</module>
|
||||
86
modules/board/conf/module.xml
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<module>
|
||||
<grants>
|
||||
<grant name="list" default="guest">
|
||||
<title xml:lang="ko">목록</title>
|
||||
<title xml:lang="zh-CN">目录</title>
|
||||
<title xml:lang="jp">リスト</title>
|
||||
<title xml:lang="en">list</title>
|
||||
</grant>
|
||||
<grant name="view" default="guest">
|
||||
<title xml:lang="ko">열람</title>
|
||||
<title xml:lang="zh-CN">浏览</title>
|
||||
<title xml:lang="jp">閲覧</title>
|
||||
<title xml:lang="en">view</title>
|
||||
</grant>
|
||||
<grant name="write_document" default="guest">
|
||||
<title xml:lang="ko">글 작성</title>
|
||||
<title xml:lang="zh-CN">发表新主题</title>
|
||||
<title xml:lang="jp">書き込み作成</title>
|
||||
<title xml:lang="en">write document</title>
|
||||
</grant>
|
||||
<grant name="write_comment" default="guest">
|
||||
<title xml:lang="ko">댓글 작성</title>
|
||||
<title xml:lang="zh-CN">发表评论</title>
|
||||
<title xml:lang="jp">コメント作成</title>
|
||||
<title xml:lang="en">write comment</title>
|
||||
</grant>
|
||||
<grant name="fileupload" default="guest">
|
||||
<title xml:lang="ko">파일 첨부</title>
|
||||
<title xml:lang="zh-CN">上传文件</title>
|
||||
<title xml:lang="jp">ファイル添付</title>
|
||||
<title xml:lang="en">file upload</title>
|
||||
</grant>
|
||||
<grant name="comment_fileupload" default="guest">
|
||||
<title xml:lang="ko">댓글 파일 첨부</title>
|
||||
<title xml:lang="zh-CN">上传文件</title>
|
||||
<title xml:lang="jp">コメントファイル添付</title>
|
||||
<title xml:lang="en">comment file upload</title>
|
||||
</grant>
|
||||
<grant name="manager" default="root">
|
||||
<title xml:lang="ko">관리</title>
|
||||
<title xml:lang="zh-CN">管理</title>
|
||||
<title xml:lang="jp">管理</title>
|
||||
<title xml:lang="en">manager</title>
|
||||
</grant>
|
||||
</grants>
|
||||
<actions>
|
||||
<action name="dispBoardContent" type="view" index="true" />
|
||||
<action name="dispBoardWrite" type="view" />
|
||||
<action name="dispBoardDelete" type="view" />
|
||||
<action name="dispBoardReplyComment" type="view" />
|
||||
<action name="dispBoardModifyComment" type="view" />
|
||||
<action name="dispBoardDeleteComment" type="view" />
|
||||
<action name="dispBoardDeleteTrackback" type="view" />
|
||||
<action name="dispBoardMessage" type="view" />
|
||||
|
||||
<action name="procBoardInsertDocument" type="controller" />
|
||||
<action name="procBoardDeleteDocument" type="controller" />
|
||||
<action name="procBoardVoteDocument" type="controller" />
|
||||
<action name="procBoardInsertComment" type="controller" />
|
||||
<action name="procBoardDeleteComment" type="controller" />
|
||||
<action name="procBoardDeleteTrackback" type="controller" />
|
||||
<action name="procBoardVerificationPassword" type="controller" />
|
||||
<action name="procBoardDeleteFile" type="controller" />
|
||||
<action name="procBoardUploadFile" type="controller" />
|
||||
<action name="procBoardDownloadFile" type="controller" />
|
||||
|
||||
<action name="dispBoardAdminContent" type="view" standalone="true" admin_index="true" />
|
||||
<action name="dispBoardAdminBoardInfo" type="view" standalone="true" />
|
||||
<action name="dispBoardAdminInsertBoard" type="view" standalone="true" />
|
||||
<action name="dispBoardAdminDeleteBoard" type="view" standalone="true" />
|
||||
<action name="dispBoardAdminSkinInfo" type="view" standalone="true" />
|
||||
<action name="dispBoardAdminCategoryInfo" type="view" standalone="true" />
|
||||
<action name="dispBoardAdminGrantInfo" type="view" standalone="true" />
|
||||
<action name="dispBoardAdminManageDocument" type="view" />
|
||||
|
||||
<action name="procBoardAdminAddCart" type="controller" standalone="true" />
|
||||
<action name="procBoardAdminInsertGrant" type="controller" standalone="true" />
|
||||
<action name="procBoardAdminUpdateSkinInfo" type="controller" standalone="true" />
|
||||
<action name="procBoardAdminInsertBoard" type="controller" standalone="true" />
|
||||
<action name="procBoardAdminDeleteBoard" type="controller" standalone="true" />
|
||||
<action name="procBoardAdminInsertCategory" type="controller" standalone="true" />
|
||||
<action name="procBoardAdminUpdateCategory" type="controller" standalone="true" />
|
||||
<action name="procBoardAdminManageCheckedDocument" type="controller" standalone="true" />
|
||||
</actions>
|
||||
</module>
|
||||
17
modules/board/lang/en.lang.php
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* @file en.lang.php
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief board modules's basic language pack
|
||||
**/
|
||||
|
||||
$lang->board = "board";
|
||||
|
||||
// words used in button
|
||||
$lang->cmd_board_list = 'Board list';
|
||||
$lang->cmd_module_config = 'Common board setting';
|
||||
$lang->cmd_view_info = 'Board info';
|
||||
$lang->move_target_module = "Target module for changing position";
|
||||
|
||||
$lang->about_board = "This module is for creating and managing boards.\nSelect the module's name from the list after creating one to configurate specifically.\nBe careful with board's module name, since it will be the url. (ex : http://domain/zb/?mid=modulename)";
|
||||
?>
|
||||
17
modules/board/lang/es.lang.php
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* @file es.lang.php
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief Paquete lingual para Módulo de boletín
|
||||
**/
|
||||
|
||||
$lang->board = "Boletín";
|
||||
|
||||
// Palabras utiliza en botónes
|
||||
$lang->cmd_board_list = 'Lista de boletín';
|
||||
$lang->cmd_module_config = 'configuración comun de boletínes';
|
||||
$lang->cmd_view_info = 'ver información de boletín';
|
||||
$lang->move_target_module = "Módulo para mover";
|
||||
|
||||
$lang->about_board = "Es el módulo para crear y manejar boletínes.\nDespues de crear un boletín, haga clic en nombre de módulos para configuración mas detallado.\nEl nombre de módulo es nombre de URL, sea cuidoso deseando el nombre. (ej : http://dominio/zb/?mid=nombre de módulo)";
|
||||
?>
|
||||
17
modules/board/lang/jp.lang.php
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* @file ko.lang.php
|
||||
* @author zero (zero@nzeo.com) 翻訳:RisaPapa
|
||||
* @brief 掲示板(board)モジュールの基本言語パッケージ
|
||||
**/
|
||||
|
||||
$lang->board = "掲示板";
|
||||
|
||||
// ボタンに使用する用語
|
||||
$lang->cmd_board_list = '掲示板リスト';
|
||||
$lang->cmd_module_config = '掲示板共通設定';
|
||||
$lang->cmd_view_info = '掲示板情報';
|
||||
$lang->move_target_module = "移動対象モジュール";
|
||||
|
||||
$lang->about_board = "掲示板を生成、管理できる掲示板モジュールです。生成後、リストからモジュール名を選択すると詳細な設定ができます。掲示板のモジュール名はURLになりますので注意してください。 (ex : http://ドメイン/zb/?mid=モジュール名)";
|
||||
?>
|
||||
17
modules/board/lang/ko.lang.php
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* @file ko.lang.php
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief 게시판(board) 모듈의 기본 언어팩
|
||||
**/
|
||||
|
||||
$lang->board = "게시판";
|
||||
|
||||
// 버튼에 사용되는 언어
|
||||
$lang->cmd_board_list = '게시판 목록';
|
||||
$lang->cmd_module_config = '게시판 공통 설정';
|
||||
$lang->cmd_view_info = '게시판 정보';
|
||||
$lang->move_target_module = "이동 대상 모듈";
|
||||
|
||||
$lang->about_board = "게시판을 생성하고 관리할 수 있는 게시판 모듈입니다.\n생성하신 후 목록에서 모듈이름을 선택하시면 자세한 설정이 가능합니다.\n게시판의 모듈이름은 접속 url이 되므로 신중하게 입력해주세요. (ex : http://도메인/zb/?mid=모듈이름)";
|
||||
?>
|
||||
17
modules/board/lang/zh-CN.lang.php
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* @file zh-CN.lang.php
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief 版面(board) 模块语言包
|
||||
**/
|
||||
|
||||
$lang->board = "版面";
|
||||
|
||||
// 在按钮使用的语言
|
||||
$lang->cmd_board_list = '版面目录';
|
||||
$lang->cmd_module_config = '版面共同设置';
|
||||
$lang->cmd_view_info = '版面信息';
|
||||
$lang->move_target_module = "移动目标模块";
|
||||
|
||||
$lang->about_board = "可生成,管理版面的模块。\n生成版面后,点击模块名即可对其详细设置。";
|
||||
?>
|
||||
14
modules/board/queries/getAllBoard.xml
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<query id="getAllBoard" action="select">
|
||||
<tables>
|
||||
<table name="modules" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="*" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="module" default="board" />
|
||||
</conditions>
|
||||
<navigation>
|
||||
<index var="sort_index" default="mid" order="asc" />
|
||||
</navigation>
|
||||
</query>
|
||||
24
modules/board/queries/getBoardList.xml
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
<query id="getBoardList" action="select">
|
||||
<tables>
|
||||
<table name="modules" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="*" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="module" default="board" />
|
||||
<group pipe="and">
|
||||
<condition operation="like" column="mid" var="s_mid" pipe="or" />
|
||||
<condition operation="like" column="title" var="s_title" pipe="or" />
|
||||
<condition operation="like" column="comment" var="s_comment" pipe="or" />
|
||||
<condition operation="equal" column="module" var="s_module" pipe="or" />
|
||||
<condition operation="equal" column="module_category_srl" var="s_module_category_srl" pipe="or" />
|
||||
</group>
|
||||
</conditions>
|
||||
<navigation>
|
||||
<index var="sort_index" default="module_srl" order="desc" />
|
||||
<list_count var="list_count" default="20" />
|
||||
<page_count var="page_count" default="10" />
|
||||
<page var="page" default="1" />
|
||||
</navigation>
|
||||
</query>
|
||||
62
modules/board/skins/cozy_simple_gallery/comment.html
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
<div id="reply" class="comment">
|
||||
{@ $idx = 0 }
|
||||
<!--@if($oDocument->getCommentCount())-->
|
||||
<!--@foreach($oDocument->getComments() as $key => $val)-->
|
||||
<a name="comment_{$key}"></a>
|
||||
<div class="contentBox <!--@if($val->depth>0)-->indent_box<!--@end--> <!--@if($idx>0)-->top_border<!--@end-->">
|
||||
|
||||
<!--@if($val->depth>0)-->
|
||||
<div style="margin-left:{($val->depth*1.5)}em;">
|
||||
<div class="indent">
|
||||
<!--@end-->
|
||||
|
||||
<table cellspacing="0" width="100%">
|
||||
<col />
|
||||
<col width="120" />
|
||||
<tr>
|
||||
<td>{$val->content}</td>
|
||||
<td class="tRight" valign="top">
|
||||
<!--@if($val->is_granted || !$val->member_srl || $grant->is_admin)-->
|
||||
<a href="{getUrl('act','dispBoardDeleteComment','comment_srl',$val->comment_srl)}"><img src="./images/common/btn_delete.gif" alt="{$lang->cmd_delete}" /></a>
|
||||
<a href="{getUrl('act','dispBoardModifyComment','comment_srl',$val->comment_srl)}"><img src="./images/common/btn_edit.gif" alt="{$lang->cmd_modify}" /></a>
|
||||
<!--@end-->
|
||||
<a href="{getUrl('act','dispBoardReplyComment','comment_srl',$val->comment_srl)}"><img src="./images/common/btn_reply.gif" alt="{$lang->cmd_reply}" /></a>
|
||||
</td>
|
||||
</tr>
|
||||
<!--@if($val->uploaded_count && $val->uploaded_list)-->
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<div class="fileAttached">
|
||||
<ul>
|
||||
<!--@foreach($val->uploaded_list as $key => $file)-->
|
||||
<li><img src="./images/common/iconFile.gif" alt="attached file" /><a href="{getUrl('')}{$file->download_url}">{$file->source_filename} ({FileHandler::filesize($file->file_size)})({number_format($file->download_count)})</a></li>
|
||||
<!--@end-->
|
||||
</ul>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</td>
|
||||
</tr>
|
||||
<!--@end-->
|
||||
<tr>
|
||||
<td><div class="author member_{$val->member_srl}">{htmlspecialchars($val->nick_name)}</div></td>
|
||||
<td>
|
||||
<span class="date">
|
||||
{zdate($val->regdate, "Y.m.d H:i")}
|
||||
<!--@if($grant->is_admin)-->
|
||||
({$val->ipaddress})
|
||||
<!--@end-->
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!--@if($val->depth>0)-->
|
||||
</div>
|
||||
</div>
|
||||
<!--@end-->
|
||||
</div>
|
||||
|
||||
{@ $idx++}
|
||||
<!--@end-->
|
||||
<!--@end-->
|
||||
</div>
|
||||
67
modules/board/skins/cozy_simple_gallery/comment_form.html
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
<!--%import("filter/insert_comment.xml")-->
|
||||
<!--%import("js/board.js")-->
|
||||
|
||||
<!--@if($source_comment || $comment)-->
|
||||
<!--#include("header.html")-->
|
||||
<!--@end-->
|
||||
|
||||
<!-- 만약 댓글의 답을 다는 것이라면 원문 보여줌 -->
|
||||
<!--@if($source_comment)-->
|
||||
<div class="boardRead">
|
||||
<div id="reply" class="comment topBorder">
|
||||
<div class="contentBox">
|
||||
<div class="content">
|
||||
{$source_comment->content}
|
||||
</div>
|
||||
|
||||
<div class="author member_{$source_comment->member_srl} author">{htmlspecialchars($source_comment->nick_name)}</div>
|
||||
<span class="date">
|
||||
{zdate($source_comment->regdate, "Y.m.d H:i")}
|
||||
<!--@if($grant->is_admin)-->
|
||||
({$source_comment->ipaddress})
|
||||
<!--@end-->
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--@end-->
|
||||
|
||||
<!-- 글쓰기 폼 -->
|
||||
<div class="boardWrite">
|
||||
|
||||
<form action="./" method="post" onsubmit="return procFilter(this, insert_comment)" <!--@if($grant->fileupload)-->enctype="multipart/form-data"<!--@end--> class="boardEditor" id="fo_comment_write" >
|
||||
<fieldset>
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl?$document_srl:$comment->document_srl}" />
|
||||
<input type="hidden" name="comment_srl" value="{$comment_srl}" />
|
||||
<input type="hidden" name="content" value="{htmlspecialchars($comment->content)}" />
|
||||
<input type="hidden" name="parent_srl" value="{$parent_srl}" />
|
||||
|
||||
<!--@if(!$is_logged)-->
|
||||
<div class="userNameAndPw">
|
||||
<label for="userName">{$lang->writer}</label>
|
||||
<input type="text" name="nick_name" value="{$comment->nick_name}" class="userName inputTypeText" id="userName"/>
|
||||
|
||||
<label for="userPw">{$lang->password}</label>
|
||||
<input type="password" name="password" value="" id="userPw" class="userPw inputTypeText" />
|
||||
|
||||
<label for="emailAddress">{$lang->email_address}</label>
|
||||
<input type="text" name="email_address" value="{htmlspecialchars($comment->email_address)}" id="emailAddress" class="emailAddress inputTypeText"/>
|
||||
|
||||
<label for="homePage">{$lang->homepage}</label>
|
||||
<input type="text" name="homepage" value="{htmlspecialchars($comment->homepage)}" id="homePage" class="homePage inputTypeText"/>
|
||||
</div>
|
||||
<!--@end-->
|
||||
|
||||
<div>{$comment_editor}</div>
|
||||
|
||||
<div class="tCenter"><input type="image" src="./images/common/btn_reply2.gif" accesskey="s" /></div>
|
||||
|
||||
</fieldset>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!--@if($source_comment)-->
|
||||
<!--#include("footer.html")-->
|
||||
<!--@end-->
|
||||
19
modules/board/skins/cozy_simple_gallery/css/blue.css
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
@charset "utf-8";
|
||||
|
||||
/* boardHeader */
|
||||
.boardHeader { position:relative; _width:100%; background:#1187d8 url(../images/blue/bg_top_title.gif) no-repeat 23px top; overflow:hidden;}
|
||||
.boardList { width:100%; position:relative; border-bottom:2px solid #1187d8; border-collapse:collapse; }
|
||||
|
||||
.boardList th {padding:1.2em .5em 1.1em .6em; background:#ffffff url(../images/blue/bg_title.gif) no-repeat left bottom; white-space:nowrap;}
|
||||
.boardList td .replyAndTrackback { font:.8em Tahoma; color:#007ed5; cursor:default; position:relative; top:-.2em;}
|
||||
.boardList td.recommend { font:bold .8em Tahoma; color:#007ed5; text-align:center;}
|
||||
|
||||
.pageNavigation .current { margin-left:-4px; font:bold .8em Tahoma; color:#007ed5; display:inline-block; padding:1px 5px 2px 4px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; }
|
||||
|
||||
.boardRead { position:relative; _width:100%; margin:1em 0 0 0; padding: 0 0 .6em 0; border-bottom:3px solid #1187d8;}
|
||||
.boardRead .readHeader { width:100%; padding-bottom:.5em; margin-bottom:1em; border-bottom:3px solid #1187d8; overflow:hidden;}
|
||||
.boardRead .replyAndTrackback li.selected { margin:0; padding:1em 1.1em .7em 1.4em; border:1px solid #EAEAEA; border-bottom:none; background:#FFFFFF; color:#007ed5;}
|
||||
|
||||
.boardWrite fieldset.bottomBorder { border-bottom:2px solid #f9f9f9;}
|
||||
.boardWrite div.title { padding:.5em 0 .65em 0; white-space:nowrap; background:#FFFFFF url(../images/blue/bg_title_norepeat.gif) no-repeat left bottom;}
|
||||
.boardWrite .option { width:100%; padding:.5em 0 .65em 0; background:#FFFFFF url(../images/blue/bg_title_norepeat.gif) no-repeat left bottom; overflow:hidden;}
|
||||
19
modules/board/skins/cozy_simple_gallery/css/bluish_green.css
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
@charset "utf-8";
|
||||
|
||||
/* boardHeader */
|
||||
.boardHeader { position:relative; _width:100%; background:#9ab09f url(../images/bluish_green/bg_top_title.gif) no-repeat 23px top; overflow:hidden;}
|
||||
.boardList { width:100%; position:relative; border-bottom:2px solid #9ab09f; border-collapse:collapse; }
|
||||
|
||||
.boardList th {padding:1.2em .5em 1.1em .6em; background:#ffffff url(../images/bluish_green/bg_title.gif) no-repeat left bottom; white-space:nowrap;}
|
||||
.boardList td .replyAndTrackback { font:.8em Tahoma; color:#9ab09f; cursor:default; position:relative; top:-.2em;}
|
||||
.boardList td.recommend { font:bold .8em Tahoma; color:#9ab09f; text-align:center;}
|
||||
|
||||
.pageNavigation .current { margin-left:-4px; font:bold .8em Tahoma; color:#9ab09f; display:inline-block; padding:1px 5px 2px 4px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; }
|
||||
|
||||
.boardRead { position:relative; _width:100%; margin:1em 0 0 0; padding: 0 0 .6em 0; border-bottom:3px solid #9ab09f;}
|
||||
.boardRead .readHeader { width:100%; padding-bottom:.5em; margin-bottom:1em; border-bottom:3px solid #9ab09f; overflow:hidden;}
|
||||
.boardRead .replyAndTrackback li.selected { margin:0; padding:1em 1.1em .7em 1.4em; border:1px solid #EAEAEA; border-bottom:none; background:#FFFFFF; color:#9ab09f;}
|
||||
|
||||
.boardWrite fieldset.bottomBorder { border-bottom:2px solid #f9f9f9;}
|
||||
.boardWrite div.title { padding:.5em 0 .65em 0; white-space:nowrap; background:#FFFFFF url(../images/bluish_green/bg_title_norepeat.gif) no-repeat left bottom;}
|
||||
.boardWrite .option { width:100%; padding:.5em 0 .65em 0; background:#FFFFFF url(../images/bluish_green/bg_title_norepeat.gif) no-repeat left bottom; overflow:hidden;}
|
||||
539
modules/board/skins/cozy_simple_gallery/css/common.css
Normal file
|
|
@ -0,0 +1,539 @@
|
|||
@charset "utf-8";
|
||||
/*
|
||||
NHN UIT Lab. WebStandardization Team (http://html.nhndesign.com/)
|
||||
Jeong, Chan Myeong 070601~070630
|
||||
*/
|
||||
|
||||
/* ----- List+Read+Write+Modify | Start ----- */
|
||||
.boardHeader h3 { float:left; clear:both; padding:1.9em 1.5em 1.8em 1.5em; font-size:1.2em; color:#FFFFFF;}
|
||||
|
||||
/* boardInformation */
|
||||
.boardInformation { width:100%; clear:both; margin:0 0 .5em 0; background:#EFEFEF; color:#8D8D8D; overflow:hidden;}
|
||||
.articleNum { float:left; padding:.5em 0 .5em 2.3em; font:.8em Tahoma;}
|
||||
.articleNum strong { margin:0 0 0 .5em; padding:0 0 0 .7em; font:bold .9em Tahoma; color:#6F6F6F; background:url(../images/common/bar_1x8_c0c0c0.gif) no-repeat left .1em;}
|
||||
.accountNavigation { float:right; margin:.3em .5em 0 0; overflow:hidden;}
|
||||
.accountNavigation li { list-style:none; float:left; margin:0 0 0 -.1em; padding:.1em .8em 0 .8em; background:url(../images/common/bar_1x7_c0c0c0.gif) no-repeat left .3em;}
|
||||
.accountNavigation li a {}
|
||||
|
||||
/* boardList */
|
||||
.boardList tr:first-child td, .boardList tr.first-child td {}
|
||||
.boardList tr.notice {}
|
||||
.boardList tr.notice .num { font:.9em "돋움", Dotum, "굴림", Gulim, AppleGothic, Sans-serif; font-weight:bold;}
|
||||
|
||||
.boardList th a { color:#3e3f3e;}
|
||||
.boardList th span.on { font-weight:bold;}
|
||||
.boardList th.num { background-position:-3px bottom; padding:0;}
|
||||
.boardList th select { height:20px; }
|
||||
.boardList th.category { padding:0 .2em 0 .5em;}
|
||||
.boardList th.category.thumbStyle { background-position:-3px bottom !important; border-left:1px solid #ffffff; text-align:left;}
|
||||
.boardList th:first-child { background-position:-2px bottom;}
|
||||
.boardList th.first-child { background-position:-2px bottom;}
|
||||
.boardList th.author {}
|
||||
.boardList th.title {}
|
||||
.boardList th.reading { white-space:nowrap;}
|
||||
.boardList th.recommend { white-space:nowrap;}
|
||||
.boardList th.reply { white-space:nowrap;}
|
||||
.boardList th.date {}
|
||||
.boardList th.check { padding:0;}
|
||||
.boardList th.user {}
|
||||
.boardList th.registDate {}
|
||||
.boardList th.checkDate {}
|
||||
.boardList th.friendGroup {}
|
||||
.boardList th.userId {}
|
||||
.boardList th.userName {}
|
||||
.boardList th.userNick {}
|
||||
.boardList th.sendMessage {}
|
||||
.boardList th.last-child { border-right:1px solid #ffffff;}
|
||||
.boardList th .sort { padding:0 .2em; vertical-align:middle;}
|
||||
.boardList th select,
|
||||
.boardList th input { vertical-align:middle;}
|
||||
|
||||
.boardList td { padding:.3em; border-bottom:1px solid #e4e4e2;}
|
||||
.boardList td.noline { border-bottom:none;}
|
||||
.boardList td.num { font:.8em Tahoma; color:#999999; padding:.5em .5em .5em 1.5em;}
|
||||
.boardList td.category {}
|
||||
.boardList tr.notice td { padding:.3em; white-space:nowrap;}
|
||||
.boardList tr.notice td img { margin:-.1em .3em 0 0;}
|
||||
.boardList td.thumb { padding:.5em 0 .5em .5em; width:130px; table-layout:fixed; white-space:nowrap;}
|
||||
.boardList td.thumb * { vertical-align:middle;}
|
||||
.boardList td.title.bold { font-size:1em; font-weight:bold;}
|
||||
.boardList td.title.bold a { position:relative; top:.3em;}
|
||||
.boardList td.title * { vertical-align:middle;}
|
||||
.boardList td.title,
|
||||
.boardList td.title a { color:#444444; text-decoration:none; }
|
||||
.boardList td.title a:visited { color:#777777;}
|
||||
.boardList td.title .title_wrap { width:100%; overflow:hidden; white-space:nowrap;}
|
||||
.boardList td.author { padding:0 .5em 0 1.3em; color:#333333; font:.95em "돋움", Dotum, "굴림", Gulim, AppleGothic, Sans-serif;}
|
||||
.boardList td.author a { font-size:1em; color:#333333;}
|
||||
.boardList td.reading { font:.8em Tahoma; color:#999999; text-align:center;}
|
||||
.boardList td.reply { font:bold .8em Tahoma; color:#ff6600; text-align:center;}
|
||||
.boardList td.date { font:.8em Tahoma; color:#999999; text-align:center;}
|
||||
.boardList td.registDate { font:.8em Tahoma; color:#999999; text-align:center;}
|
||||
.boardList td.checkDate { font:.8em Tahoma; color:#333333; text-align:center;}
|
||||
.boardList td.summary { border-top:none; vertical-align:top; color:#666666; line-height:1.25em;padding:5px 5px 10px 5px;}
|
||||
.boardList td.summary a { color:#666666; text-decoration:none; line-height:inherit;}
|
||||
.boardList td.summary a:visited { color:#999999;}
|
||||
.boardList td.check { text-align:center;}
|
||||
.boardList td.user { color:#333333; font-size:.9em;}
|
||||
.boardList td.user a { color:#333333;}
|
||||
.boardList td.userId { font:.9em Tahoma;}
|
||||
.boardList td.userName {}
|
||||
.boardList td.userNick { font-size:.9em; color:#999999;}
|
||||
.boardList td.friendGroup {}
|
||||
.boardList td.sendMessage { text-align:center; padding:0;}
|
||||
.boardList td.sendMessage .buttonFixedLeft { position:relative; left:20%; _left:0;}
|
||||
*:first-child+html .boardList td.sendMessage .buttonFixedLeft { left:0;}
|
||||
.boardList td input { _margin:-3px;}
|
||||
.boardList td.title.bold .replyAndTrackback { font:.6em Tahoma; color:#ff6600; cursor:default; position:relative; top:.3em;}
|
||||
.boardList td .replyAndTrackback strong { font:bold 1em Tahoma;}
|
||||
|
||||
.boardList td .thumbnailSmall { margin:0 .3em 0 .3em;}
|
||||
.boardList td .thumbnailSmall img {}
|
||||
.boardList td .thumbnailMedium { margin:0 .3em 0 .3em;}
|
||||
.boardList td .thumbnailMedium img {}
|
||||
|
||||
.boardList.thumbnail { margin-top:-1px; border-bottom:none;}
|
||||
.boardList.thumbnail td { border-top:none; border-bottom:1px solid #eff0ed; padding:1.5em 0 0 1.5em; overflow:hidden;}
|
||||
.boardList.thumbnail div.cell { float:left; width:142px; margin:0 .6em 0 0; padding-bottom:1.5em;overflow:hidden;}
|
||||
.boardList.thumbnail div.title { color:#444444; margin:.5em 0 .2em 0;}
|
||||
.boardList.thumbnail div.title a { color:#444444; text-decoration:none;}
|
||||
.boardList.thumbnail div.nameAndDate { font-size:.9em; color:#999999; margin-bottom:.2em; padding-left:3px;}
|
||||
.boardList.thumbnail div.nameAndDate a { color:#999999;}
|
||||
.boardList.thumbnail div.nameAndDate .date { font:.8em Tahoma; color:#999999;}
|
||||
.boardList.thumbnail div.readAndRecommend { font-size:.9em; color:#666666; padding-left:3px;}
|
||||
.boardList.thumbnail div.readAndRecommend .num { font:.8em Tahoma;}
|
||||
.boardList.thumbnail div.readAndRecommend .vr { color:#dddddd;}
|
||||
.boardList.thumbnail div.readAndRecommend strong.num { font:bold .8em Tahoma; color:#494949;}
|
||||
|
||||
/* boardSearch */
|
||||
.boardSearch { clear:both; text-align:center; margin-top:3em;}
|
||||
.boardSearch fieldset { display:inline; padding:10px 15px 10px 15px; border:none; background:#F4F4F4; overflow:hidden; }
|
||||
.boardSearch fieldset legend { overflow:hidden; width:1px; height:1px; font-size:.001em; text-indent:-100em;}
|
||||
.boardSearch * { vertical-align:middle;}
|
||||
.boardSearch select { float:left;}
|
||||
.boardSearch input { float:left; margin:0 .3em; background:#fbfbfb;}
|
||||
.searchButton ul { overflow:hidden;}
|
||||
.searchButton li { float:left; margin-right:.3em; list-style:none;}
|
||||
|
||||
.buttonTypeGo { border:none; cursor:pointer; width:24px; height:20px; background:url(../images/common/buttonTypeInput24.gif) no-repeat; font:.75em Tahoma; text-align:center;}
|
||||
|
||||
|
||||
/* pageNavigation */
|
||||
.pageNavigation { float:left; display:block; margin:2.2em 0 2em 1.1em; font:bold .8em Tahoma; }
|
||||
.pageNavigation a, .pageNavigation a:visited, .pageNavigation a:active { margin-left:-4px; font:bold .8em Tahoma; color:#676767; display:inline-block; padding:1px 5px 2px 4px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; }
|
||||
.pageNavigation a:hover { text-decoration:none; }
|
||||
.pageNavigation a.goToFirst,
|
||||
.pageNavigation a.goToLast { border:none; border-right:1px solid #ffffff; border-left:1px solid #ffffff; z-index:99; padding:1px 5px 3px 4px;}
|
||||
.pageNavigation a.goToFirst img,
|
||||
.pageNavigation a.goToLast img { vertical-align:middle;}
|
||||
|
||||
.buttonBox { float:right; margin:1.2em 0 0 0; }
|
||||
|
||||
/* boardRead */
|
||||
#blog .boardRead { position:relative; margin:0; _overflow:hidden;}
|
||||
.boardRead .originalContent { padding:2em 0 2em 0;}
|
||||
.boardRead .titleAndCategory { float:left;}
|
||||
.boardRead .titleAndCategory h4 { font-size:1.4em; display:inline; padding-left:.2em;}
|
||||
.boardRead .titleAndCategory .vr { font-size:.9em; margin:0 .3em; color:#c5c7c0;}
|
||||
.boardRead .titleAndCategory .category { font-size:.9em; color:#999999; white-space:nowrap;}
|
||||
|
||||
.boardRead .dateAndModify { font-size:.8em; float:right; white-space:nowrap;}
|
||||
.boardRead .dateAndModify .date { font-size:.8em; font-family:Tahoma; color:#999999; margin-right:.5em; float:left; position:relative; top:.1em;}
|
||||
.boardRead .dateAndModify .date strong { font-size:1em; font-family:Tahoma;}
|
||||
.boardRead .dateAndModify ul { display:inline; margin:0 .4em 0 0;}
|
||||
.boardRead .dateAndModify ul li { float:left; margin-left:.3em; list-style:none;}
|
||||
.boardRead dl.uri { float:right; overflow:hidden; margin:0 0 3em .3em;}
|
||||
.boardRead dl.uri dt { float:left; clear:left; font-size:.9em; margin-right:.3em; color:#999999;}
|
||||
.boardRead dl.uri dd { clear:right; font-size:.8em; color:#d4d5d0;}
|
||||
.boardRead dl.uri dd span { font-family:Tahoma; color:#d4d5d0;}
|
||||
.boardRead .readBody { padding:0 .3em; color:#555555; overflow:hidden; margin-bottom:2em;}
|
||||
.boardRead .readBody p { margin:1em 0; line-height:1.5em;}
|
||||
.boardRead .contentBody { width:100%; overflow:hidden; }
|
||||
|
||||
.boardRead .userInfo { float:left; white-space:nowrap;}
|
||||
.boardRead .userInfo .author { padding:0 .3em 0 0; color:#3074a5; margin-right:.3em;}
|
||||
.boardRead .userInfo .ipaddress { font-size:.9em; font-family:Tahoma; color:#888888; margin-right:.5em; }
|
||||
|
||||
/* extraVars list */
|
||||
.extraVarsList { width:100%; border:1px solid #e0e1db; clear:both; margin-bottom:1em;}
|
||||
.extraVarsList tr.notice { background:#f8f8f8;}
|
||||
.extraVarsList tr.notice .num { font-size:.9em; font-weight:bold;}
|
||||
.extraVarsList tr.bg1 { background:#ffffff}
|
||||
.extraVarsList tr.bg2 { background:#fbfbfb;}
|
||||
.extraVarsList th { color:#3e3f3e; font-weight:bold; padding:.8em .5em .5em .5em; border-bottom:1px solid #eff0ed; border-right:1px solid #eff0ed;}
|
||||
.extraVarsList td { border-bottom:1px solid #eff0ed; padding:.5em .5em .5em 1em;}
|
||||
|
||||
.boardRead .readFooter { border-top:1px solid #dfe0db; }
|
||||
.boardRead .readFooter .tag { margin-bottom:1em; padding:1em 0 0 0; }
|
||||
.boardRead .readFooter .tag h5 { display:inline; font-size:1em; margin:0 .3em 0 1.8em;}
|
||||
.boardRead .readFooter .tag ul,
|
||||
.boardRead .readFooter .tag li { display:inline;}
|
||||
.boardRead .readFooter .tag a { color:#444444; text-decoration:none;}
|
||||
.boardRead .readFooter .tag .tagIcon { vertical-align:middle;}
|
||||
.boardRead .readFooter .fileAttached { padding:1em 1em .8em 0; position:relative; _width:100%; border-bottom:1px solid #dfdfdd; overflow:hidden; background:#f9f9f9;}
|
||||
.boardRead .readFooter .fileAttached h5 {}
|
||||
.boardRead .readFooter .fileAttached ul { margin-left:1.8em;}
|
||||
.boardRead .readFooter .fileAttached li { float:left; margin-right:.75em; line-height:1.6em; color:#888888; white-space:nowrap; list-style:none;}
|
||||
.boardRead .readFooter .fileAttached li a { font-size:.9em; padding:.1em 0 .1em .2em; white-space:nowrap; position:relative; color:#888888; text-decoration:none; }
|
||||
.boardRead .readFooter .fileAttached li a:visited { color:#777777;}
|
||||
|
||||
.listButton li { list-style:none; clear:both; text-align:right; margin-top:.5em; }
|
||||
|
||||
.boardRead .replyAndTrackback { float:left; width:100%; background:url(../images/common/bg_repeat_x_eaeaea.gif) repeat-x left bottom; overflow:hidden;}
|
||||
.boardRead .replyAndTrackback li { float:left; font-weight:bold; margin:.3em 0 0 0; padding:.7em 1.1em .7em 1.2em; color:#FFFFFF; background:#B8B8B8; list-style:none;}
|
||||
.boardRead .replyAndTrackback li a { color:#FFFFFF; text-decoration:none; }
|
||||
.boardRead .replyAndTrackback li strong { padding:0 1.1em 0 0; background:#B8B8B8 url(../images/common/icon_close.gif) no-repeat right .2em;}
|
||||
.boardRead .replyAndTrackback li.selected a { color:#666666;}
|
||||
.boardRead .replyAndTrackback li.selected strong { padding:0 1.1em 0 0; background:#FFFFFF url(../images/common/icon_open.gif) no-repeat right .2em;}
|
||||
.boardRead .replyAndTrackback a#toggleReply { background:url(../images/common/buttonToggleReply.gif) no-repeat right top;}
|
||||
.boardRead .replyAndTrackback a#toggleTrackback { background:url(../images/common/buttonToggleReply.gif) no-repeat right -13px;}
|
||||
|
||||
.boardRead #reply,
|
||||
.boardRead #trackback { color:#666666; border-left:1px solid #EAEAEA; border-right:1px solid #EAEAEA; border-bottom:1px solid #EAEAEA; padding-top:1em;}
|
||||
.boardRead #reply { }
|
||||
.boardRead #trackback { display:none;}
|
||||
|
||||
.boardRead .topBorder { border-top:1px solid #EAEAEA; }
|
||||
|
||||
.boardRead #reply .contentBox,
|
||||
.boardRead #trackback .contentBox { line-height:1.25em; color:#676767; clear:both; padding:1em; overflow:hidden;}
|
||||
.boardRead #reply .top_border,
|
||||
.boardRead #trackback .top_border { border-top:1px dashed #d8d8d8; }
|
||||
|
||||
.boardRead .contentBox .content { width:100%; overflow:hidden; clear:both; margin-bottom:1em; }
|
||||
.boardRead .contentBox .author { float:left; overflow:hidden; color:#3173a3;}
|
||||
.boardRead .contentBox .date { float:right; font:.8em Tahoma; color:#cccccc; margin-left:.5em; }
|
||||
.boardRead .contentBox .replyOption { float:right; display:inline; white-space:nowrap; margin-left:.5em; }
|
||||
.boardRead .contentBox .replyOption img { vertical-align:middle;}
|
||||
|
||||
.boardRead .contentBox .fileAttached { position:relative; _width:100%; overflow:hidden; clear:both; }
|
||||
.boardRead .contentBox .fileAttached h5 {}
|
||||
.boardRead .contentBox .fileAttached ul { margin-bottom:.5em;}
|
||||
.boardRead .contentBox .fileAttached li { float:left; margin-right:.75em; line-height:1.6em; color:#888888; white-space:nowrap; list-style:none;}
|
||||
.boardRead .contentBox .fileAttached li a { font-size:.9em; padding:.1em 0 .1em .2em; white-space:nowrap; position:relative; color:#888888; text-decoration:none; }
|
||||
.boardRead .contentBox .fileAttached li a:visited { color:#777777;}
|
||||
|
||||
.boardRead .contentBox .title a { color:#676767 ; margin-right:.3em; text-decoration:none;}
|
||||
.boardRead .contentBox address a { font-size:.9em; color:#3173a3; margin-right:.3em; text-decoration:none; }
|
||||
.boardRead .contentBox address .trackback_date { font:.8em Tahoma; color:#cccccc; margin-left:.5em; }
|
||||
.boardRead .indent_box { background-color:#FBFBFB; }
|
||||
.boardRead .contentBox .indent {padding-left:1.5em; background:url(../images/common/icon_arrow_reply.gif) no-repeat left .1em;}
|
||||
|
||||
/* boardEditor */
|
||||
.boardEditor { padding:.5em 0 1em 0; width:100%; overflow:hidden;}
|
||||
.boardEditor.reply { padding:.5em 1em 1em 1em; width:auto; overflow:hidden;}
|
||||
.boardEditor legend { position:absolute; overflow:hidden; width:1px; height:1px; font-size:.001em;}
|
||||
.boardEditor fieldset { _width:100%; border:0px solid #eaeae7; border-top:none;}
|
||||
.boardEditor .userNameAndPw { position:relative; background:#fbfbfb; border-top:1px solid #eaeae7; border-bottom:1px solid #e1e1e1; padding:.5em 1em; white-space:nowrap;}
|
||||
.boardEditor .userNameAndPw * { vertical-align:middle;}
|
||||
.boardEditor .userNameAndPw label { margin-right:.2em; color:#666760;}
|
||||
.boardEditor .userNameAndPw input { color:#aaaaaa;}
|
||||
.boardEditor .userNameAndPw .userName { width:6em; margin-right:.8em;}
|
||||
.boardEditor .userNameAndPw .userPw { width:5em;}
|
||||
.boardEditor .userNameAndPw .emailAddress { width:6em;}
|
||||
.boardEditor .userNameAndPw .homePage { width:6em;}
|
||||
.boardEditor .userNameAndPw .checkSecret { position:absolute; right:2em; top:.7em;}
|
||||
|
||||
/* boardWrite */
|
||||
.boardWrite { width:100%; position:relative;}
|
||||
.boardWrite .userNameAndPw { margin-bottom:-1px;}
|
||||
|
||||
.boardWrite div.title label.title { display:block; float:left; font-weight:bold; padding:.4em 0 0 1.5em; width:9.5em; white-space:nowrap;}
|
||||
.boardWrite div.title input#title { width:60%;}
|
||||
|
||||
.boardWrite .option dt { display:block; float:left; font-weight:bold; padding:.3em 0 0 1.5em; width:9.5em; white-space:nowrap;}
|
||||
.boardWrite .option dd { float:left; margin-right:1em; padding-top:.2em; _padding-top:.1em;}
|
||||
.boardWrite .option dd * { vertical-align:middle;}
|
||||
.boardWrite .inputTypeText { background:#fbfbfb;}
|
||||
.boardWrite .trackbackURI { clear:both; border-top:1px solid #eff0ed; padding:4px 0 .8em 0;}
|
||||
.boardWrite .trackbackURI label { display:block; float:left; color:#333333; font-weight:bold; padding:.4em 0 0 1.5em; width:11em;}
|
||||
.boardWrite .trackbackURI .inputTypeText { width:50%;}
|
||||
.boardWrite .tag { clear:both; border-top:1px solid #eff0ed; padding:.8em 0;}
|
||||
.boardWrite .tag label { display:block; float:left; color:#333333; font-weight:bold; padding:.4em 0 0 1.5em; width:11em;}
|
||||
.boardWrite .tag .inputTypeText { width:50%;}
|
||||
.boardWrite .tag .help { vertical-align:middle;}
|
||||
.boardWrite .tag .info { padding:.5em 0 0 .6em; margin-left:14em; font-size:.9em; color:#999999; background:url(../images/common/iconArrowD8.gif) no-repeat left center;}
|
||||
.boardWrite .extra_vars { clear:both; border-top:1px solid #eff0ed; padding:.8em 0;}
|
||||
.boardWrite .extra_vars label { display:block; float:left; color:#333333; font-weight:bold; padding:.4em 0 0 1.5em; width:11em;}
|
||||
.boardWrite .extra_vars .info { clear:both; padding:.5em 0 0 .6em; margin-left:14em; font-size:.9em; color:#999999; background:url(../images/common/iconArrowD8.gif) no-repeat left center;}
|
||||
.boardWrite .extra_vars ul li { float:left; margin-right:1em; }
|
||||
|
||||
/* ----- List+Read+Write+Modify | End ----- */
|
||||
|
||||
/* ----- Blog | Start ----- */
|
||||
#blog #bodyWrap #login_menu { padding:0 1.2em;}
|
||||
#blog #bodyWrap #login_menu .member { float:right}
|
||||
#blog #bodyWrap #login_menu .member li {display:inline; margin:0 0 0 -.1em; padding:0 .6em; background:url(../images/common/bar_1x7_c0c0c0.gif) no-repeat left center;}
|
||||
#blog #bodyWrap #login_menu .login {float:right}
|
||||
|
||||
|
||||
/* Blog header Child*/
|
||||
#blog #header h1 { font:bold 1.3em 돋움; margin:2em 0 .4em 30px; letter-spacing:-.05em; }
|
||||
#blog #header h1 a { color:#FFFFFF;}
|
||||
#blog #header #tagLine { padding:0 0 0 30px; color:#f6c8c8;}
|
||||
#blog #header #globalNavigation { width:100%; margin:2.4em 0 0 0; padding:.8em 0 .8em 53.5em; background:#e4e4e4; overflow:hidden;}
|
||||
#blog #header #globalNavigation li { float:left; margin-left:-1px; background:url(../images/common/bar_1x10_c0c0c0.gif) no-repeat left bottom;}
|
||||
#blog #header #globalNavigation li.no_bg { background:none;}
|
||||
#blog #header #globalNavigation li a { display:block; float:left; padding:0 1.2em; font:bold .8em Tahoma; color:#54564b; white-space:nowrap;}
|
||||
#blog #header #globalNavigation li.on a { color:#ee2126;}
|
||||
|
||||
/* Column Left & Right Common Child */
|
||||
.boxTypeA { position:relative; border:5px solid #F2F2F2; margin-bottom:.7em;}
|
||||
.boxTypeB { position:relative; margin-bottom:.7em;}
|
||||
.boxTypeB h2 { position:relative; padding:7px 0 0 12px; height:21px; _height:20px; background:#f5f5f5; font-size:1em; color:#ef2121; font-family:Tahoma;}
|
||||
*:first-child+html .boxTypeB h2 { height:20px; color:#ef2121;}
|
||||
.boxTypeB .toggleMask {position:absolute; top:8px; right:5px; cursor:pointer; width:13px; height:13px; overflow:hidden;}
|
||||
.boxTypeB .showHide { position:relative;}
|
||||
.boxTypeB .optionList { position:absolute; top:8px; right:0; overflow:hidden;}
|
||||
.boxTypeB .optionList li { float:left; padding:0 .5em; margin-left:-1px; background:url(../images/common/line_1x10_e0e0e0.gif) no-repeat left center;}
|
||||
.boxTypeB .optionList li a { color:#a4a4a4; font-size:.9em;}
|
||||
.boxTypeB .optionList li.on a { color:#000000;}
|
||||
.boxTypeB .showAll { color:#737373; font:bold .9em tahoma; white-space:nowrap; display:inline-block; padding:.4em .8em; background:url(../images/common/bar_1x8_c0c0c0.gif) no-repeat right center;}
|
||||
.boxTypeB .showAll.no_bg { background:none;}
|
||||
|
||||
/* Profile */
|
||||
#blog div#profile { padding:6px; overflow:hidden;}
|
||||
#blog div#profile img.profile { width:153px; display:block; margin-bottom:1.2em;}
|
||||
#blog div#profile dl#hello {}
|
||||
#blog div#profile dl#hello dt { color:#333333; margin-bottom:.5em;}
|
||||
#blog div#profile dl#hello dt a { color:#333333;}
|
||||
#blog div#profile dl#hello dd { color:#777777; margin-bottom:1em;}
|
||||
#blog div#profile ul#admin { overflow:hidden; height:1.2em;}
|
||||
#blog div#profile ul#admin li { float:left; padding:0 .4em; font:.8em tahoma;}
|
||||
#blog div#profile ul#admin li a { display:block;}
|
||||
#blog div#profile ul#admin li.write a {}
|
||||
#blog div#profile ul#admin li.setup { border-left:1px solid #e3e3e3;}
|
||||
#blog div#profile ul#admin li.setup a {}
|
||||
#blog div#profile ul#admin li a { color:#666666;}
|
||||
|
||||
/* Category */
|
||||
#blog div#category {}
|
||||
#blog div#category #categoryList { padding:1em .8em .5em .8em;}
|
||||
#blog div#category #categoryList li { position:relative; padding:0 0 0 15px; background:url(../images/common/iconFolderClose.gif) no-repeat 2px top;}
|
||||
#blog div#category #categoryList li li {}
|
||||
#blog div#category #categoryList li li li { background:url(../images/common/iconList.gif) no-repeat 5px top;}
|
||||
#blog div#category #categoryList a { display:block; _display:inline-block; color:#6b6b6b; margin:0 0 6px 5px;}
|
||||
|
||||
/* Search Box */
|
||||
#blog div#searchBox { margin-bottom:.7em; padding:.6em; background:#f5f5f5; overflow:hidden;}
|
||||
#blog div#searchBox fieldset { border:none;}
|
||||
#blog div#searchBox fieldset legend { position:absolute; overflow:hidden; width:1px; height:1px; font-size:.001em; text-indent:-100em;}
|
||||
|
||||
/* Tags */
|
||||
#blog div#tag { padding-bottom:1em;}
|
||||
#blog div#tag .tagList { padding:1.2em; overflow:hidden;}
|
||||
#blog div#tag .tagList li { display:inline; color:#a4a4a4; margin-right:.1em; line-height:1.5em;}
|
||||
#blog div#tag .tagList li a { color:#a4a4a4;}
|
||||
#blog div#tag .tagList li.typeA a { color:#717171; font-weight:bold;}
|
||||
#blog div#tag .tagList li.typeB a { color:#3d3d3d;}
|
||||
#blog div#tag .tagList li.typeC a { font-weight:bold;}
|
||||
#blog div#tag .tag_sort { width:100%; border-top:1px dashed #ababab; border-bottom:1px dashed #ababab; text-align:center; overflow:hidden;}
|
||||
|
||||
/* Neighbor */
|
||||
#blog div#neighbor {}
|
||||
#blog div#neighbor #neighborList { padding:1.2em 1.2em 0 1.2em;}
|
||||
#blog div#neighbor #neighborList li { padding:0 0 .7em 1.2em; background:url(../images/common/iconPlus2.gif) no-repeat left top;}
|
||||
#blog div#neighbor #neighborList li img { padding-left:.3em; top:.1em;}
|
||||
#blog div#neighbor #neighborList li a { display:inline-block; color:#6b6b6b; font-weight:bold;}
|
||||
#blog div#neighbor #neighborList li ul { display:none; padding:.7em 0 0 0;}
|
||||
#blog div#neighbor #neighborList li ul li { padding:0 0 .6em .6em; margin-left:-.6em; background:url(../images/common/iconLineBD.gif) no-repeat left 5px;}
|
||||
#blog div#neighbor #neighborList li ul li a{ font-weight:normal;}
|
||||
|
||||
/* Calendar */
|
||||
#blog div#calendar {}
|
||||
#blog div#calendar table { width:100%; background:url(../images/common/bg_line_dot_x.gif) repeat-x left top;}
|
||||
#blog div#calendar table caption { font:bold 1em 돋움; color:#ec1a25; padding:1em;}
|
||||
#blog div#calendar table caption .mm { font:bold 1em 돋움; color:#555650;}
|
||||
#blog div#calendar table caption a { padding:.2em;}
|
||||
#blog div#calendar table caption a img { vertical-align:middle;}
|
||||
#blog div#calendar table th { padding:.6em 0;}
|
||||
#blog div#calendar table td { padding:.25em 0;}
|
||||
#blog div#calendar table th { font:bold .7em tahoma; color:#717171;}
|
||||
#blog div#calendar table th.sun { color:#000000;}
|
||||
#blog div#calendar table td { text-align:center;}
|
||||
#blog div#calendar table td a { font:.7em Tahoma; color:#9a9a9a;}
|
||||
#blog div#calendar table td.sun { color:#000000;}
|
||||
#blog div#calendar table td.sun a { color:#000000;}
|
||||
#blog div#calendar table td.today a { font-weight:bold; color:#54564b;}
|
||||
#blog div#calendar table td.posted a { text-decoration:underline;}
|
||||
|
||||
#blog .boardWrite div.title { border-top:2px solid #ed1b24;}
|
||||
#blog .write_post h3 {margin:1.5em 1em 1em 1em; font:bold 1.2em 돋움;}
|
||||
/* ----- Blog | End ----- */
|
||||
|
||||
|
||||
/* ----- Member | Start ----- */
|
||||
|
||||
.memberHeader { position:relative; _width:100%; background:#ED2027 url(../images/common/bg_top_title.gif) no-repeat 23px -6px; overflow:hidden;}
|
||||
.memberHeader h3 { float:left; clear:both; padding:1.2em 0 1em 1.7em; font-size:1.1em; color:#FFFFFF;}
|
||||
.memberInformation { width:100%; clear:both; margin:0 0 .5em 0; background:#EFEFEF; color:#8D8D8D; overflow:hidden;}
|
||||
.memberInformation .friendNum { float:left; padding:.7em 0 .7em 2em; background:url(../images/common/iconFriend.gif) no-repeat .5em .4em;}
|
||||
.memberInformation .friendNum strong { font:bold 11px Tahoma; color:#ec2127;}
|
||||
.memberInformation .addGroup { float:right; margin:.8em 1em .7em 0;}
|
||||
.memberInformation .instantMessage { float:right; margin:.7em; overflow:hidden;}
|
||||
.memberInformation .instantMessage li { float:left; margin:0 0 0 -.1em; padding:0 .5em; background:url(../images/common/bar_1x7_c0c0c0.gif) no-repeat left .25em;}
|
||||
.memberInformation .instantMessage li a {white-space:nowrap; color:#666666;}
|
||||
.memberInformation .instantMessage li.on a { background-position:left -14px; font-weight:bold;}
|
||||
.memberInformation .instantMessage li a strong { font:bold 0.75em tahoma; color:#ee202a;}
|
||||
|
||||
/* 친구목록 */
|
||||
.memberList { width:100%; position:relative; border-bottom:2px solid #ED2A32; border-collapse:collapse;}
|
||||
|
||||
.memberList th {padding:1.2em .5em 1.1em .6em; background:#ffffff url(../images/common/bg_title.gif) no-repeat left bottom; white-space:nowrap;}
|
||||
.memberList th.check { padding:0;}
|
||||
.memberList th.friendGroup { padding:0 0 0 .3em; text-align:left;}
|
||||
.memberList th select,
|
||||
.memberList th input { vertical-align:middle;}
|
||||
.memberList th.repeat_bg { background:#ffffff url(../images/common/bg_title_repeat_x.gif) repeat-x left bottom;}
|
||||
|
||||
.memberList td { padding:.3em; border-bottom:1px solid #e4e4e2;}
|
||||
.memberList td.noline { border-bottom:none;}
|
||||
.memberList td.check { text-align:center;}
|
||||
.memberList td.friendGroup { }
|
||||
.memberList td.userId { text-align:center; font:.9em Tahoma;}
|
||||
.memberList td.userName { text-align:center;}
|
||||
.memberList td.userNick { text-align:center; color:#999999;}
|
||||
.memberList td.registDate { text-align:center; font:.8em Tahoma;}
|
||||
.memberList td.sendMessage { text-align:center;}
|
||||
|
||||
|
||||
.smallBox { margin:5em auto 1em auto;}
|
||||
.smallBox.w268 { width:268px;}
|
||||
.smallBox.w298 { width:298px;}
|
||||
.smallBox.w498 { width:498px;}
|
||||
.smallBox .header { position:relative; _width:100%; background:#ed2027; overflow:hidden;}
|
||||
.smallBox .header h3 { font-size:1.2em; color:#FFFFFF; padding:1em 2em .8em 1em;}
|
||||
.smallBox .login { position:relative; border:none; padding:2.4em 0 2em 2.3em;}
|
||||
.smallBox .login legend { position:absolute; overflow:hidden; width:1px; height:1px; font-size:.001em; text-indent:-100em;}
|
||||
.smallBox .login dl { overflow:hidden; width:162px; float:left;}
|
||||
.smallBox .login dl dt { float:left; width:55px; color:#54564b; height:22px; padding-top:5px;}
|
||||
.smallBox .login dl dd { float:left; width:105px; height:27px;}
|
||||
.smallBox .login dl dd input { width:90px;}
|
||||
.smallBox .login .loginButton { display:block; float:left; margin-top:27px; _margin-top:28px;}
|
||||
*:first-child+html .smallBox .login .loginButton { margin-top:28px;}
|
||||
.smallBox .login .keep { float:left; clear:both; white-space:nowrap; position:relative; left:55px; _left:52px;}
|
||||
*:first-child+html .smallBox .login .keep { left:52px;}
|
||||
.smallBox .login .keep input { vertical-align:middle;}
|
||||
.smallBox .login .keep label { font-size:11px; color:#999999;}
|
||||
.smallBox .help { background:#F7F7F7; border-top:1px solid #ed2a32; border-bottom:2px solid #ee2b33; overflow:hidden; padding:1.1em; text-align:center; height:1em;}
|
||||
.smallBox .help li { display:inline; padding:0 .3em 0 .7em; background:url(../images/common/bar_1x7_c0c0c0.gif) no-repeat left center;}
|
||||
.smallBox .help li:first-child { background:none;}
|
||||
.smallBox .help li.first-child { _background:none;}
|
||||
.smallBox .help li a { font-size:11px; color:#54564b;}
|
||||
.smallBox .text { color:#54564b; text-align:center; padding:4.25em 2em 4.8em 2em;}
|
||||
.smallBox .text p { margin-bottom:.5em;}
|
||||
.smallBox .button img { vertical-align:top;}
|
||||
.smallBox.w268 .button ul { position:absolute; left:79px; }
|
||||
.smallBox.w298 .button ul { position:absolute; left:110px; }
|
||||
.smallBox.w498 .button ul { position:absolute; left:220px; }
|
||||
.smallBox .button ul li { float:left; margin-right:.3em;}
|
||||
.smallBox .complex { padding:1.5em 2em 2em 2em;}
|
||||
.smallBox .friend { width:100%;}
|
||||
.smallBox .friend th { width:7em; padding:.9em; border-bottom:1px solid #e4e5e0;}
|
||||
.smallBox .friend td { padding:.9em; border-bottom:1px solid #e4e5e0; background:url(../images/common/bar_1x18_e4e5e0.gif) no-repeat left bottom;}
|
||||
.smallBox .leftHeaderType { border-top:1px solid #e0e1db; border-left:1px solid #e0e1db; width:100%;}
|
||||
.smallBox .leftHeaderType th,
|
||||
.smallBox .leftHeaderType td { border-right:1px solid #e0e1db; border-bottom:1px solid #e0e1db; padding:.8em 1em .6em 1em;}
|
||||
.smallBox .leftHeaderType th { color:#333333; text-align:left; background:#f5f5f3;}
|
||||
.smallBox .leftHeaderType td { color:#444444;}
|
||||
.smallBox .inputTypeText { background:#fbfbfb;}
|
||||
.smallBox .group { overflow:hidden; padding:.5em 0; margin-top:.7em;}
|
||||
.smallBox .group select { float:left; width:180px; margin-top:1px;}
|
||||
.smallBox .pwModify { border:none;}
|
||||
.smallBox .pwModify legend { position:absolute; overflow:hidden; width:1px; height:1px; font-size:.001em; text-indent:-100em;}
|
||||
.smallBox .pwModify input { width:9em;}
|
||||
.smallBox .pwModify br { display:block; margin-bottom:.2em}
|
||||
.smallBox .pwModify p { text-align:center; margin-top:1em; color:#54564b;}
|
||||
|
||||
|
||||
/* messageList */
|
||||
.messageList { width:100%; position:relative; border-bottom:2px solid #ed2a32; border-collapse:collapse;}
|
||||
.messageList tr.notice .num { font:.9em "돋움", Dotum, "굴림", Gulim, AppleGothic, Sans-serif; font-weight:bold;}
|
||||
|
||||
.messageList th {padding:1.2em .5em 1.1em .6em; background:#ffffff url(../images/common/bg_title.gif) no-repeat left bottom; white-space:nowrap;}
|
||||
.messageList th:first-child,
|
||||
.messageList th.first-child { background-position:-3px bottom;}
|
||||
.messageList th.author { background:url(../images/common/bg_title_repeat_x.gif) repeat-x left bottom; text-align:left;}
|
||||
.messageList th.check { padding:0;}
|
||||
.messageList th select,
|
||||
.messageList th input { vertical-align:middle;}
|
||||
|
||||
.messageList td { padding:.3em; border-bottom:1px solid #EFEFEF;}
|
||||
.messageList td.noline { border-bottom:none;}
|
||||
.messageList td.category {}
|
||||
.messageList tr.notice td { padding:.7em .7em .7em .9em; white-space:nowrap;}
|
||||
.messageList tr.notice td img { margin:-.1em .3em 0 0;}
|
||||
.messageList td.thumb { padding:.5em 0 .5em .5em; width:145px; table-layout:fixed; white-space:nowrap;}
|
||||
.messageList td.thumb * { vertical-align:middle;}
|
||||
.messageList td.title {}
|
||||
.messageList td.title.bold { font-size:1em; font-weight:bold;}
|
||||
.messageList td.title.bold a { position:relative; top:.3em;}
|
||||
.messageList td.title * { vertical-align:middle;}
|
||||
.messageList td.title,
|
||||
.messageList td.title a { color:#444444;}
|
||||
.messageList td.title a:visited { color:#777777;}
|
||||
.messageList td.author { padding:0 .5em 0 1.3em; color:#333333; font:.95em "돋움", Dotum, "굴림", Gulim, AppleGothic, Sans-serif;}
|
||||
.messageList td.author a { font-size:1em; color:#333333;}
|
||||
.messageList td.reading { font:.8em Tahoma; color:#999999; text-align:center;}
|
||||
.messageList td.recommend { font:bold .8em Tahoma; color:#ec2127; text-align:center;}
|
||||
.messageList td.reply { font:bold .8em Tahoma; color:#ff6600; text-align:center;}
|
||||
.messageList td.date { font:.8em Tahoma; color:#999999; text-align:center;}
|
||||
.messageList td.registDate { font:.8em Tahoma; color:#999999; text-align:center;}
|
||||
.messageList td.checkDate { font:.8em Tahoma; color:#333333; text-align:center;}
|
||||
.messageList td.summary { border-top:none; vertical-align:top; color:#666666; line-height:1.25em;}
|
||||
.messageList td.summary a { color:#666666; text-decoration:none; line-height:inherit;}
|
||||
.messageList td.summary a:visited { color:#999999;}
|
||||
.messageList td.check { text-align:center;}
|
||||
.messageList td.user { color:#333333; font-size:.9em;}
|
||||
.messageList td.user a { color:#333333;}
|
||||
.messageList td.userId { font:.9em Tahoma;}
|
||||
.messageList td.userNick { font-size:.9em; color:#999999;}
|
||||
.messageList td.sendMessage { text-align:center; padding:0;}
|
||||
.messageList td.sendMessage .buttonFixedLeft { position:relative; left:20%; _left:0;}
|
||||
|
||||
.readMessage { margin-bottom:2em;}
|
||||
.readMessage .messageHeader { padding:1.5em; height:1em; overflow:hidden;}
|
||||
.readMessage .messageHeader h4 { float:left; padding-left:.5em; font-size:1em; background:url(../images/common/iconArrow99.gif) no-repeat left .3em;}
|
||||
.readMessage .messageHeader address { float:right; white-space:nowrap;}
|
||||
.readMessage .messageHeader address em { font-size:.9em; font-style:normal; color:#333333; margin-right:.3em;}
|
||||
.readMessage .messageHeader address em a { color:#333333;}
|
||||
.readMessage .messageHeader address .date { font:.8em Tahoma; color:#999999;}
|
||||
.readMessage .messageBody { border:1px solid #e0e1db; margin:0 1.5em 1.5em 1.5em; padding:1em; position:relative; color:#666666;}
|
||||
.readMessage .deleteOrKeep { padding:.5em 0; overflow:hidden; background:#f5f5f3; border-top:1px solid #eaebe7; _width:100%;}
|
||||
.readMessage .deleteOrKeep li { position:relative; left:40%; float:left; margin-right:.5em;}
|
||||
.readMessage .button { position:relative; background:#f7f7f7; border-top:1px solid #ee2b33; border-bottom:2px solid #ee2b33; overflow:hidden; padding:.7em; text-align:center;}
|
||||
|
||||
|
||||
.joinTable.typeA { border-top:2px solid #ee1b24; border-collapse:collapse;}
|
||||
.joinTable.typeB { border-bottom:2px solid #ee1b24; background:#f9f9f9;}
|
||||
.joinTable.typeC { border-top:2px solid #ee2b33; border-bottom:2px solid #ee2b33; border-collapse:collapse;}
|
||||
.joinTable.typeB caption { border-top:1px dashed #919191; background:#f9f9f9;}
|
||||
.joinTable { width:100%;}
|
||||
.joinTable caption { padding:2em 0 .5em 1.5em; font-weight:bold; text-align:left; background:url(../images/common/iconH3.gif) no-repeat .5em 2em;}
|
||||
.joinTable th,
|
||||
.joinTable td { padding:.7em .5em .7em 1.5em; text-align:left; border-top:1px solid #eff0eb;}
|
||||
.joinTable td { background:url(../images/common/bar_1x18_e4e5e0.gif) no-repeat left bottom;}
|
||||
.joinTable th { width:10em;}
|
||||
.joinTable td textarea { width:40em; height:4.5em; border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; padding:3px; line-height:1em; background:#fbfbfb; vertical-align:middle; float:left; margin-right:.5em; margin-bottom:.5em; color:#666666; overflow:auto;}
|
||||
.joinTable td input { border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; padding:3px; height:1em; line-height:1em; background:#fbfbfb; vertical-align:middle; float:left; margin-right:.5em; margin-bottom:.5em; color:#666666;}
|
||||
.joinTable td input.radio,
|
||||
.joinTable td input.check { border:none; padding:0; margin:0; background:none; margin-top:.4em;}
|
||||
.joinTable td input.w4em { width:4em;}
|
||||
.joinTable td input.w2em { width:2em;}
|
||||
.joinTable td select { float:left; margin-right:.5em;}
|
||||
.joinTable td .fl { margin-right:.5em;}
|
||||
.joinTable td br { clear:both;}
|
||||
.joinTable td p { float:left; font-size:.9em; color:#999999; padding-top:.5em; margin-right:.5em;}
|
||||
.joinTable td label { float:left; color:#3f4040; padding-top:.3em; margin-right:.5em;}
|
||||
.joinTable td a { color:#333333;}
|
||||
.joinTable .no_line { border:none;}
|
||||
.join_button { margin:1em 0 0 0; text-align:center;}
|
||||
.joinTable .add_info { padding:2.5em .5em .7em 1.5em; background:#f9f9f9; border-top:1px dashed #919191;}
|
||||
.buttonTypeWrite.join { margin-top:1.2em;}
|
||||
|
||||
/* ----- Member | End ----- */
|
||||
|
||||
|
||||
.smallBox .inputPassword { position:relative; border:none; padding:2em 2em 1.5em 2em;}
|
||||
.smallBox .inputPassword .inputTypeText { float:left; margin-right:.5em; width:8em;}
|
||||
.smallBox .inputPassword legend { position:absolute; overflow:hidden; width:1px; height:1px; font-size:.001em; text-indent:-100em;}
|
||||
20
modules/board/skins/cozy_simple_gallery/css/green.css
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
@charset "utf-8";
|
||||
|
||||
/* boardHeader */
|
||||
.boardHeader { position:relative; _width:100%; background:#8dc63f url(../images/green/bg_top_title.gif) no-repeat 23px top; overflow:hidden;}
|
||||
.boardList { width:100%; position:relative; border-bottom:2px solid #8dc63f; border-collapse:collapse; }
|
||||
|
||||
.boardList th {padding:1.2em .5em 1.1em .6em; background:#ffffff url(../images/green/bg_title.gif) no-repeat left bottom; white-space:nowrap;}
|
||||
.boardList td .replyAndTrackback { font:.8em Tahoma; color:#27a939; cursor:default; position:relative; top:-.2em;}
|
||||
.boardList td.recommend { font:bold .8em Tahoma; color:#27a939; text-align:center;}
|
||||
|
||||
.pageNavigation .current { margin-left:-4px; font:bold .8em Tahoma; color:#27a939; display:inline-block; padding:1px 5px 2px 4px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; }
|
||||
|
||||
.boardRead { position:relative; _width:100%; margin:1em 0 0 0; padding: 0 0 .6em 0; border-bottom:3px solid #8dc63f;}
|
||||
.boardRead .readHeader { width:100%; padding-bottom:.5em; margin-bottom:1em; border-bottom:3px solid #8dc63f; overflow:hidden;}
|
||||
.boardRead .replyAndTrackback li.selected { margin:0; padding:1em 1.1em .7em 1.4em; border:1px solid #EAEAEA; border-bottom:none; background:#FFFFFF; color:#8dc63f;}
|
||||
|
||||
.boardWrite fieldset.bottomBorder { border-bottom:2px solid #8dc63f;}
|
||||
.boardWrite div.title { padding:.5em 0 .65em 0; white-space:nowrap; background:#FFFFFF url(../images/green/bg_title_norepeat.gif) no-repeat left bottom;}
|
||||
.boardWrite .option { width:100%; padding:.5em 0 .65em 0; background:#FFFFFF url(../images/green/bg_title_norepeat.gif) no-repeat left bottom; overflow:hidden;}
|
||||
|
||||
19
modules/board/skins/cozy_simple_gallery/css/pink.css
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
@charset "utf-8";
|
||||
|
||||
/* boardHeader */
|
||||
.boardHeader { position:relative; _width:100%; background:#f70795 url(../images/pink/bg_top_title.gif) no-repeat 23px top; overflow:hidden;}
|
||||
.boardList { width:100%; position:relative; border-bottom:2px solid #f70795; border-collapse:collapse; }
|
||||
|
||||
.boardList th {padding:1.2em .5em 1.1em .6em; background:#ffffff url(../images/pink/bg_title.gif) no-repeat left bottom; white-space:nowrap;}
|
||||
.boardList td .replyAndTrackback { font:.8em Tahoma; color:#f70795; cursor:default; position:relative; top:-.2em;}
|
||||
.boardList td.recommend { font:bold .8em Tahoma; color:#f70795; text-align:center;}
|
||||
|
||||
.pageNavigation .current { margin-left:-4px; font:bold .8em Tahoma; color:#f70795; display:inline-block; padding:1px 5px 2px 4px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; }
|
||||
|
||||
.boardRead { position:relative; _width:100%; margin:1em 0 0 0; padding: 0 0 .6em 0; border-bottom:3px solid #f70795;}
|
||||
.boardRead .readHeader { width:100%; padding-bottom:.5em; margin-bottom:1em; border-bottom:3px solid #f70795; overflow:hidden;}
|
||||
.boardRead .replyAndTrackback li.selected { margin:0; padding:1em 1.1em .7em 1.4em; border:1px solid #EAEAEA; border-bottom:none; background:#FFFFFF; color:#f70795;}
|
||||
|
||||
.boardWrite fieldset.bottomBorder { border-bottom:2px solid #f9f9f9;}
|
||||
.boardWrite div.title { padding:.5em 0 .65em 0; white-space:nowrap; background:#FFFFFF url(../images/pink/bg_title_norepeat.gif) no-repeat left bottom;}
|
||||
.boardWrite .option { width:100%; padding:.5em 0 .65em 0; background:#FFFFFF url(../images/pink/bg_title_norepeat.gif) no-repeat left bottom; overflow:hidden;}
|
||||
19
modules/board/skins/cozy_simple_gallery/css/red.css
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
@charset "utf-8";
|
||||
|
||||
/* boardHeader */
|
||||
.boardHeader { position:relative; _width:100%; background:#ED2027 url(../images/red/bg_top_title.gif) no-repeat 23px top; overflow:hidden;}
|
||||
.boardList { width:100%; position:relative; border-bottom:2px solid #ed2a32; border-collapse:collapse; }
|
||||
|
||||
.boardList th {padding:1.2em .5em 1.1em .6em; background:#ffffff url(../images/red/bg_title.gif) no-repeat left bottom; white-space:nowrap;}
|
||||
.boardList td .replyAndTrackback { font:.8em Tahoma; color:#ed1f29; cursor:default; position:relative; top:-.2em;}
|
||||
.boardList td.recommend { font:bold .8em Tahoma; color:#ec2127; text-align:center;}
|
||||
|
||||
.pageNavigation .current { margin-left:-4px; font:bold .8em Tahoma; color:#ff6600; display:inline-block; padding:1px 5px 2px 4px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; }
|
||||
|
||||
.boardRead { position:relative; _width:100%; margin:1em 0 0 0; padding: 0 0 .6em 0; border-bottom:3px solid #ed2228;}
|
||||
.boardRead .readHeader { width:100%; padding-bottom:.5em; margin-bottom:1em; border-bottom:3px solid #ee202a; overflow:hidden;}
|
||||
.boardRead .replyAndTrackback li.selected { margin:0; padding:1em 1.1em .7em 1.4em; border:1px solid #EAEAEA; border-bottom:none; background:#FFFFFF; color:#eb1c22;}
|
||||
|
||||
.boardWrite fieldset.bottomBorder { border-bottom:2px solid #ed1b24;}
|
||||
.boardWrite div.title { padding:.5em 0 .65em 0; white-space:nowrap; background:#FFFFFF url(../images/red/bg_title_norepeat.gif) no-repeat left bottom;}
|
||||
.boardWrite .option { width:100%; padding:.5em 0 .65em 0; background:#FFFFFF url(../images/red/bg_title_norepeat.gif) no-repeat left bottom; overflow:hidden;}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
<!--%import("filter/delete_comment.xml")-->
|
||||
<!--#include("header.html")-->
|
||||
|
||||
<div class="smallBox w268">
|
||||
|
||||
<div class="header">
|
||||
<h3>{$lang->confirm_delete}</h3>
|
||||
</div>
|
||||
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, delete_comment)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
<input type="hidden" name="comment_srl" value="{$comment_srl}" />
|
||||
|
||||
<div class="inputPassword tCenter">
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_delete}" accesskey="s" /></span>
|
||||
<a href="{getUrl('act','')}" class="button"><span>{$lang->cmd_cancel}</span></a>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!--#include("footer.html")-->
|
||||
23
modules/board/skins/cozy_simple_gallery/delete_form.html
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<!--%import("filter/delete_document.xml")-->
|
||||
<!--#include("header.html")-->
|
||||
|
||||
<div class="smallBox w268">
|
||||
|
||||
<div class="header">
|
||||
<h3>{$lang->confirm_delete}</h3>
|
||||
</div>
|
||||
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, delete_document)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
|
||||
<div class="inputPassword tCenter">
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_delete}" accesskey="s" /></span>
|
||||
<a href="{getUrl('act','')}" class="button"><span>{$lang->cmd_cancel}</span></a>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!--#include("footer.html")-->
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
<!--%import("filter/delete_trackback.xml")-->
|
||||
<!--#include("header.html")-->
|
||||
|
||||
<div class="smallBox w268">
|
||||
|
||||
<div class="header">
|
||||
<h3>{$lang->confirm_delete}</h3>
|
||||
</div>
|
||||
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, delete_trackback)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
<input type="hidden" name="trackback_srl" value="{$trackback_srl}" />
|
||||
|
||||
<div class="inputPassword tCenter">
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_delete}" accesskey="s" /></span>
|
||||
<a href="{getUrl('act','')}" class="button"><span>{$lang->cmd_cancel}</span></a>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
<!--#include("footer.html")-->
|
||||
65
modules/board/skins/cozy_simple_gallery/extra_var_form.html
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
<!-- 이 파일은 extra_vars의 form을 출력하는 파일이며 다른 스킨에서 그대로 가져가서 css만 바꾸어 주면 된다 -->
|
||||
|
||||
<!-- type=select,checkbox이고 기본값이 , 로 연결되어 있으면 , 를 기준으로 explode하여 배열로 만든다 -->
|
||||
<!--@if(in_array($val->type,array('select','checkbox'))&&strpos($val->default,",")!==false)-->
|
||||
{@ $val->default = explode(',',$val->default) }
|
||||
<!--@end-->
|
||||
|
||||
<!-- 확장변수의 이름을 지정 -->
|
||||
{@ $val->column_name = "extra_vars".$key}
|
||||
|
||||
<!-- 확장변수의 값을 documentItem::getExtraValue로 가져옴 -->
|
||||
{@ $val->value = $oDocument->getExtraValue($key)}
|
||||
|
||||
<!-- 일반 text -->
|
||||
<!--@if($val->type == 'text')-->
|
||||
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value)}" class="inputTypeText w400" />
|
||||
|
||||
<!-- 홈페이지 주소 -->
|
||||
<!--@elseif($val->type == 'homepage')-->
|
||||
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value)}" class="inputTypeText w400" />
|
||||
|
||||
<!-- Email 주소 -->
|
||||
<!--@elseif($val->type == 'email_address')-->
|
||||
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value)}" class="inputTypeText w400" />
|
||||
|
||||
<!-- 전화번호 -->
|
||||
<!--@elseif($val->type == 'tel')-->
|
||||
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value[0])}" size="4" class="inputTypeText" />
|
||||
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value[1])}" size="4" class="inputTypeText" />
|
||||
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value[2])}" size="4" class="inputTypeText" />
|
||||
|
||||
<!-- textarea -->
|
||||
<!--@elseif($val->type == 'textarea')-->
|
||||
<textarea name="{$val->column_name}" class="inputTypeTextArea w400">{htmlspecialchars($val->value)}</textarea>
|
||||
|
||||
<!-- 다중 선택 -->
|
||||
<!--@elseif($val->type == 'checkbox')-->
|
||||
<!--@if($val->default)-->
|
||||
<ul style="list-style:none;">
|
||||
<!--@foreach($val->default as $v)-->
|
||||
<li><input type="checkbox" name="{$val->column_name}" value="{$v}" <!--@if(is_array($val->value)&&in_array($v, $val->value))-->checked="checked"<!--@end-->/> {$v}</li>
|
||||
<!--@end-->
|
||||
</ul>
|
||||
<!--@end-->
|
||||
|
||||
<!-- 단일 선택 -->
|
||||
<!--@elseif($val->type == 'select')-->
|
||||
<select name="{$val->column_name}">
|
||||
<!--@if($val->default)-->
|
||||
<!--@foreach($val->default as $v)-->
|
||||
<option value="{$v}" <!--@if($v == $val->value)-->selected="selected"<!--@end-->>{$v}</option>
|
||||
<!--@end-->
|
||||
<!--@end-->
|
||||
</select>
|
||||
|
||||
<!-- 날짜 입력 -->
|
||||
<!--@elseif($val->type == 'date')-->
|
||||
<input type="hidden" name="{$val->column_name}" id="date_{$val->column_name}" value="{$val->value}" />
|
||||
<div class="fl inputTypeText w80" id="str_{$val->column_name}">{zdate($val->value,"Y-m-d")}</div>
|
||||
<a href="#" onclick="open_calendar('{$val->column_name}','{$val->value}');return false;" class="button"><span>{$lang->cmd_open_calendar}</span></a>
|
||||
<!--@end-->
|
||||
|
||||
<!--@if($val->desc)-->
|
||||
<p class="info">{$val->desc}</p>
|
||||
<!--@end-->
|
||||
57
modules/board/skins/cozy_simple_gallery/extra_var_value.html
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
<!-- 이 파일은 extra_vars의 결과값을 출력하는 파일이며 다른 스킨에서 그대로 가져가서 css만 바꾸어 주면 된다 -->
|
||||
|
||||
<!-- 확장변수의 이름을 지정 -->
|
||||
{@ $val->column_name = "extra_vars".$key}
|
||||
|
||||
<!-- 확장변수의 값을 documentItem::getExtraValue로 가져옴 -->
|
||||
{@ $val->value = $oDocument->getExtraValue($key)}
|
||||
|
||||
<!-- 일반 text -->
|
||||
<!--@if($val->type == 'text')-->
|
||||
{htmlspecialchars($val->value)}
|
||||
|
||||
<!-- 홈페이지 주소 -->
|
||||
<!--@elseif($val->type == 'homepage')-->
|
||||
<!--@if($val->value)-->
|
||||
<a href="{htmlspecialchars($val->value)}" onclick="window.open(this.href);return false;">{$val->value}</a>
|
||||
<!--@else-->
|
||||
|
||||
<!--@end-->
|
||||
|
||||
<!-- Email 주소 -->
|
||||
<!--@elseif($val->type == 'email_address')-->
|
||||
<!--@if($val->value)-->
|
||||
<a href="mailto:{htmlspecialchars($val->value)}">{$val->value}</a>
|
||||
<!--@else-->
|
||||
|
||||
<!--@end-->
|
||||
|
||||
<!-- 전화번호 -->
|
||||
<!--@elseif($val->type == 'tel')-->
|
||||
{htmlspecialchars($val->value[0])}
|
||||
<!--@if($val->value[1])-->-<!--@end-->
|
||||
{htmlspecialchars($val->value[1])}
|
||||
<!--@if($val->value[2])-->-<!--@end-->
|
||||
{htmlspecialchars($val->value[2])}
|
||||
|
||||
<!-- textarea -->
|
||||
<!--@elseif($val->type == 'textarea')-->
|
||||
{nl2br(htmlspecialchars($val->value))}
|
||||
|
||||
<!-- 다중 선택 -->
|
||||
<!--@elseif($val->type == 'checkbox')-->
|
||||
<!--@foreach($val->value as $v)-->
|
||||
{@ $_tmp_value[] = htmlspecialchars($v)}
|
||||
<!--@end-->
|
||||
{implode(",",$_tmp_value)}
|
||||
|
||||
<!-- 단일 선택 -->
|
||||
<!--@elseif($val->type == 'select')-->
|
||||
{htmlspecialchars($val->value)}
|
||||
|
||||
<!-- 날짜 입력 -->
|
||||
<!--@elseif($val->type == 'date')-->
|
||||
{zdate($val->value,"Y-m-d")}
|
||||
<!--@end-->
|
||||
|
||||
<!--@if(!$val->value)--> <!--@end-->
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
<filter name="delete_comment" module="board" act="procBoardDeleteComment">
|
||||
<form>
|
||||
<node target="comment_srl" required="true" />
|
||||
</form>
|
||||
<parameter>
|
||||
<param name="mid" target="mid" />
|
||||
<param name="page" target="page" />
|
||||
<param name="document_srl" target="document_srl" />
|
||||
<param name="comment_srl" target="comment_srl" />
|
||||
</parameter>
|
||||
<response callback_func="completeDeleteComment">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
<tag name="mid" />
|
||||
<tag name="document_srl" />
|
||||
<tag name="page" />
|
||||
</response>
|
||||
</filter>
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
<filter name="delete_document" module="board" act="procBoardDeleteDocument">
|
||||
<form>
|
||||
<node target="document_srl" required="true" />
|
||||
</form>
|
||||
<parameter>
|
||||
<param name="mid" target="mid" />
|
||||
<param name="page" target="page" />
|
||||
<param name="document_srl" target="document_srl" />
|
||||
</parameter>
|
||||
<response callback_func="completeDeleteDocument">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
<tag name="mid" />
|
||||
<tag name="page" />
|
||||
</response>
|
||||
</filter>
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
<filter name="delete_trackback" module="board" act="procBoardDeleteTrackback">
|
||||
<form>
|
||||
<node target="trackback_srl" required="true" />
|
||||
</form>
|
||||
<parameter>
|
||||
<param name="mid" target="mid" />
|
||||
<param name="page" target="page" />
|
||||
<param name="document_srl" target="document_srl" />
|
||||
<param name="trackback_srl" target="trackback_srl" />
|
||||
</parameter>
|
||||
<response callback_func="completeDeleteTrackback">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
<tag name="mid" />
|
||||
<tag name="document_srl" />
|
||||
<tag name="page" />
|
||||
</response>
|
||||
</filter>
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
<filter name="input_password" module="board" act="procBoardVerificationPassword" >
|
||||
<form>
|
||||
<node target="document_srl" required="true" />
|
||||
<node target="password" required="true" />
|
||||
</form>
|
||||
<parameter>
|
||||
<param name="mid" target="mid" />
|
||||
<param name="document_srl" target="document_srl" />
|
||||
<param name="comment_srl" target="comment_srl" />
|
||||
<param name="password" target="password" />
|
||||
</parameter>
|
||||
<response>
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
</response>
|
||||
</filter>
|
||||
18
modules/board/skins/cozy_simple_gallery/filter/insert.xml
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<filter name="insert" module="board" act="procBoardInsertDocument" confirm_msg_code="confirm_submit">
|
||||
<form>
|
||||
<node target="document_srl" required="true" />
|
||||
<node target="nick_name" required="true" />
|
||||
<node target="password" required="true" />
|
||||
<node target="email_address" maxlength="250" />
|
||||
<node target="homepage" maxlength="250"/>
|
||||
<node target="title" required="true" minlength="1" maxlength="250" />
|
||||
<node target="content" required="true" />
|
||||
</form>
|
||||
<response callback_func="completeDocumentInserted">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
<tag name="mid" />
|
||||
<tag name="document_srl" />
|
||||
<tag name="category_srl" />
|
||||
</response>
|
||||
</filter>
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
<filter name="insert_comment" module="board" act="procBoardInsertComment" confirm_msg_code="confirm_submit">
|
||||
<form>
|
||||
<node target="document_srl" required="true" />
|
||||
<node target="nick_name" required="true" />
|
||||
<node target="password" required="true" />
|
||||
<node target="email_address" maxlength="250" />
|
||||
<node target="homepage" maxlength="250"/>
|
||||
<node target="content" required="true" minlength="1" />
|
||||
</form>
|
||||
<parameter>
|
||||
<param name="mid" target="mid" />
|
||||
<param name="document_srl" target="document_srl" />
|
||||
<param name="comment_srl" target="comment_srl" />
|
||||
<param name="parent_srl" target="parent_srl" />
|
||||
<param name="nick_name" target="nick_name" />
|
||||
<param name="password" target="password" />
|
||||
<param name="email_address" target="email_address" />
|
||||
<param name="homepage" target="homepage" />
|
||||
<param name="content" target="content" />
|
||||
</parameter>
|
||||
<response callback_func="completeInsertComment">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
<tag name="mid" />
|
||||
<tag name="document_srl" />
|
||||
<tag name="comment_srl" />
|
||||
</response>
|
||||
</filter>
|
||||
15
modules/board/skins/cozy_simple_gallery/filter/search.xml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<filter name="search" module="board">
|
||||
<form>
|
||||
<node target="search_target" required="true" />
|
||||
<node target="search_keyword" minlegnth="2" maxlength="40" required="true" />
|
||||
</form>
|
||||
<parameter>
|
||||
<param name="mid" target="mid" />
|
||||
<param name="search_target" target="search_target" />
|
||||
<param name="search_keyword" target="search_keyword" />
|
||||
</parameter>
|
||||
<response callback_func="completeSearch">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
</response>
|
||||
</filter>
|
||||
13
modules/board/skins/cozy_simple_gallery/filter/vote.xml
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<filter name="vote" module="board" act="procBoardVoteDocument" confirm_msg_code="confirm_vote">
|
||||
<form>
|
||||
<node target="document_srl" required="true" />
|
||||
</form>
|
||||
<parameter>
|
||||
<param name="mid" target="mid" />
|
||||
<param name="document_srl" target="document_srl" />
|
||||
</parameter>
|
||||
<response callback_func="completeVote">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
</response>
|
||||
</filter>
|
||||
2
modules/board/skins/cozy_simple_gallery/footer.html
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
<!-- 하단 텍스트 출력 -->
|
||||
{$module_info->footer_text}
|
||||
50
modules/board/skins/cozy_simple_gallery/header.html
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
<!-- JS 파일 로드 -->
|
||||
<!--%import("js/board.js")-->
|
||||
|
||||
<!-- 컬러셋 체크 -->
|
||||
<!--@if(!$module_info->colorset)-->
|
||||
{@$module_info->colorset = "red"}
|
||||
<!--@end-->
|
||||
|
||||
<!-- CSS 파일 로드 (컬러셋에 따라서) -->
|
||||
<!--%import("css/common.css")-->
|
||||
<!--@if($module_info->colorset == "bluish_green")--> <!--%import("css/bluish_green.css")-->
|
||||
<!--@elseif($module_info->colorset == "pink")--> <!--%import("css/pink.css")-->
|
||||
<!--@elseif($module_info->colorset == "blue")--> <!--%import("css/blue.css")-->
|
||||
<!--@elseif($module_info->colorset == "green")--> <!--%import("css/green.css")-->
|
||||
<!--@else--> <!--%import("css/red.css")-->
|
||||
<!--@end-->
|
||||
|
||||
<!-- 상단 텍스트 출력 -->
|
||||
{$module_info->header_text}
|
||||
|
||||
<!-- 스킨의 제목/간단한 설명 출력 -->
|
||||
<div class="boardHeader">
|
||||
<h3>{$module_info->title}</h3>
|
||||
</div>
|
||||
<div class="boardInformation">
|
||||
<span class="articleNum"><!--@if($total_count)-->Total <strong>{number_format($total_count)}</strong><!--@else--> <!--@end--></span>
|
||||
<ul class="accountNavigation">
|
||||
|
||||
<!--@if($is_logged)-->
|
||||
<li><a href="{getUrl('act','dispMemberInfo')}"><img src="./images/common/btn_my.gif" alt="{$lang->member_info}" /></a></li>
|
||||
<li><a href="{getUrl('act','dispMemberLogout')}"><img src="./images/common/btn_logout.gif" alt="{$lang->cmd_logout}" /></a></li>
|
||||
|
||||
<!-- 관리자이면 설정 버튼 출력 -->
|
||||
<!--@if($grant->is_admin)-->
|
||||
<li><a href="{getUrl('act','dispBoardAdminBoardInfo')}"><img src="./images/common/btn_admin.gif" alt="{$lang->cmd_setup}" /></a></li>
|
||||
<!--@end-->
|
||||
|
||||
<!--@else-->
|
||||
<li><a href="{getUrl('act','dispMemberSignUpForm')}"><img src="./images/common/btn_joinus.gif" alt="{$lang->cmd_signup}" /></a></li>
|
||||
<li><a href="{getUrl('act','dispMemberLoginForm')}"><img src="./images/common/btn_login.gif" alt="{$lang->cmd_login}" /></a></li>
|
||||
<!--@end-->
|
||||
|
||||
<!--@if($rss_url)-->
|
||||
<li><a href="{$rss_url}"><img src="./images/common/btn_rss.gif" alt="RSS" /></a></li>
|
||||
<!--@end-->
|
||||
<li><a href="#" onclick="viewSkinInfo('{$module_info->module}','{$module_info->skin}');return false;"><img src="{getUrl()}common/tpl/images/info.png" class="zbxe_info" alt="" /></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
BIN
modules/board/skins/cozy_simple_gallery/images/blank.gif
Normal file
|
After Width: | Height: | Size: 43 B |
BIN
modules/board/skins/cozy_simple_gallery/images/blue/bg_title.gif
Normal file
|
After Width: | Height: | Size: 108 B |
|
After Width: | Height: | Size: 112 B |
|
After Width: | Height: | Size: 44 B |
|
After Width: | Height: | Size: 108 B |
|
After Width: | Height: | Size: 112 B |
|
After Width: | Height: | Size: 44 B |
|
After Width: | Height: | Size: 51 B |
|
After Width: | Height: | Size: 51 B |
|
After Width: | Height: | Size: 43 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 132 B |
|
After Width: | Height: | Size: 598 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 75 B |
|
After Width: | Height: | Size: 260 B |
|
After Width: | Height: | Size: 188 B |
|
After Width: | Height: | Size: 115 B |
|
After Width: | Height: | Size: 125 B |
|
After Width: | Height: | Size: 117 B |
|
After Width: | Height: | Size: 1,016 B |
BIN
modules/board/skins/cozy_simple_gallery/images/common/btn_login.gif
Executable file
|
After Width: | Height: | Size: 74 B |
|
After Width: | Height: | Size: 133 B |
BIN
modules/board/skins/cozy_simple_gallery/images/common/btn_manage.gif
Executable file
|
After Width: | Height: | Size: 906 B |
|
After Width: | Height: | Size: 269 B |
BIN
modules/board/skins/cozy_simple_gallery/images/common/btn_my.gif
Normal file
|
After Width: | Height: | Size: 100 B |
BIN
modules/board/skins/cozy_simple_gallery/images/common/btn_preview.gif
Executable file
|
After Width: | Height: | Size: 925 B |
BIN
modules/board/skins/cozy_simple_gallery/images/common/btn_print.gif
Executable file
|
After Width: | Height: | Size: 753 B |
|
After Width: | Height: | Size: 330 B |
|
After Width: | Height: | Size: 599 B |
BIN
modules/board/skins/cozy_simple_gallery/images/common/btn_rss.gif
Executable file
|
After Width: | Height: | Size: 376 B |
BIN
modules/board/skins/cozy_simple_gallery/images/common/btn_scrap.gif
Executable file
|
After Width: | Height: | Size: 811 B |
|
After Width: | Height: | Size: 610 B |
BIN
modules/board/skins/cozy_simple_gallery/images/common/btn_vote.gif
Executable file
|
After Width: | Height: | Size: 729 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 46 B |
|
After Width: | Height: | Size: 46 B |
|
After Width: | Height: | Size: 419 B |
|
After Width: | Height: | Size: 255 B |
|
After Width: | Height: | Size: 197 B |
|
After Width: | Height: | Size: 205 B |
|
After Width: | Height: | Size: 79 B |
|
After Width: | Height: | Size: 73 B |
|
After Width: | Height: | Size: 72 B |
|
After Width: | Height: | Size: 183 B |
|
After Width: | Height: | Size: 388 B |
|
After Width: | Height: | Size: 224 B |
|
After Width: | Height: | Size: 239 B |
|
After Width: | Height: | Size: 404 B |
|
After Width: | Height: | Size: 462 B |
|
After Width: | Height: | Size: 267 B |
|
After Width: | Height: | Size: 108 B |
|
After Width: | Height: | Size: 112 B |
|
After Width: | Height: | Size: 44 B |
BIN
modules/board/skins/cozy_simple_gallery/images/pink/bg_title.gif
Normal file
|
After Width: | Height: | Size: 108 B |
|
After Width: | Height: | Size: 112 B |
|
After Width: | Height: | Size: 44 B |
BIN
modules/board/skins/cozy_simple_gallery/images/red/bg_title.gif
Normal file
|
After Width: | Height: | Size: 108 B |
|
After Width: | Height: | Size: 112 B |
|
After Width: | Height: | Size: 52 B |
|
|
@ -0,0 +1,27 @@
|
|||
<!--%import("filter/input_password.xml")-->
|
||||
<!--#include("header.html")-->
|
||||
|
||||
<div class="smallBox w268">
|
||||
|
||||
<div class="header">
|
||||
<h3>{$lang->msg_input_password}</h3>
|
||||
</div>
|
||||
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, input_password)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
<input type="hidden" name="comment_srl" value="{$comment_srl}" />
|
||||
|
||||
<div class="inputPassword">
|
||||
<input type="password" name="password" id="cpw" class="inputTypeText" />
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_input}" accesskey="s" /></span>
|
||||
<a href="{getUrl('act','')}" class="button"><span>{$lang->cmd_cancel}</span></a>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<!--#include("footer.html")-->
|
||||
152
modules/board/skins/cozy_simple_gallery/js/board.js
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
/**
|
||||
* @file modules/board/js/board.js
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief board 모듈의 javascript
|
||||
**/
|
||||
|
||||
/* 관리자가 카트 선택시 세션에 넣음 */
|
||||
function doAddCart(mid, obj) {
|
||||
var srl = obj.value;
|
||||
var check_flag = obj.checked?'add':'remove';
|
||||
|
||||
var params = new Array();
|
||||
params["mid"] = mid;
|
||||
params["srl"] = srl;
|
||||
params["check_flag"] = check_flag;
|
||||
|
||||
exec_xml("board","procBoardAdminAddCart", params, null);
|
||||
}
|
||||
|
||||
/* 글쓰기 작성후 */
|
||||
function completeDocumentInserted(ret_obj) {
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
var mid = ret_obj['mid'];
|
||||
var document_srl = ret_obj['document_srl'];
|
||||
var category_srl = ret_obj['category_srl'];
|
||||
|
||||
alert(message);
|
||||
|
||||
var url = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act','');
|
||||
if(category_srl) url = url.setQuery('category',category_srl);
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
/* 글 삭제 */
|
||||
function completeDeleteDocument(ret_obj) {
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
var mid = ret_obj['mid'];
|
||||
var page = ret_obj['page'];
|
||||
|
||||
var url = "./?mid="+mid;
|
||||
if(page) url += "&page="+page;
|
||||
|
||||
alert(message);
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
/* 검색 실행 */
|
||||
function completeSearch(fo_obj, params) {
|
||||
fo_obj.submit();
|
||||
}
|
||||
|
||||
/* 추천, 추천은 별도의 폼입력이 필요 없어 직접 필터 사용 */
|
||||
function doVote() {
|
||||
var fo_obj = document.getElementById('fo_document_info');
|
||||
procFilter(fo_obj, vote);
|
||||
}
|
||||
|
||||
function completeVote(ret_obj) {
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
alert(message);
|
||||
location.href = location.href;
|
||||
}
|
||||
|
||||
// 현재 페이지 reload
|
||||
function completeReload(ret_obj) {
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
|
||||
location.href = location.href;
|
||||
}
|
||||
|
||||
/* 댓글 글쓰기 작성후 */
|
||||
function completeInsertComment(ret_obj) {
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
var mid = ret_obj['mid'];
|
||||
var document_srl = ret_obj['document_srl'];
|
||||
var comment_srl = ret_obj['comment_srl'];
|
||||
|
||||
var url = "./?mid="+mid+"&document_srl="+document_srl;
|
||||
if(comment_srl) url += "#comment_"+comment_srl;
|
||||
|
||||
alert(message);
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
/* 댓글 삭제 */
|
||||
function completeDeleteComment(ret_obj) {
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
var mid = ret_obj['mid'];
|
||||
var document_srl = ret_obj['document_srl'];
|
||||
var page = ret_obj['page'];
|
||||
|
||||
var url = "./?mid="+mid+'&document_srl='+document_srl;
|
||||
if(page) url += "&page="+page;
|
||||
|
||||
alert(message);
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
/* 트랙백 삭제 */
|
||||
function completeDeleteTrackback(ret_obj) {
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
var mid = ret_obj['mid'];
|
||||
var document_srl = ret_obj['document_srl'];
|
||||
var page = ret_obj['page'];
|
||||
|
||||
var url = "./?mid="+mid+'&document_srl='+document_srl;
|
||||
if(page) url += "&page="+page;
|
||||
|
||||
alert(message);
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
/* 카테고리 이동 */
|
||||
function doChangeCategory() {
|
||||
var sel_obj = xGetElementById("board_category");
|
||||
var sel_idx = sel_obj.selectedIndex;
|
||||
var category_srl = sel_obj.options[sel_idx].value;
|
||||
location.href = current_url.setQuery('category',category_srl);
|
||||
}
|
||||
|
||||
/* 스크랩 */
|
||||
function doScrap(document_srl) {
|
||||
var params = new Array();
|
||||
params["document_srl"] = document_srl;
|
||||
exec_xml("member","procMemberScrapDocument", params, null);
|
||||
}
|
||||
|
||||
// Editor Reply And Trackback Toggle
|
||||
function toggleReply() {
|
||||
xGetElementById('reply').style.display = 'block';
|
||||
xGetElementById('trackback').style.display = 'none';
|
||||
xGetElementById('toggleReply').parentNode.className = 'selected';
|
||||
xGetElementById('toggleTrackback').parentNode.className = '';
|
||||
}
|
||||
|
||||
function toggleTrackback() {
|
||||
xGetElementById('reply').style.display = 'none';
|
||||
xGetElementById('trackback').style.display = 'block';
|
||||
xGetElementById('toggleReply').parentNode.className = '';
|
||||
xGetElementById('toggleTrackback').parentNode.className = 'selected';
|
||||
}
|
||||
196
modules/board/skins/cozy_simple_gallery/list.html
Normal file
|
|
@ -0,0 +1,196 @@
|
|||
<!-- 검색을 위한 xml filter import-->
|
||||
<!--%import("filter/search.xml")-->
|
||||
|
||||
<!-- header.html include -->
|
||||
<!--#include("header.html")-->
|
||||
|
||||
<!-- 선택된 게시물이 있고 권한이 있으면 내용 출력 -->
|
||||
<!--@if($oDocument->isExists() && $grant->view)-->
|
||||
<!--#include("./view_document.html")-->
|
||||
<!--@end-->
|
||||
|
||||
<!--@if($order_type == "desc")-->
|
||||
{@ $order_icon = "buttonDescending.gif" }
|
||||
{@ $order_type = "asc"; }
|
||||
<!--@else-->
|
||||
{@ $order_icon = "buttonAscending.gif" }
|
||||
{@ $order_type = "desc"; }
|
||||
<!--@end-->
|
||||
|
||||
<table cellspacing="0" summary="board list" class="boardList">
|
||||
<thead>
|
||||
<tr>
|
||||
<!--@if($module_info->display_number!='N')-->
|
||||
<th></th>
|
||||
<!--@end-->
|
||||
<!--@if($module_info->use_category == "Y")-->
|
||||
<th>
|
||||
<form action="./" method="get">
|
||||
<select name="select" id="board_category">
|
||||
<option value="">{$lang->category}</option>
|
||||
<!--@foreach($category_list as $val)-->
|
||||
<option value="{$val->category_srl}" <!--@if($category==$val->category_srl)-->selected="selected"<!--@end-->>{$val->title} <!--@if($val->document_count)-->({$val->document_count})<!--@end--></option>
|
||||
<!--@end-->
|
||||
</select>
|
||||
<input type="button" name="go_button" id= "go_button" value="GO" onclick="doChangeCategory(); return false;" class="buttonTypeGo" />
|
||||
</form>
|
||||
</th>
|
||||
<!--@end-->
|
||||
<th scope="col" colspan="2" class="title"><img src="./images/common/txt_title.gif" alt="{$lang->title}" /></th>
|
||||
<th scope="col" class="author"><img src="./images/common/txt_name.gif" alt="{$lang->nick_name}" /></th>
|
||||
<th scope="col" class="reading"><a href="{getUrl('sort_index','readed_count','order_type',$order_type)}"><img src="./images/common/txt_hit.gif" alt="{$lang->readed_count}" /><!--@if($sort_index=='readed_count')--><img src="./images/common/{$order_icon}" alt="" width="5" height="3" class="sort" /><!--@end--></a></th>
|
||||
<th scope="col" class="recommend"><a href="{getUrl('sort_index','voted_count','order_type',$order_type)}"><img src="./images/common/txt_hot.gif" alt="{$lang->voted_count}" /><!--@if($sort_index=='voted_count')--><img src="./images/common/{$order_icon}" alt="" width="5" height="3" class="sort" /><!--@end--></a></th>
|
||||
<th scope="col" class="date"><a href="{getUrl('sort_index','regdate','order_type',$order_type)}"><img src="./images/common/txt_date.gif" alt="{$lang->regdate}" /><!--@if($sort_index=='regdate')--><img src="./images/common/{$order_icon}" alt="" width="5" height="3" class="sort" /><!--@end--></a></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
|
||||
<!--@foreach($document_list as $no => $document)-->
|
||||
|
||||
<!--@if($document->isNotice())-->
|
||||
|
||||
<tr class="notice">
|
||||
<td><img src="./images/common/icon_notice.gif" alt="{$lang->notice}" /></td>
|
||||
<!--@if($module_info->use_category == "Y")-->
|
||||
<td>{$category_list[$document->get('category_srl')]->title}</td>
|
||||
<!--@end-->
|
||||
<td class="title" colspan="2">
|
||||
<div class="title_wrap">
|
||||
<!--@if($grant->is_admin)-->
|
||||
<input type="checkbox" value="{$document->document_srl}" onclick="doAddCart('{$mid}',this)" <!--@if($check_list[$document->document_srl])-->checked="checked"<!--@end--> />
|
||||
<!--@end-->
|
||||
|
||||
<!--@if($grant->view)-->
|
||||
<!--@if($search_target && $search_keyword)-->
|
||||
<a href="{getUrl('','document_srl',$document->document_srl)}" onclick="winopen(this.href,'viewDocument');return false;">{$document->getTitleText($module_info->subject_cut_size)}</a>
|
||||
<!--@else-->
|
||||
<a href="{getUrl('','document_srl',$document->document_srl)}">{$document->getTitleText($module_info->subject_cut_size)}</a>
|
||||
<!--@end-->
|
||||
<!--@else-->
|
||||
{$document->getTitleText($module_info->subject_cut_size)}
|
||||
<!--@end-->
|
||||
|
||||
<!--@if($document->getCommentCount())-->
|
||||
<span class="replyAndTrackback" title="Replies & Trackbacks">[R<strong>{$document->getCommentCount()}</strong>]</span>
|
||||
<!--@end-->
|
||||
|
||||
<!--@if($document->getTrackbackCount())-->
|
||||
<span class="replyAndTrackback" title="Replies & Trackbacks">[T<strong>{$document->getTrackbackCount()}</strong>]</span>
|
||||
<!--@end-->
|
||||
</div>
|
||||
</td>
|
||||
<td class="author"><div class="member_{$document->get('member_srl')}">{$document->getNickName()}</div></td>
|
||||
<td class="reading">{$document->get('readed_count')}</td>
|
||||
<td class="recommend">{$document->get('voted_count')}</td>
|
||||
<td class="date">{$document->getRegdate('Y-m-d')}</td>
|
||||
</tr>
|
||||
|
||||
<!--@end-->
|
||||
<!--@end-->
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<table cellspacing="0" class="boardList thumbnail">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<!--@foreach($document_list as $no => $document)-->
|
||||
<!--@if(!$document->isNotice())-->
|
||||
<div class="cell">
|
||||
<!--@if($document->thumbnailExists(122))-->
|
||||
<a href="{getUrl('','document_srl',$document->document_srl)}"><img src="{$document->getThumbnail(122)}" border="0" alt="" class="thumb"/></a>
|
||||
<!--@else-->
|
||||
<img src="./images/blank.gif" border="0" alt="" class="thumb" width="122" height="122" />
|
||||
<!--@end-->
|
||||
|
||||
<div class="title">
|
||||
<!--@if($grant->is_admin)-->
|
||||
<input type="checkbox" value="{$document->document_srl}" onclick="doAddCart('{$mid}',this)" <!--@if($check_list[$document->document_srl])-->checked="checked"<!--@end--> />
|
||||
<!--@end-->
|
||||
<!--@if($grant->view)-->
|
||||
<!--@if($search_target && $search_keyword)-->
|
||||
<a href="{getUrl('','document_srl',$document->document_srl)}" onclick="window.open(this.href,'viewDocument');return false;">{$document->getTitleText(8,'')}</a>
|
||||
<!--@else-->
|
||||
<a href="{getUrl('','document_srl',$document->document_srl)}">{$document->getTitleText(8,'')}</a>
|
||||
<!--@end-->
|
||||
<!--@else-->
|
||||
{$document->getTitleText(8,'')}
|
||||
<!--@end-->
|
||||
|
||||
<!--@if($document->getCommentCount())-->
|
||||
<span class="replyAndTrackback" title="Replies">(<strong>{$document->getCommentCount()}</strong>)</span>
|
||||
<!--@end-->
|
||||
|
||||
<!--@if($document->getTrackbackCount())-->
|
||||
<span class="replyAndTrackback" title="Trackbacks">[<strong>{$document->getTrackbackCount()}</strong>]</span>
|
||||
<!--@end-->
|
||||
|
||||
<div class="nameAndDate">
|
||||
<div class="author member_{$document->get('member_srl')}">{$document->getNickName()}</div>
|
||||
<div class="date">{$document->getRegdate('Y.m.d')}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="readAndRecommend">
|
||||
{$lang->readed_count} <span class="num">{$document->get('readed_count')}</span>
|
||||
<!--@if($document->get('voted_count'))--><span class="vr">|</span> {$lang->voted_count} <strong class="num">{$document->get('voted_count')}</strong><!--@end-->
|
||||
</div>
|
||||
</div>
|
||||
<!--@end-->
|
||||
<!--@end-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!--@if($grant->view)-->
|
||||
<!-- 페이지 네비게이션 -->
|
||||
<div class="pageNavigation">
|
||||
|
||||
<a href="{getUrl('page','','document_srl','')}" class="goToFirst"><img src="./images/common/icon_gofirst.gif" alt="{$lang->first_page}" width="7" height="5" /></a>
|
||||
<!--@while($page_no = $page_navigation->getNextPage())-->
|
||||
<!--@if($page == $page_no)-->
|
||||
<span class="current">{$page_no}</span>
|
||||
<!--@else-->
|
||||
<a href="{getUrl('page',$page_no,'document_srl','')}">{$page_no}</a>
|
||||
<!--@end-->
|
||||
<!--@end-->
|
||||
<a href="{getUrl('page',$page_navigation->last_page,'document_srl','')}" class="goToLast"><img src="./images/common/icon_golast.gif" alt="{$lang->last_page}" width="7" height="5" /></a>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- 글쓰기, 목록 버튼 -->
|
||||
<div class="buttonBox">
|
||||
<a href="{getUrl('','mid',$mid,'page',$page,'document_srl','')}"><img src="./images/common/btn_list.gif" alt="{$lang->cmd_list}" /></a>
|
||||
<!--@if($grant->write_document)-->
|
||||
<a href="{getUrl('act','dispBoardWrite','document_srl','')}"><img src="./images/common/btn_write.gif" alt="{$lang->cmd_write}" /></a>
|
||||
<!--@end-->
|
||||
<!--@if($grant->is_admin)-->
|
||||
<a href="{getUrl('act','dispBoardAdminManageDocument')}" onclick="popopen(this.href,'manageDocument'); return false;"><img src="./images/common/btn_manage.gif" alt="{$lang->cmd_manage_document}" /></a>
|
||||
<!--@end-->
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
|
||||
<!-- 검색 -->
|
||||
<form action="{getUrl()}" method="get" onsubmit="return procFilter(this, search)" id="fo_search" class="boardSearch">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="category" value="{$category}" />
|
||||
|
||||
<fieldset>
|
||||
<select name="search_target">
|
||||
<!--@foreach($search_option as $key => $val)-->
|
||||
<option value="{$key}" <!--@if($search_target==$key)-->selected="selected"<!--@end-->>{$val}</option>
|
||||
<!--@end-->
|
||||
</select>
|
||||
<input type="text" name="search_keyword" value="{htmlspecialchars($search_keyword)}" class="inputTypeText"/>
|
||||
<ul class="searchButton">
|
||||
<li><input type="image" src="./images/common/btn_search.gif" alt="{$lang->cmd_search}" /></li>
|
||||
<li><a href="{getUrl('','mid',$mid)}"><img src="./images/common/btn_cancel.gif" alt="{$lang->cmd_cancel}" /></a></li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
</form>
|
||||
<!--@end-->
|
||||
|
||||
<!--#include("footer.html")-->
|
||||