통합검색 모듈인 integration_search 추가
git-svn-id: http://xe-core.googlecode.com/svn/trunk@1992 201d5d3c-b55e-5fd7-737f-ddc643e51545
|
|
@ -32,10 +32,10 @@ form { margin:0; padding:0; }
|
|||
.iePngFix { behavior:url(./common/js/iePngFix.htc); }
|
||||
|
||||
/* Input Style Definition */
|
||||
.inputTypeText { border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; padding:3px; height:1.2em; line-height:1em; background:#ffffff; font-size:1em;}
|
||||
.inputTypeText { border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; height:1.4em; padding:.2em 0 0 .3em; background:#ffffff; font-size:1em; _position:relative; _top:2px;}
|
||||
.inputTypeText:hover,
|
||||
.inputTypeText:focus { background:#f4f4f4; }
|
||||
.inputTypeTextArea { border:1px solid !important; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6 !important; padding:3px; background:#ffffff; font-size:1em;}
|
||||
.inputTypeTextArea { border:1px solid !important; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6 !important; background:#ffffff; font-size:1em;}
|
||||
|
||||
.w40 { width:40px; }
|
||||
.w60 { width:60px; }
|
||||
|
|
|
|||
|
|
@ -74,6 +74,11 @@
|
|||
|
||||
<!-- 로그인 위젯 -->
|
||||
<img src="./images/blank.gif" class="zbxe_widget_output" widget="login_info" skin="default" colorset="default" />
|
||||
|
||||
<div class="tCenter">
|
||||
<form action="{getUrl()}" method="get"><input type="hidden" name="mid" value="{$mid}" /><input type="hidden" name="act" value="IS" /><input type="text" class="inputTypeText w100" name="is_keyword" value="{$is_keyword}"/><span class="button"><input type="submit" value="{$lang->cmd_search}" /></span></form>
|
||||
</div>
|
||||
|
||||
<!-- 왼쪽 2차 메뉴 -->
|
||||
<!--@if($menu_1st)-->
|
||||
<div class="submenu">
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@
|
|||
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
|
||||
$skin = $module_info->skin;
|
||||
|
||||
// 스킨의 정보르 구해옴 (extra_vars를 체크하기 위해서)
|
||||
// 스킨의 정보를 구해옴 (extra_vars를 체크하기 위해서)
|
||||
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin);
|
||||
|
||||
// 입력받은 변수들을 체크 (mo, act, module_srl, page등 기본적인 변수들 없앰)
|
||||
|
|
|
|||
|
|
@ -240,12 +240,16 @@
|
|||
|
||||
if(count($attached_file_list)) {
|
||||
$src = preg_replace("!^(\"|')!is","",$attached_file_list[0]);
|
||||
copy("./".$src, $tmp_file);
|
||||
@copy("./".$src, $tmp_file);
|
||||
|
||||
// 첨부된 파일이 없으면 http로 시작하는 경로를 찾음
|
||||
} else {
|
||||
preg_match('!src=("|\'){0,1}([^"|^\'|^\ ]*)("|\'| ){0,1}!is', $content, $matches);
|
||||
$src = $matches[2];
|
||||
preg_match_all("!http:\/\/([^ ^\"^']*?)\.(jpg|png|gif|jpeg)!is", $content, $matches, PREG_SET_ORDER);
|
||||
for($i=0;$i<count($matches);$i++) {
|
||||
$src = $matches[$i][0];
|
||||
if(strpos($src,"/common/tpl")!==false || strpos($src,"/modules")!==false) continue;
|
||||
break;
|
||||
}
|
||||
if($src) FileHandler::getRemoteFile($src, $tmp_file);
|
||||
else return;
|
||||
}
|
||||
|
|
|
|||
11
modules/integration_search/conf/info.xml
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<module version="0.1">
|
||||
<title xml:lang="ko">통합검색</title>
|
||||
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 7. 24">
|
||||
<name xml:lang="ko">제로</name>
|
||||
<description xml:lang="ko">
|
||||
선택한 모듈들을 대상으로 통합검색을 지원합니다.
|
||||
선택된 모듈의 글중 비밀글만 검색을 하지 않고 나머지는 모두 검색을 하기에 공개되지 않은 모듈은 대상에 포함하지 않도록 하셔야 합니다.
|
||||
</description>
|
||||
</author>
|
||||
</module>
|
||||
24
modules/integration_search/conf/module.xml
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<module>
|
||||
<grants>
|
||||
<grant name="list" default="guest">
|
||||
<title xml:lang="ko">목록</title>
|
||||
<title xml:lang="jp">リスト</title>
|
||||
<title xml:lang="en">list</title>
|
||||
</grant>
|
||||
<grant name="manager" default="root">
|
||||
<title xml:lang="ko">관리</title>
|
||||
<title xml:lang="jp">管理</title>
|
||||
<title xml:lang="en">manager</title>
|
||||
</grant>
|
||||
</grants>
|
||||
<actions>
|
||||
<action name="IS" type="view" standalone="true" />
|
||||
<action name="dispIntegration_searchAdminContent" type="view" admin_index="true" />
|
||||
<action name="dispIntegration_searchAdminGrantInfo" type="view" />
|
||||
<action name="dispIntegration_searchAdminSkinInfo" type="view" />
|
||||
|
||||
<action name="procIntegration_searchAdminInsertConfig" type="controller" />
|
||||
<action name="procIntegration_searchAdminInsertSkin" type="controller" />
|
||||
</actions>
|
||||
</module>
|
||||
|
|
@ -0,0 +1,113 @@
|
|||
<?php
|
||||
/**
|
||||
* @class integration_searchAdminController
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief integration_search module의 admin view class
|
||||
*
|
||||
* 통합검색 관리
|
||||
*
|
||||
**/
|
||||
|
||||
class integration_searchAdminController extends integration_search {
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {}
|
||||
|
||||
/**
|
||||
* @brief 설정 저장
|
||||
**/
|
||||
function procIntegration_searchAdminInsertConfig() {
|
||||
// 설정 정보를 받아옴 (module model 객체를 이용)
|
||||
$oModuleModel = &getModel('module');
|
||||
$config = $oModuleModel->getModuleConfig('integration_search');
|
||||
|
||||
$args->skin = Context::get('skin');
|
||||
$args->target_mid = explode('|@|',Context::get('target_mid'));
|
||||
$args->skin_vars = $config->skin_vars;
|
||||
|
||||
$oModuleController = &getController('module');
|
||||
return $oModuleController->insertModuleConfig('integration_search',$args);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 스킨 정보 저장
|
||||
**/
|
||||
function procIntegration_searchAdminInsertSkin() {
|
||||
// 설정 정보를 받아옴 (module model 객체를 이용)
|
||||
$oModuleModel = &getModel('module');
|
||||
$config = $oModuleModel->getModuleConfig('integration_search');
|
||||
|
||||
$args->skin = $config->skin;
|
||||
$args->target_mid = $config->target_mid;
|
||||
|
||||
// 스킨의 정보를 구해옴 (extra_vars를 체크하기 위해서)
|
||||
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $config->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하여 저장
|
||||
$args->skin_vars = serialize($obj);
|
||||
|
||||
$oModuleController = &getController('module');
|
||||
return $oModuleController->insertModuleConfig('integration_search',$args);
|
||||
}
|
||||
}
|
||||
?>
|
||||
71
modules/integration_search/integration_search.admin.view.php
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
<?php
|
||||
/**
|
||||
* @class integration_searchAdminView
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief integration_search module의 admin view class
|
||||
*
|
||||
* 통합검색 관리
|
||||
*
|
||||
**/
|
||||
|
||||
class integration_searchAdminView extends integration_search {
|
||||
|
||||
var $config = null;
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
// 설정 정보를 받아옴 (module model 객체를 이용)
|
||||
$oModuleModel = &getModel('module');
|
||||
$this->config = $oModuleModel->getModuleConfig('integration_search');
|
||||
if(!$this->config->target_mid) $this->config->target_mid = array();
|
||||
Context::set('config',$this->config);
|
||||
|
||||
$this->setTemplatePath($this->module_path."/tpl/");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 모듈 선정 및 스킨 설정
|
||||
**/
|
||||
function dispIntegration_searchAdminContent() {
|
||||
// 스킨 목록을 구해옴
|
||||
$oModuleModel = &getModel('module');
|
||||
$skin_list = $oModuleModel->getSkins($this->module_path);
|
||||
Context::set('skin_list',$skin_list);
|
||||
|
||||
// 생성된 mid목록을 구함
|
||||
$mid_list = $oModuleModel->getMidList();
|
||||
Context::set('mid_list',$mid_list);
|
||||
|
||||
// 샘플코드
|
||||
Context::set('sample_code', htmlspecialchars('<form action="{getUrl()}" method="get"><input type="hidden" name="mid" value="{$mid}" /><input type="hidden" name="act" value="IS" /><input type="text" name="is_keyword" class="inputTypeText" value="{$is_keyword}" /><span class="button"><input type="submit" value="{$lang->cmd_search}" /></span></a>') );
|
||||
|
||||
$this->setTemplateFile("index");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 스킨 설정
|
||||
**/
|
||||
function dispIntegration_searchAdminSkinInfo() {
|
||||
$oModuleModel = &getModel('module');
|
||||
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $this->config->skin);
|
||||
$skin_vars = unserialize($this->config->skin_vars);
|
||||
|
||||
// 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 = $skin_vars->{$name};
|
||||
if($type=="checkbox"&&!$value) $value = array();
|
||||
$skin_info->extra_vars[$key]->value= $value;
|
||||
}
|
||||
}
|
||||
Context::set('skin_info', $skin_info);
|
||||
Context::set('skin_vars', $skin_vars);
|
||||
|
||||
$this->setTemplateFile("skin_info");
|
||||
}
|
||||
}
|
||||
?>
|
||||
47
modules/integration_search/integration_search.class.php
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
/**
|
||||
* @class integration_search
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief integration_search module의 view class
|
||||
**/
|
||||
|
||||
class integration_search extends ModuleObject {
|
||||
|
||||
/**
|
||||
* @brief 설치시 추가 작업이 필요할시 구현
|
||||
**/
|
||||
function moduleInstall() {
|
||||
// action forward에 등록
|
||||
$oModuleController = &getController('module');
|
||||
$oModuleController->insertActionForward('integration_search', 'view', 'IS');
|
||||
$oModuleController->insertActionForward('integration_search', 'view', 'dispIntegration_searchAdminContent');
|
||||
$oModuleController->insertActionForward('integration_search', 'view', 'dispIntegration_searchAdminSkinInfo');
|
||||
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
**/
|
||||
function checkUpdate() {
|
||||
// IS act의 여부 체크 (2007. 7. 24 추가)
|
||||
$oModuleModel = &getModel('module');
|
||||
$act = $oModuleModel->getActionForward('dispIntegration_searchAdminSkinInfo');
|
||||
if(!$act) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 업데이트 실행
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
$oModuleController = &getController('module');
|
||||
$oModuleController->insertActionForward('integration_search', 'view', 'IS');
|
||||
$oModuleController->insertActionForward('integration_search', 'view', 'dispIntegration_searchAdminContent');
|
||||
$oModuleController->insertActionForward('integration_search', 'view', 'dispIntegration_searchAdminSkinInfo');
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
80
modules/integration_search/integration_search.view.php
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
<?php
|
||||
/**
|
||||
* @class integration_searchView
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief integration_search module의 view class
|
||||
*
|
||||
* 통합검색 출력
|
||||
*
|
||||
**/
|
||||
|
||||
class integration_searchView extends integration_search {
|
||||
|
||||
var $target_mid = array();
|
||||
var $skin = 'default';
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
// 설정 정보를 받아옴 (module model 객체를 이용)
|
||||
$oModuleModel = &getModel('module');
|
||||
$config = $oModuleModel->getModuleConfig('integration_search');
|
||||
|
||||
$this->target_mid = $config->target_mid;
|
||||
if(!$this->target_mid) $this->target_mid = array();
|
||||
|
||||
$this->skin = $config->skin;
|
||||
$this->module_info = unserialize($config->skin_vars);
|
||||
Context::set('module_info', $this->module_info);
|
||||
|
||||
$this->setTemplatePath($this->module_path."/skins/".$this->skin."/");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 통합 검색 출력
|
||||
**/
|
||||
function IS() {
|
||||
$oModuleModel = &getModel('module');
|
||||
$module_list = $oModuleModel->getMidList($args);
|
||||
|
||||
// 대상 모듈을 정리함
|
||||
$module_srl_list = array();
|
||||
foreach($module_list as $mid => $val) {
|
||||
if(in_array($mid, $this->target_mid)) {
|
||||
$module_srl_list[] = $val->module_srl;
|
||||
$mid_list[$val->module_srl] = $val;
|
||||
}
|
||||
}
|
||||
|
||||
// 변수 설정
|
||||
$page = (int)Context::get('page');
|
||||
if(!$page) $page = 1;
|
||||
|
||||
$list_count = (int)Context::get('list_count');
|
||||
if(!$list_count|| $list_count>20) $list_count = 20;
|
||||
|
||||
// 출력할 컨텐츠 추출을 위한 인자 정리
|
||||
$args->module_srl = implode(',',$module_srl_list);
|
||||
$args->page = $page;
|
||||
$args->list_count = $list_count;
|
||||
$args->page_count = 10;
|
||||
$args->search_target = 'title_content';
|
||||
$args->search_keyword = Context::get('is_keyword');
|
||||
$args->sort_index = 'list_order';
|
||||
$args->order_type = 'asc';
|
||||
|
||||
// 대상 문서들을 가져옴
|
||||
$oDocumentModel = &getModel('document');
|
||||
$output = $oDocumentModel->getDocumentList($args);
|
||||
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);
|
||||
|
||||
// 템플릿 파일 지정
|
||||
$this->setTemplateFile('index');
|
||||
}
|
||||
}
|
||||
?>
|
||||
13
modules/integration_search/lang/ko.lang.php
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/integration_search/lang/ko.lang.php
|
||||
* @author zero <zero@nzeo.com>
|
||||
* @brief 한국어 언어팩 (기본적인 내용만 수록)
|
||||
**/
|
||||
|
||||
$lang->integration_search = "통합검색";
|
||||
|
||||
$lang->sample_code = "샘플코드";
|
||||
$lang->about_target_module = "선택된 모듈만 검색 대상으로 정합니다. 권한설정에 대한 주의를 바랍니다";
|
||||
$lang->about_sample_code = "위 코드를 레이아웃등에 추가하시면 통합검색이 가능합니다";
|
||||
?>
|
||||
36
modules/integration_search/skins/default/css/white.css
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
@charset "utf-8";
|
||||
|
||||
/* boardInformation */
|
||||
.boardInformation { clear:both; margin:1em 0 .5em 0; overflow:hidden; color:#666666;}
|
||||
.search strong { color:#ff6600;}
|
||||
.articleNum strong { font:bold 11px Tahoma; color:#ff6600;}
|
||||
|
||||
.no_result { text-align:center; padding:3em; border-top:1px solid #EEEEEE; border-bottom:1px solid #EEEEEE;}
|
||||
|
||||
/* search_result */
|
||||
.search_result { margin:1em 0 3em 0; list-style:none; clear:both;}
|
||||
.search_result .thumbnail { float:left; padding:10px; }
|
||||
.search_result .thumbnail img { width:100px; height:100px; border:1px solid #555555; }
|
||||
.search_result .title { margin-bottom:.5em; border-top:1px solid #EEEEEE; padding-top:.5em; }
|
||||
.search_result .title a { color:#4831F6; font-size:1.2em; font-weight:bold; text-decoration:none; }
|
||||
.search_result .title a:visited { color:#A59AFD;}
|
||||
.search_result .replyAndTrackback { font:.8em Tahoma; color:#ff6600; position:relative; top:-.2em;}
|
||||
.search_result .replyAndTrackback img.trackback { margin-bottom:-.1em;}
|
||||
.search_result .summary { margin-bottom:.5em; padding-left:2em; }
|
||||
.search_result .summary a { color:#888888; font-size:1em; text-decoration:none; }
|
||||
.search_result .summary a:visited { color:#BBBBBB;}
|
||||
.search_result .summary a:hover { color:#BBBBBB; text-decoration:none;}
|
||||
.search_result .author { padding-left:2em; float:left; color:#000000; font-size:.9em;}
|
||||
.search_result .date { padding-left:2em; float:left; color:#888888; font-size:.9em;}
|
||||
|
||||
/* pageNavigation */
|
||||
.pageNavigation { display:block; padding:1.5em 0 2em 0; text-align:center; font:bold .8em Tahoma; border-top:1px solid #EEEEEE; padding-top:.5em; }
|
||||
.pageNavigation a { position:relative; margin-left:-4px; font:bold 1em Tahoma; color:#666666; display:inline-block; padding:1px 7px 2px 6px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; }
|
||||
.pageNavigation a:hover { background:#F7F7F7; text-decoration:none; }
|
||||
.pageNavigation a:visited { color:#999999;}
|
||||
.pageNavigation a.goToFirst,
|
||||
.pageNavigation a.goToLast { border:none; border-right:1px solid #ffffff; border-left:1px solid #ffffff; z-index:99; vertical-align:top; padding:0px 7px 4px 6px;}
|
||||
.pageNavigation a.goToFirst img,
|
||||
.pageNavigation a.goToLast img { display:inline-block; padding:2px 0; position:relative; top:2px; _top:1px;}
|
||||
.pageNavigation .current { position:relative; margin-left:-4px; font:bold 1em Tahoma; color:#ff6600; display:inline-block; padding:1px 7px 1px 6px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; }
|
||||
|
||||
|
After Width: | Height: | Size: 51 B |
|
After Width: | Height: | Size: 51 B |
|
After Width: | Height: | Size: 219 B |
|
After Width: | Height: | Size: 106 B |
|
After Width: | Height: | Size: 101 B |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 44 B |
63
modules/integration_search/skins/default/index.html
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
<!-- 컬러셋 체크 -->
|
||||
<!--@if($module_info->colorset != "white")-->
|
||||
{@$module_info->colorset = "white"}
|
||||
<!--@end-->
|
||||
|
||||
<!-- CSS 파일 로드 (컬러셋에 따라서) -->
|
||||
<!--@if($module_info->colorset == "white")-->
|
||||
<!--%import("css/white.css")-->
|
||||
<!--@end-->
|
||||
|
||||
<div class="boardInformation">
|
||||
<div class="fl">
|
||||
<span class="search">{$lang->search_keyword} : <strong>{$is_keyword}</strong></span>
|
||||
</div>
|
||||
<div class="fr">
|
||||
<span class="articleNum">{$lang->document_count} : <strong>{number_format($total_count)}</strong></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--@if(!$document_list)-->
|
||||
<!-- 게시물이 없으면 등록된 글이 없음을 표시 -->
|
||||
<div class="no_result">
|
||||
{$lang->no_documents}
|
||||
</div>
|
||||
<!--@else-->
|
||||
<!--@foreach($document_list as $no => $document)-->
|
||||
<ul class="search_result">
|
||||
<li class="title">
|
||||
<a href="{getUrl('','document_srl',$document->document_srl)}" onclick="window.open(this.href);return false;">{$document->getTitleText()}</a>
|
||||
<!--@if($document->getCommentCount())-->
|
||||
<span class="replyAndTrackback" title="Replies"><img src="./images/{$module_info->colorset}/iconReply.gif" alt="" width="12" height="12" class="icon" /> <strong>{$document->getCommentCount()}</strong></span>
|
||||
<!--@end-->
|
||||
<!--@if($document->getTrackbackCount())-->
|
||||
<span class="replyAndTrackback" title="Trackbacks"><img src="./images/{$module_info->colorset}/iconTrackback.gif" alt="" width="12" height="13" class="trackback icon" /> <strong>{$document->getTrackbackCount()}</strong></span>
|
||||
<!--@end-->
|
||||
</li>
|
||||
|
||||
<!--@if($document->thumbnailExists(100))-->
|
||||
<li class="thumbnail"><a href="{getUrl('','document_srl',$document->document_srl)}" onclick="window.open(this.href);return false;"><img src="{$document->getThumbnail(100)}" border="0" alt="" /></a></li>
|
||||
<!--@end-->
|
||||
|
||||
<li class="summary"><a href="{getUrl('','document_srl',$document->document_srl)}" onclick="window.open(this.href);return false;">{$document->getSummary(140)}</a></li>
|
||||
<li class="author"><div class="member_{$document->get('member_srl')}">{$document->getNickName()}</div></li>
|
||||
<li class="date">{$document->getRegdate('Y-m-d H:i')}</li>
|
||||
</ul>
|
||||
<div class="clear"></div>
|
||||
<!--@end-->
|
||||
|
||||
|
||||
<!-- 페이지 네비게이션 -->
|
||||
<div class="pageNavigation">
|
||||
|
||||
<a href="{getUrl('page','','document_srl','')}" class="goToFirst"><img src="./images/{$module_info->colorset}/bottomGotoFirst.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/{$module_info->colorset}/bottomGotoLast.gif" alt="{$lang->last_page}" width="7" height="5" /></a>
|
||||
</div>
|
||||
<!--@end-->
|
||||
19
modules/integration_search/skins/default/skin.xml
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<skin>
|
||||
<title xml:lang="ko">통합 검색 기본 스킨</title>
|
||||
<maker email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 7. 24">
|
||||
<name xml:lang="ko">제로</name>
|
||||
<description xml:lang="ko">통합검색 모듈의 기본 스킨</description>
|
||||
</maker>
|
||||
<colorset>
|
||||
<color name="normal" src="screenshot/normal.gif">
|
||||
<title xml:lang="ko">기본</title>
|
||||
</color>
|
||||
</colorset>
|
||||
<extra_vars>
|
||||
<var name="memo" type="textarea">
|
||||
<title xml:lang="ko">설명</title>
|
||||
<description lang="ko">검색결과 상단에 결과가 출력됩니다.</description>
|
||||
</var>
|
||||
</extra_vars>
|
||||
</skin>
|
||||
5
modules/integration_search/tpl/filter/insert_config.xml
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
<filter name="insert_config" module="integration_search" act="procIntegration_searchAdminInsertConfig" confirm_msg_code="confirm_submit">
|
||||
<form />
|
||||
<parameter />
|
||||
<response />
|
||||
</filter>
|
||||
14
modules/integration_search/tpl/header.html
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<!--%import("js/integration_search_admin.js")-->
|
||||
|
||||
<h3>{$lang->integration_search} <span class="gray">{$lang->cmd_management}</span></h3>
|
||||
|
||||
<div class="header4">
|
||||
<ul class="localNavigation">
|
||||
<li <!--@if($act=='dispIntegration_searchAdminContent')-->class="on"<!--@end-->><a href="{getUrl('act','dispIntegration_searchAdminContent')}">{$lang->cmd_setup}</a></li>
|
||||
<li <!--@if($act=='dispIntegration_searchAdminSkinInfo')-->class="on"<!--@end-->><a href="{getUrl('act','dispIntegration_searchAdminSkinInfo')}">{$lang->cmd_manage_skin}</a></li>
|
||||
<!--@if($module!='admin')-->
|
||||
<li><a href="#" onclick="location.href=current_url.setQuery('act','IS'); return false;">{$lang->cmd_back}</a></li>
|
||||
<!--@end-->
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
40
modules/integration_search/tpl/index.html
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<!--#include("header.html")-->
|
||||
<!--%import("filter/insert_config.xml")-->
|
||||
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, insert_config)">
|
||||
<table cellspacing="0" class="tableType2">
|
||||
<col width="150" />
|
||||
<col />
|
||||
<tr>
|
||||
<th scope="row">{$lang->sample_code}</th>
|
||||
<td>
|
||||
<textarea class="inputTypeTextArea w400" readonly="readonly">{$sample_code}</textarea>
|
||||
<p>{$lang->about_sample_code}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->skin}</th>
|
||||
<td>
|
||||
<select name="skin">
|
||||
<!--@foreach($skin_list as $key=>$val)-->
|
||||
<option value="{$key}" <!--@if($config->skin==$key)-->selected="selected"<!--@end-->>{$val->title}</option>
|
||||
<!--@end-->
|
||||
</select>
|
||||
<p>{$lang->about_skin}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->module}</th>
|
||||
<td>
|
||||
<p>{$lang->about_target_module}</p>
|
||||
<!--@foreach($mid_list as $key => $val)-->
|
||||
<p><input type="checkbox" name="target_mid" value="{$key}" id="target_mid_{$key}" <!--@if(in_array($key,$config->target_mid))-->checked="checked"<!--@end--> /> <label for="target_mid_{$key}">{$val->browser_title} ({$val->mid})</label></p>
|
||||
<!--@end-->
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="tRight gap1">
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
|
||||
</div>
|
||||
</form>
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
/**
|
||||
* @file modules/board/js/board_admin.js
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief integration_search 모듈의 관리자용 javascript
|
||||
**/
|
||||
|
||||
/* 권한 관련 */
|
||||
function doSelectAll(obj, key) {
|
||||
var fo_obj = obj.parentNode;
|
||||
while(fo_obj.nodeName != 'FORM') {
|
||||
fo_obj = fo_obj.parentNode;
|
||||
}
|
||||
|
||||
for(var i=0;i<fo_obj.length;i++) {
|
||||
var tobj = fo_obj[i];
|
||||
if(tobj.name == key) tobj.checked=true;
|
||||
}
|
||||
}
|
||||
|
||||
function doUnSelectAll(obj, key) {
|
||||
var fo_obj = obj.parentNode;
|
||||
while(fo_obj.nodeName != 'FORM') {
|
||||
fo_obj = fo_obj.parentNode;
|
||||
}
|
||||
|
||||
for(var i=0;i<fo_obj.length;i++) {
|
||||
var tobj = fo_obj[i];
|
||||
if(tobj.name == key) tobj.checked = false;
|
||||
}
|
||||
}
|
||||
|
||||
116
modules/integration_search/tpl/skin_info.html
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
<!--#include("./header.html")-->
|
||||
|
||||
<form action="./" method="post" enctype="multipart/form-data" target="hidden_iframe">
|
||||
<input type="hidden" name="module" value="integration_search" />
|
||||
<input type="hidden" name="act" value="procIntegration_searchAdminInsertSkin" />
|
||||
|
||||
<table cellspacing="0" class="tableType3">
|
||||
<col width="150" />
|
||||
<col />
|
||||
<tr>
|
||||
<th scope="row" colspan="2">{$lang->skin_default_info}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->skin}</th>
|
||||
<td class="left" >{$skin_info->title}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->skin_maker}</th>
|
||||
<td class="left" >{$skin_info->maker->name} <!--@if($skin_info->maker->email_address)-->(<a href="mailto:{$skin_info->maker->email_address}">{$skin_info->maker->email_address}</a>)<!--@end--></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->skin_maker_homepage}</th>
|
||||
<td class="left" ><a href="{$skin_info->maker->homepage}" target="_blank">{$skin_info->maker->homepage}</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->date}</th>
|
||||
<td class="left" >{$skin_info->maker->date}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->description}</th>
|
||||
<td class="left" >{nl2br($skin_info->maker->description)}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table cellspacing="0" class="tableType3">
|
||||
<col width="150" />
|
||||
<col />
|
||||
<tr>
|
||||
<th scope="row" colspan="2">{$lang->extra_vars}</th>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<th scope="row">{$lang->colorset}</th>
|
||||
<td class="left" >
|
||||
<!--@foreach($skin_info->colorset as $key => $val)-->
|
||||
<div>
|
||||
<!--@if($val->screenshot)-->
|
||||
<img src="{$val->screenshot}" align="left" alt="{$val->title}" />
|
||||
<!--@end-->
|
||||
|
||||
<input type="radio" name="colorset" value="{$val->name}" id="colorset_{$key}" <!--@if($skin_vars->colorset==$val->name)-->checked="checked"<!--@end-->/>
|
||||
<label for="colorset_{$key}">{$val->title}</label>
|
||||
</div>
|
||||
<!--@end-->
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!--@foreach($skin_info->extra_vars as $key => $val)-->
|
||||
<tr>
|
||||
<th scope="row">{$val->title}</th>
|
||||
<td class="left">
|
||||
<!--@if($val->type=="text")-->
|
||||
<input type="text" name="{$val->name}" value="{htmlspecialchars($val->value)}" class="inputTypeText w100" />
|
||||
|
||||
<!--@elseif($val->type=="textarea")-->
|
||||
<textarea name="{$val->name}" class="inputTypeTextArea w100">{htmlspecialchars($val->value)}</textarea>
|
||||
|
||||
<!--@elseif($val->type=="select")-->
|
||||
<select name="{$val->name}">
|
||||
<!--@foreach($val->default as $k=>$v)-->
|
||||
<option value="{$v}" <!--@if($v==$val->value)-->selected="selected"<!--@end-->>{$v}</option>
|
||||
<!--@end-->
|
||||
</select>
|
||||
|
||||
<!--@elseif($val->type=="checkbox")-->
|
||||
<!--@foreach($val->default as $k=>$v)-->
|
||||
<span>
|
||||
<input type="checkbox" name="{$val->name}[]" value="{$v}" id="ch_{$key}_{$k}" <!--@if(in_array($v, $val->value))-->checked="checked"<!--@end--> class="checkbox" />
|
||||
<label for="ch_{$key}_{$k}">{$v}</label>
|
||||
</span>
|
||||
<!--@end-->
|
||||
|
||||
<!--@elseif($val->type=="radio")-->
|
||||
<!--@foreach($val->default as $k=>$v)-->
|
||||
<span>
|
||||
<input type="radio" name="{$val->name}" value="{$v}" id="ch_{$key}_{$k}" <!--@if($v==$val->value)-->checked="checked"<!--@end-->/>
|
||||
<label for="ch_{$key}_{$k}">{$v}</label>
|
||||
</span>
|
||||
<!--@end-->
|
||||
|
||||
<!--@elseif($val->type=="image")-->
|
||||
|
||||
<!--@if($val->value)-->
|
||||
<div>
|
||||
<img src="{$val->value}" /><br />
|
||||
<input type="checkbox" name="del_{$val->name}" value="Y" id="del_{$val->name}" class="checkbox" />
|
||||
<label for="del_{$val->name}">{$lang->cmd_delete}</label>
|
||||
</div>
|
||||
<!--@end-->
|
||||
|
||||
<input type="file" name="{$val->name}" value="" />
|
||||
<!--@end-->
|
||||
|
||||
<!--@if($val->description)-->
|
||||
<p>{nl2br($val->description)}</p>
|
||||
<!--@end-->
|
||||
</td>
|
||||
</tr>
|
||||
<!--@end-->
|
||||
</table>
|
||||
|
||||
<div class="tRight gap1">
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<iframe name="hidden_iframe" frameborder="0" style="display:none"></iframe>
|
||||