카메론 탭형식 위젯

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_varsargs로 받는다
         * 결과를 만든후 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

  • profile
    잘은 모르지만 module_srls는 s가 붙는 만큼 배열일 거 같은데요.
    $args->module_srls를 디버깅으로 확인해보시면 어떨까요?
  • profile profile
    서버문제인지 워낙 다른 문제가 많아서 디버깅도 잘 안되서 어렵네요 ㅠㅠ;