묻고답하기
위젯 수정 도와주십시오 ㅠ
2014.01.18 19:44
압축파일 첨부한 division위젯 수정을하려고하는데요..
이전글다음글 나타내는 위젯인데, 문서번호 (document_srl) 순으로 이전,다음글을 정하던데
이 기준을 문서번호순이 아닌 등록시간 순(regdate)으로 정하도록 하고싶습니다
db작업도중 document_srl을 수정하는바람에 문서번호들이 이상하게 생성되버려서
문서번호순으로 정렬할시 글이 다 섞여버리네요 ㅠㅠ
도움부탁드립니다
- [2010/12/09] 묻고답하기 1.4.4.2 버전업 이후 위젯 수정 불가 문제 *1
댓글 13
-
ForHanbi
2014.01.18 20:08
-
단기종합
2014.01.18 20:11
감사합니다
참고해서 한번 시도해보겠습니다
-
단기종합
2014.01.18 20:20
댓글의 팁을 참고해서
해당 위젯 info.xml에
<options>
<name xml:lang="ko">날짜순</name>
<value>regdate</value>
</options>
이렇게 추가하고
division.class.php 파일에서
$args->sort_index = ($order == 'list_order')?'list_order':'update_order';
이부분을
$args->sort_index = ($order == 'list_order')?'list_order':'update_order':'regdate';
이렇게했는데 오류가 나네요
제가 뭘 잘못한걸까요?
은혜를 내려주세요ㅠ 포한비님
-
ForHanbi
2014.01.18 20:25
보통 php 파일 상단을 보면
function proc($args) {
// Targets to sort
if(!in_array($args->order_target, array('list_order','update_order','regdate','rand()','voted_count','readed_count'))) $args->order_target = 'list_order';
이런 부분이 있습니다.
사용하시는 부분을 위 내용을 바꿔보세요 그럼 될겁니다.
-
단기종합
2014.01.18 20:34
아무리 찾아도 그런부분이 없는듯하네요ㅠ
더공부하고 도전해보겠습니다
댓글감사합니다
새해복받으시고 번창하십시오
-
ForHanbi
2014.01.18 20:40
<?php/*** @class division* @author largeden (webmaster@animeclub.net)* @brief* @version 1.1**/class division extends WidgetHandler {/*** @brief 위젯의 실행 부분** ./widgets/위젯/conf/info.xml 에 선언한 extra_vars를 args로 받는다* 결과를 만든후 print가 아니라 return 해주어야 한다**/function proc($args) {$oModuleModel = &getModel('module');// 제목$title = $args->title;// 정렬 대상$division_type = $args->division_type;$list_count = $args->list_count;if(!$list_count) $list_count = 1;// 정렬 대상if(!in_array($args->order_target, array('list_order','update_order','regdate','rand()','voted_count','readed_count'))) $args->order_target = 'list_order';$search_type = $args->search_type;$category_type = $args->category_type;// 제목 길이 자르기$subject_cut_size = $args->subject_cut_size;if(!$subject_cut_size) $subject_cut_size = 0;// 대상 모듈$mid_list = explode(",",$args->mid_list);// mid_type이 Y일 경우 mid_list 값을 무시하고 현재 모듈 정보로 검색if($args->mid_type == 'Y'){$module_srl = $oModuleModel->getModuleSrlByMid(Context::get('mid'));$logged_info = Context::get('logged_info');}else{// module_srl 대신 mid가 넘어왔을 경우는 직접 module_srl을 구해줌if($mid_list){$module_srl = $oModuleModel->getModuleSrlByMid($mid_list);$logged_info = Context::get('logged_info');}}// DocumentModel::getDocumentList()를 이용하기 위한 변수 정리if(is_array($module_srl)) {$module_srl_im = implode(',',$module_srl);$divi->module_srl = $module_srl_im;}else $divi->module_srl = $module_srl;if($args->document_type == 'Y'){$divi->document_srl = Context::get('document_srl');}else{$divi->document_srl = $args->document_id;}$divi->category_type = $category_type;$divi->list_count = $list_count;$divi->no_search = $search_type;if($division_type == 'prev') $document_list = getDivision_prev($order_target,$divi);elseif($division_type == 'next') $document_list = getDivision_next($order_target,$divi);// 템플릿 파일에서 사용할 변수들을 세팅if(count($mid_list)==1) $widget_info->module_name = $mid_list[0];$widget_info->title = $title;$widget_info->subject_cut_size = $subject_cut_size;$widget_info->document_list = $document_list;Context::set('widget_info', $widget_info);// 템플릿의 스킨 경로를 지정 (skin, colorset에 따른 값을 설정)$tpl_path = sprintf('%sskins/%s', $this->widget_path, $args->skin);Context::set('colorset', $args->colorset);// 템플릿 파일을 지정$tpl_file = 'list';// 템플릿 컴파일$oTemplate = &TemplateHandler::getInstance();$output = $oTemplate->compile($tpl_path, $tpl_file);return $output;}}function getDivision_next($order,$division){return _getDocumentDivision('next',$order,$division);}function getDivision_prev($order,$division){return _getDocumentDivision('prev',$order,$division);}function _getDocumentDivision($type,$order,$division){if(!$division->document_srl) {if(Context::get('document_srl')) $division->document_srl = Context::get('document_srl');else return;}if(!$division->search_target) {if(Context::get('search_target')) $division->search_target = Context::get('search_target');}if(!$division->search_keyword) {if(Context::get('search_keyword')) $division->search_keyword = Context::get('search_keyword');}if(!$division->list_count) $division->list_count = 1;if(!$type) $type = 'next';if(!$order) $order = 'list_order';$oDocumentModel = &getModel('document');$oDocument = $oDocumentModel->getDocument($division->document_srl, '');if($order == 'list_order') {$args->list_order = $oDocument->get('list_order');if($type == 'prev') $args->first_list_order = $oDocument->get('list_order');elseif($type == 'next') $args->last_list_order = $oDocument->get('list_order');} elseif($order == 'update_order') {$args->update_order = $oDocument->get('update_order');if($type == 'prev') $args->first_update_order = $oDocument->get('update_order');elseif($type == 'next') $args->last_update_order = $oDocument->get('update_order');}$args->module_srl = $division->module_srl;$args->category_srl = ($division->category_type == 'Y')? Context::get('category'):'';$args->sort_index = ($order == 'list_order')?'list_order':'update_order';$args->order_type = ($type == 'prev')? ($division->list_count > 0)? 'desc':'asc' :'asc';$args->list_count = ($division->list_count > 1)? $division->list_count:1;$args->page_count = 1;$args->page = 1;// 검색 옵션 정리$search_target = ($division->no_search=='Y')? $division->search_target:'';$search_keyword = ($division->no_search=='Y')? $division->search_keyword:'';$query_id = "widgets.division.getDivisionDocument";if($search_target && $search_keyword) {switch($search_target) {case 'title' :case 'content' :if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);$args->{"s_".$search_target} = $search_keyword;break;case 'title_content' :if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);$args->s_title = $search_keyword;$args->s_content = $search_keyword;break;case 'user_id' :if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);$args->s_user_id = $search_keyword;$args->sort_index = 'documents.'.$args->sort_index;break;case 'user_name' :case 'nick_name' :case 'email_address' :case 'homepage' :if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);$args->{"s_".$search_target} = $search_keyword;break;case 'is_notice' :case 'is_secret' :if($search_keyword=='Y') $args->{"s_".$search_target} = 'Y';else $args->{"s_".$search_target} = '';break;case 'member_srl' :case 'readed_count' :case 'voted_count' :case 'comment_count' :case 'trackback_count' :case 'uploaded_count' :$args->{"s_".$search_target} = (int)$search_keyword;break;case 'regdate' :case 'last_update' :case 'ipaddress' :$args->{"s_".$search_target} = $search_keyword;break;case 'comment' :$args->s_comment = $search_keyword;$args->sort_index = 'documents.'.$args->sort_index;$query_id = 'widgets.division.getDivisionComment';break;case 'tag' :$args->s_tags = str_replace(' ','%',$search_keyword);$args->sort_index = 'documents.'.$args->sort_index;$query_id = 'widgets.division.getDivisionTag';break;default :preg_match('/^extra_vars([0-9]+)$/',$search_target,$matches);if($matches[1]) {$args->{"s_extra_vars".$matches[1]} = $search_keyword;}break;}}$output = executeQuery($query_id, $args);if($output->data) {if($type == 'prev'){$division_count = $division->list_count;foreach($output->data as $division_no2){$division_next[$division_count--] = $division_no2;}for($i=($division_count+1);$i<($division->list_count+1);$i++){$division_document[$i] = $division_next[$i];}}elseif($type == 'next'){$division_document = $output->data;}return $division_document;}}/* End of file division.class.php *//* Location: ./system/widgets/division/division.class.php */ -
ForHanbi
2014.01.18 20:41
상단
// 정렬 대상if(!in_array($args->order_target, array('list_order','update_order','regdate','rand()','voted_count','readed_count'))) $args->order_target = 'list_order';이게 수정부분입니다. -
단기종합
2014.01.18 21:03
감사합니다 ㅠㅠ
시도해보겠습니다
성공하면 꼭 말씀드릴게요!
-
단기종합
2014.01.18 21:55
실패..
댓글대로 하니 오류는 안뜨는데..
여전히 문서번호순으로 정렬이되네요 ㅠ
-
ForHanbi
2014.01.18 22:17
테스트 해 볼려고 했더니 전 원본 파일부터 작동이 안되는데요...
-
단기종합
2014.01.18 23:41
포한비님 감사합니다 ㅠㅠ
저희 사이트에서는 작동이 되는 위젯이에요..
코어 1.4버전대 사용중이네요
모바일스킨에서 read.html 파일에
<img class="zbxe_widget_output" widget="division" skin="default" title="- next" division_type="next" order_target="list_order" mid_type="Y" />
이렇게 소스코드넣어서 사용하고있습니다
관심가져주셔서 정말 감사드려요
-
ForHanbi
2014.01.19 11:33
이걸로 한번 테스트 해 보세요.
1.4에서 테스트 한다고 해 봤는데 원하는게 맞을지...division.zip
-
단기종합
2014.01.23 06:50
뒤늦게 확인했습니다
문제 해결되었습니다 감사합니다
포한비님의 능력에 감탄하고갑니다
이렇게까지 관심가져주셔서 고맙습니다 (__)
http://www.xpressengine.com/qna/22563771
세진님이 올리신 팁이 도움이 되실겁니다.