기본 설정
1. document 모듈에 코드 추가하기
=> 위치 : modules/document/document.controller.php
function init()
{
}
위 코드 아래에 추가하세요.
/**
* procDocumentCategoryUp
*/
function procDocumentCategoryUp()
{
$document_srl = Context::get('document_srl');
$category_srl = Context::get('category_srl');
if(!$document_srl || !$category_srl) return new Object(-1,'msg_invalid_request');
$oDocumentModel = getModel('document');
$oDocument = $oDocumentModel->getDocument($document_srl, false, false);
$module_srl = $oDocument->get('module_srl');
if(!$module_srl) return new Object(-1, 'msg_invalid_request');
$output = $this->updateSetCategoryUp($module_srl,$document_srl, $category_srl);
return $output;
}
/**
* updateSetCategoryUp
* @param int $module_srl
* @param int $document_srl
* @param int $category_srl
* @return object
*/
function updateSetCategoryUp($module_srl, $document_srl, $category_srl)
{
$args = new stdClass;
$args->module_srl = $module_srl;
$args->document_srl = $document_srl;
$args->category_srl = $category_srl;
$query = "document.updateSetCategoryUp";
$output = executeQuery($query, $args);
if(!$output->toBool()) return $output;
return $output;
}
2. [ updateSetCategoryUp.xml ] 쿼리 코드를 아래 위치에 생성하기
=> 위치 : modules/document/queries/updateSetCategoryUp.xml
<query id="updateSetCategoryUp" action="update" >
<tables>
<table name="documents" />
</tables>
<columns>
<column name="category_srl" var="category_srl" filter="number" default="0" />
</columns>
<conditions>
<condition operation="equal" column="module_srl" var="module_srl" filter="number" notnull="notnull" />
<condition operation="equal" column="document_srl" var="document_srl" filter="number" notnull="notnull" pipe="and" />
</conditions>
< /query>
3. 모듈 액션에 코드 추가하기
=> 위치 : modules/document/conf/module.xml
아래의 코드를
<action name="procDocumentCategoryUp" type="controller" />
<actions> 위치에 추가하세요.
기본설정 끝
-- 본문 안 분류 설정 적용
자신이 사용하시는 보드 스킨
skins/스킨이름/read.html (스킨에 따라 이름을 다를수 있음)에서
원하시는곳에 아래의 코드를 추가 (선정이 어려우면 맨아래에 추가)
관리자에게만 보이게 & 원하는 게시판에만 보이게
예) cond="$logged_info->is_admin=='Y'" && $mid=='board1'"
추가 설정
스크립터에는 실행후 새로고침이 되도록 되어 있습니다.
새로고침이 필요없으시다면 location.reload(); 를 빼주시면 됩니다. 필요한 코드를 넣으셔도 되구요.
예를 들자면
이전페이지로 이동 한다던가 history.go(-1); // 일반적으로 들어왔다면 리스트페이지로 돌아가겠죠.
특정페이지로 간다거나 location.replace("이동할 주소");
분류는 기본적인 셀렉트박스를 사용합니다.
사용자에 따라, 편리상에 따라 라디오 박스로 변경가능하겠죠.
또한 값 변경시 스크립터가 실행되도록 코드를 수정하셔두 되겠죠.
아래에는 기본적인 기능으로 분류값을 선택하고 클릭하여야 실행 되도록만 되어 있습니다.
예시 1
<block cond="$logged_info->is_admin=='Y'" >
<select cond="$mi->use_category=='Y' && $category_list" name="category_srl" id="category_srl" class="category">
<option value="">{$lang->category}</option>
<option loop="$category_list => $val" disabled="disabled"|cond="!$val->grant" value="{$val->category_srl}" selected="selected"|cond="$val->grant&&$val->selected||$val->category_srl==$oDocument->get('category_srl')">
{str_repeat(" ",$val->depth)} {$val->title} ({$val->document_count})
</option>
< /select>
<a cond="$mi->use_category=='Y' && $category_list" href="javascript:void(0)" onclick="CategoryUp({$document_srl});return false;">CategoryUp</a>
<s#cript type="text/javascript">
function CategoryUp(document_srl) {
var params = {
document_srl : document_srl,
category_srl : document.getElementById("category_srl").options[document.getElementById("category_srl").selectedIndex].value
};
exec_json('document.procDocumentCategoryUp', params, function() { location.reload(); }); // 실행
}
< /s#cript>
< /block >
예시 2 (스케치북 보드 전용)
<block cond="$grant->manager">
<table class="et_vars exForm bd_tb" cond="$mi->use_category=='Y' && $category_list" >
<tr>
<th>{$lang->Category_modification}</a>
</th>
<td>
<select name="category_srl" id="category_srl" class="category">
<option value="">{$lang->category}</option>
<option loop="$category_list => $val" disabled="disabled"|cond="!$val->grant" value="{$val->category_srl}" selected="selected"|cond="$val->grant&&$val->selected||$val->category_srl==$oDocument->get('category_srl')">
{str_repeat(" ",$val->depth)} {$val->title} ({$val->document_count})
</option>
</select>
</td>
<th ><button type="submit" onclick="CategoryUp({$document_srl});return false;" class="bd_btn">{$lang->Apply}</button>
</th>
</tr>
</table>
<script type="text/javascript">
function CategoryUp(document_srl) {
var params = {
document_srl : document_srl,
category_srl : document.getElementById("category_srl").options[document.getElementById("category_srl").selectedIndex].value
};
exec_json('document.procDocumentCategoryUp', params, function() { location.reload(); }); // 실행
}
</script>
</block >
-- 리스트 분류 설정 적용
자신이 사용하는 보드스킨
skins/스킨이름/list_nomal.html
리스트에 카테고리 부분 TD나 카테고리 텍스트를 누르시면 그 위치에 레이어가 올라옵니다.
선택형을 라디오버튼 타입/ 셀렉트박스 타입 2가지
내용도 같이 보기 옵션 / 확장변수 보기 옵션 추가
현재상태는 관리그룹으로 블럭처리 설정
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | < block cond="$grant->manager" > < div id = "layer_cate_update" style = "z-index: 9999999;display:none;position:absolute;background-color:#eee;padding:10px;" > < div class = "contents_view" ></ div > < select name = "category_srl_S" id = "category_srl_S" class = "category_srl_S" style = "width:130px;" > < option value = "" >{$lang->category}</ option > < option loop="$category_list => $val" disabled="disabled"|cond="!$val->grant" value="{$val->category_srl}"> {str_repeat(" ",$val->depth)} {$val->title} </ option > </ select > < ul class = 'category_srl_R' > < li loop="$category_list => $val" >< input type = "radio" name = "category_srl_R" id="category_srl_R-{$val->category_srl}" value="{$val->category_srl}" class="radio">< label for="category_srl_R-{$val->category_srl}"> {$val->title}</ label ></ li > </ ul > < ul >< li >< button type = "button" class = "pcu_modify bd_btn" >수정</ button > < button type = "button" class = "pcu_close bd_btn" >닫기</ button ></ li ></ ul > </ div > < script > var Select_Mode; //Select_Mode ="R"; //R입력시 라디오 버튼 선택모드 (지겨울까봐) // 사용시 주석해제 var contents_view; //contents_view ="Y"; //내용도 바로 보기 사용시 설정 // 사용시주석해제 var contents_view_size = 600; var contents_view_extra = 5; //확장변수도 볼경우 갯수설정 jQuery(document).ready(function($){ var lay_pop = $('#layer_cate_update'); if (Select_Mode=='R') { $('.category_srl_S').hide(); }else { $('.category_srl_R').hide(); } $('.cate').click(function() { lay_pop.css('top', ($(this).position().top + 35) + 'px'); lay_pop.css('left', ($(this).position().left) + 'px'); $('.pcu_modify').val($(this).parent().find('input:checkbox:first').val()); if (contents_view=='Y') { $('.contents_view').css('width',contents_view_size+'px'); $('.contents_view').css('background-color','#fff'); function c_view(BoardContent) { var temp_contents = "< h1 >내용</ h1 >" + BoardContent.oDocument.content; if (contents_view_extra > 0) { temp_contents +="< div style = 'width:100%;border: 1px solid #DDD;' ></ div >< h1 >확장변수</ h1 >"; for (var i = 0; i < contents_view_extra ; ++i) { temp_contents += BoardContent.oDocument.extra_vars[i].value +" "; } } $(".contents_view").html(temp_contents); } $.exec_json("board.dispBoardContentView",{mid:"{$mid}",document_srl:$(this).parent().find('input:checkbox:first').val()}, c_view); } lay_pop.fadeIn(); lay_pop.focus(); }); $('.pcu_close').click(function() { if (Select_Mode=='R') $('input:radio[ name = category_srl_R ]').attr('checked',false); $('.pcu_modify').val(''); lay_pop.hide(); }); $('.pcu_modify').click(function() { var document_srl = $(this).val(); var category_srl; if (Select_Mode=='R') { if (!$('input:radio[ name = category_srl_R ]:checked').val()) { alert('카테고리가 선택되지 않았습니다.'); return false; } category_srl = $('input:radio[ name = category_srl_R ]:checked').val(); }else { if (!$('#category_srl_S').val()) { alert('카테고리가 선택되지 않았습니다.'); return false; } category_srl = $('#category_srl_S').val() } CategoryUpList(document_srl, category_srl); }); }); function CategoryUpList(document_srl, category_srl) { var params = { document_srl : document_srl, category_srl : category_srl }; exec_json('document.procDocumentCategoryUp', params, function() { location.reload(); }); // 실행 } </script> </ block > |