확장변수 정렬

2022년 01월 07일
                {@
                // $db_info = Context::getDBInfo();
                // $oDB = &DB::getInstance();
                // $query = $oDB->_query('select * from '.$db_info->master_db[db_table_prefix].'document_extra_keys where module_srl = '.$module_info->module_srl.' AND message_type = "R" ORDER BY regdate DESC limit 0, 5');
                // $result = $oDB->_fetch($query);
                // $output = executeQueryArray('addons.message_alarm.getMessageCount', $aobj);
                }
                <!--
                xe 사용자정의 정렬
                $document->getExtraEidValue('deadline')
                $document->getExtraEidValue('budget')
                -->
                {@
                //function _setSortIndex($obj, $load_extra_vars) {
                ////확장변수 eid로 정렬
                //if($obj->sort_index == 'deadline') { //확장변수의 eid
                //$returnObj = new stdClass();
                //$returnObj->sort_index = $obj->sort_index;
                //$returnObj->isExtraVars = true;
                //return $returnObj;
//
                //$args = new stdClass();
                //$args->module_srl = $module_info->module_srl;
                //$args->sort_index = 'deadline';
                //$output = $oDocumentModel->getDocumentList($args);
                }

아마 이렇게 따로 하면 되지 않을까 하고 삽질을 하고 있었다.

<a href="{getUrl('sort_index','regdate','order_type','desc')}" class="active"|cond="$sort_index=='regdate'">최신등록순</a>
<a href="{getUrl('sort_index','deadline','order_type','asc')}" class="active"|cond="$sort_index=='deadline'">마감임박순</a>
<a href="{getUrl('sort_index','budget','order_type','desc')}" class="active"|cond="$sort_index=='budget'">고가순 </a>

그런데 이미 이렇게 가능은 하더라.

문제점이.

1. 날짜 임박순

2. 숫자인 경우

위 케이스에 대해서는 별도의 클래스 함수를 만들던가 해야하겠더라.

일단은 그래서 XE 시절의 함수 만드는 방법, 스킨에서 커스텀함수를 불러와서 사용하는 방법 등을 찾아서 정리를 해보겠다.



1. XE 확장변수 eid로 정렬하기

https://overcode.tistory.com/entry/xe-%ED%99%95%EC%9E%A5%EB%B3%80%EC%88%98-eid%EB%A1%9C-%EC%A0%95%EB%A0%AC%ED%95%98%EA%B8%B0

document.model.php의 

function _setSortIndex()의 젤 윗줄에 아래 코드 추가

function _setSortIndex($obj, $load_extra_vars) {
//확장변수 eid로 정렬
if($obj->sort_index == 'eng_name') { //확장변수의 eid
    $returnObj = new stdClass();
    $returnObj->sort_index = $obj->sort_index;
    $returnObj->isExtraVars = true;
    return $returnObj;
}
.......

이런 식으로 쓰면 됨.

$args = new stdClass();
$args->module_srl = 104;
$args->sort_index = 'eng_name';
$output = $oDocumentModel->getDocumentList($args);

2. [XE 기능개선] 확장변수 정렬 설정을 게시판 설정쪽에 추가하는 방법

xe 사용자정의 정렬 숫자/
저의 경우에는 게시물 목록을 스킨에서 직접 불러온 후(XE 내장 함수 이용)에 array_multisort 함수로 정렬해주고 있어요


http://sejin7940.co.kr/index.php?mid=xe_tips&document_srl=98103

https://www.smilepeople.co.kr/index.php?mid=IT&order_type=desc&sort_index=title&search_target=regdate&search_keyword=201302&listStyle=gallery&category=51561&document_srl=1406279

https://xe1.xpressengine.com/index.php?mid=tip&document_srl=22479901

http://sejin7940.co.kr/index.php?mid=xe_tips&document_srl=96426

https://xe1.xpressengine.com/tip/18605555

https://moonhouse.co.kr/xetip/282822


                    

1. board/tpl/board_insert.html

<option loop="$order_target=> $key, $val" value="{$key}" selected="selected"|cond="$module_info->order_target== $key">{$val}</option>

 

아래에다가 추가

 

{@
$oDocumentModel = &getModel('document');
$inserted_extra_vars = $oDocumentModel->getExtraKeys($module_srl);
}
<option loop="$inserted_extra_vars => $key, $val"  selected="selected"|cond="$module_info->order_target== $val->eid" value="{$val->eid}">{$val->name}</option>

 

 

 

2. board/board.admin.controller.php  에서

function procBoardAdminInsertBoard 함수에서

if(!in_array($args->order_target,$this->order_target)) $args->order_target = 'list_order';  

위에다가 추가

 

if($args->module_srl) {
$oDocumentModel = &getModel('document');
$extra_keys = $oDocumentModel->getExtraKeys($args->module_srl);
if (is_array($extra_keys)){
foreach($extra_keys as $val){
$this->order_target[] = $val->eid;
}
}
}

 

 


3. modules/board/board.view.php 에서
 function dispBoardContentList()  함수에서

 

if(!in_array($args->order_type, array('asc','desc'))) 위에다가 추가

 

// sejin7940 추가 ( 확장변수 기준 정렬 기능 )
if(!Context::get('sort_index') && $extra_keys) {
foreach($extra_keys as $key => $val) {
$order_target_extra[] = $val->eid;
}
if(in_array($this->module_info->order_target, $order_target_extra)) {
Context::set('sort_index',$this->module_info->order_target);
}
}




3. 확장변수를 숫자로 인식하기 / xe 사용자정의 정렬 숫자

https://xe1.xpressengine.com/tip/20485191

https://xe1.xpressengine.com/qna/21290187


4. 게시판 스킨에서 내가 만든 함수 적용하기/xe 사용자함수

http://chongmoa.com/xe/3722

chongmoa.com/xe/5665

 
댓글은 로그인 사용자만 작성 가능합니다. 로그인하기