카메론 탭형식 위젯
https://xe1.xpressengine.com/index.php?mid=download&package_id=20120961
위 위젯을 사용 중인데, 불러오려는 위젯 갯수가 많다보니, 각 모듈을 선택해서 위젯을 생성 후,
해당 위젯을 사이트 레이아웃에 넣어버리니, 사이트가 뜨질 않네요.
그래서 생각한 방법이 제외하고 싶은 모듈을 임의로 위젯 소스 안에 넣어버릴려고 합니다.
위젯 스킨에서? 가능한 방법은 아닌 것 같고,
위젯에서 가능한 것 같은데요,
/widgets/treasurej_popular/treasurej_popular.class.php
위 파일 소스입니다.
<?php /** * @class treasurej_popular * @author Treasurej ([email protected]) * @author zero ([email protected]) * @brief 모듈을 대상으로 인기글/최근글/댓글을 추출합니다. **/ class treasurej_popular extends WidgetHandler { /** * @brief 위젯의 실행 부분 * * ./widgets/위젯/conf/info.xml 에 선언한 extra_vars를 args로 받는다 * 결과를 만든후 print가 아니라 return 해주어야 한다 **/ function proc($args) { $oDocumentModel = &getModel('document'); $oCommentModel = &getModel('comment'); $args->option_view_arr = explode(',',$args->option_view); $args->tab_view_arr = explode(',',$args->tab_view); // 위젯에 넘기기 위한 변수 설정 $widget_info->option_view_arr = $args->option_view_arr; $widget_info->tab_view_arr = $args->tab_view_arr; $widget_info->widget_widths = $args->widget_widths; $widget_info->subject_cut_size = (int)$args->subject_cut_size; $widget_info->content_cut_size = (int)$args->content_cut_size; $widget_info->comment_cut_size = (int)$args->comment_cut_size; $widget_info->thumbnail_width = $args->thumbnail_width; $widget_info->thumbnail_height = $args->thumbnail_height; // 기본값 설정 if(!$args->widget_widths) $widget_info->widget_widths = 240; if(!$args->subject_cut_size) $widget_info->subject_cut_size = 20; if(!$args->content_cut_size) $widget_info->content_cut_size = 50; if(!$args->comment_cut_size) $widget_info->comment_cut_size = 100; if(!$args->thumbnail_width) $widget_info->thumbnail_width = 60; if(!$args->thumbnail_height) $widget_info->thumbnail_height = 60; // 인수 정리 $db_args->module_srls = $args->module_srls; $db_args->sort_index = 'documents.list_order'; $db_args->order_type = 'asc'; $db_args->list_count = $args->list_count; $db_args->clist_count = $args->clist_count; // 최신글을 구함 $output = executeQueryArray('widgets.treasurej_popular.getNewestDocuments', $db_args); if($output->data) { foreach($output->data as $k => $v) { $oDocument = null; $oDocument = $oDocumentModel->getDocument(); $oDocument->setAttribute($v, false); $GLOBALS['XE_DOCUMENT_LIST'][$oDocument->document_srl] = $oDocument; $output->data[$k] = $oDocument; } $oDocumentModel->setToAllDocumentExtraVars(); } $widget_info->newest_documents = $output->data; // 최신 댓글을 구함 $db_args->sort_index = 'list_order'; $output = executeQueryArray('widgets.treasurej_popular.getNewestComments', $db_args); if($output->data) { foreach($output->data as $k => $v) { $oComment = null; $oComment = $oCommentModel->getComment(); $oComment->setAttribute($v); $output->data[$k] = $oComment; } } $widget_info->newest_comments = $output->data; // 인기글을 구함 $db_args->sort_index = 'readed_count'; $db_args->order_type = 'desc'; // 기간 설정 if($args->regdate) $db_args->regdate = date("Ymd", strtotime("-{$args->regdate} day")); $output = executeQueryArray('widgets.treasurej_popular.getPopularDocuments', $db_args); if($output->data) { foreach($output->data as $k => $v) { $oDocument = null; $oDocument = $oDocumentModel->getDocument(); $oDocument->setAttribute($v, false); $GLOBALS['XE_DOCUMENT_LIST'][$oDocument->document_srl] = $oDocument; $output->data[$k] = $oDocument; } $oDocumentModel->setToAllDocumentExtraVars(); } $widget_info->popular_documents = $output->data; Context::set('widget_info', $widget_info); // 언어파일 로드 Context::loadLang($this->widget_path.'lang'); // 템플릿의 스킨 경로를 지정 (skin, colorset에 따른 값을 설정) $tpl_path = sprintf('%sskins/%s', $this->widget_path, $args->skin); Context::set('colorset', $args->colorset); // 템플릿 파일을 지정 $tpl_file = 'list'; // 템플릿 컴파일 $oTemplate = &TemplateHandler::getInstance(); return $oTemplate->compile($tpl_path, $tpl_file); } } ?>
위 코드에서 보면 module_srls 라고 되어있는 부분이 딱 한 줄 나옵니다.
// 인수정리 이 아랫 줄에 보시면,
$db_args->module_srls = $args->module_srls;
이게 있는데 여기서 module_srls가 1,3,5,9인 모듈만 제외시켜주고 싶은데,
이럴 경우는 어떻게 하면 되나요?
if(module_srls=='1' || modules_srls=='3' || module_srls =='5' || module_srls=='9'){
break;
}
...제 한계입니다. -_-a;;
제가 임의로 1개의 modules_srls에 한해서만 시도해본 방법인데 안됩니다.
// 인수 정리 if(!$modules_srls=='1') { $db_args->module_srls = $args->module_srls; $db_args->sort_index = 'documents.list_order'; $db_args->order_type = 'asc'; $db_args->list_count = $args->list_count; $db_args->clist_count = $args->clist_count; }
결과1 : 실패
// 인수 정리 if($modules_srls=='1') break; $db_args->module_srls = $args->module_srls; $db_args->sort_index = 'documents.list_order'; $db_args->order_type = 'asc'; $db_args->list_count = $args->list_count; $db_args->clist_count = $args->clist_count;
결과2 : 실패
// 인수 정리 if(!$modules_srls=='1') $db_args->module_srls = $args->module_srls; $db_args->sort_index = 'documents.list_order'; $db_args->order_type = 'asc'; $db_args->list_count = $args->list_count; $db_args->clist_count = $args->clist_count;
결과3 : 실패
<img class="zbxe_widget_output" widget="treasurej_popular" skin="eond_on" widget_sequence="360199" widget_cache="0" tab_view="newestd,newestc,popular" option_view="title" clist_count="5" subject_cut_size="35" comment_cut_size="35" regdate="7" cond="$module_srls!='1'"/>
결과4 : 실패
<img class="zbxe_widget_output" widget="treasurej_popular" skin="eond_on" widget_sequence="360199" widget_cache="0" tab_view="newestd,newestc,popular" option_view="title" clist_count="5" subject_cut_size="35" comment_cut_size="35" regdate="7" cond="$mid!='제외시킬mid값'"/>
결과5 : 실패
참조글
https://xe1.xpressengine.com/qna/20192261
https://xe1.xpressengine.com/tip/21134804
http://showjean.tistory.com/129
https://xetown.com/index.php?_filter=search&mid=qna&search_keyword=제외&search_target=title&document_srl=614614
http://ksodesign.com/xe_mastery/146006
https://xetown.com/index.php?_filter=search&mid=qna&search_keyword=%EC%A0%9C%EC%99%B8&search_target=title&document_srl=605940
$args->module_srls를 디버깅으로 확인해보시면 어떨까요?