2.0.6으로 업데이트하면서 쿼리.xml의 페이지네이션이 나오지 않고 있는데요
CMS/프레임워크 | Rhymix 2.0 |
---|---|
개발 언어 | PHP 7.0 |
문제 페이지 주소 | 비공개 (작성 후 5일 경과) |
라이믹스 1.9.9.7에서 2.0.6으로 바로 덮어쓰기를 했습니다.
그러면서 예전에 만들었던 위젯에서 잘 나오던 페이지네이션이 안 나오고 있어서요;;
list_count를 3으로 했을 때, 원래대로라면 total_count가 13이 되고 total_page가 4로 나와야 하는데요.
total_count가 3으로 고정되고 total_page도 1밖에 안 됩니다ㅜ
짜놨었던 쿼리는 아래와 같은데요. xml을 수정해야 할지 아니면 다른 부분을 의심해봐야 할지 감이 잘 안 잡힙니다.
<query id="getMemberList" action="select">
<tables>
<table name="member" alias="member" />
<table name="member_group_member" alias="member_group" />
</tables>
<columns>
<column name="member.*" />
</columns>
<conditions>
<condition operation="in" column="member_group.group_srl" var="selected_group_srl" notnull="notnull" />
<condition operation="equal" column="member.member_srl" var="member_group.member_srl" pipe="and" notnull="notnull" />
<group pipe="and">
<condition operation="equal" column="denied" default="N" pipe="and" />
<condition operation="in" column="member.member_srl" var="member_srls" pipe="and" />
</group>
<group pipe="and">
<condition operation="like" column="member.user_id" var="s_user_id" />
<condition operation="like" column="member.user_name" var="s_user_name" pipe="or" />
<condition operation="like" column="member.nick_name" var="s_nick_name" pipe="or" />
<condition operation="like" column="member.nick_name" var="html_nick_name" pipe="or" />
<condition operation="like" column="member.email_address" var="s_email_address" pipe="or" />
<condition operation="like" column="member.birthday" var="s_birthday" pipe="or" />
<condition operation="like" column="member.extra_vars" var="s_extra_vars" pipe="or" />
<condition operation="like_prefix" column="member.regdate" var="s_regdate" pipe="or" />
<condition operation="like_prefix" column="member.last_login" var="s_last_login" pipe="or" />
<condition operation="more" column="member.regdate" var="s_regdate_more" pipe="or" />
<condition operation="less" column="member.regdate" var="s_regdate_less" pipe="or" />
<condition operation="more" column="member.last_login" var="s_last_login_more" pipe="or" />
<condition operation="less" column="member.last_login" var="s_last_login_less" pipe="or" />
</group>
</conditions>
<groups>
<group column="member.member_srl" />
</groups>
<navigation>
<index var="sort_index" default="member.list_order" order="sort_order" />
<list_count var="list_count" default="20" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />
</navigation>
</query>
<tables>
<table name="member" alias="member" />
<table name="member_group_member" alias="member_group" />
</tables>
<columns>
<column name="member.*" />
</columns>
<conditions>
<condition operation="in" column="member_group.group_srl" var="selected_group_srl" notnull="notnull" />
<condition operation="equal" column="member.member_srl" var="member_group.member_srl" pipe="and" notnull="notnull" />
<group pipe="and">
<condition operation="equal" column="denied" default="N" pipe="and" />
<condition operation="in" column="member.member_srl" var="member_srls" pipe="and" />
</group>
<group pipe="and">
<condition operation="like" column="member.user_id" var="s_user_id" />
<condition operation="like" column="member.user_name" var="s_user_name" pipe="or" />
<condition operation="like" column="member.nick_name" var="s_nick_name" pipe="or" />
<condition operation="like" column="member.nick_name" var="html_nick_name" pipe="or" />
<condition operation="like" column="member.email_address" var="s_email_address" pipe="or" />
<condition operation="like" column="member.birthday" var="s_birthday" pipe="or" />
<condition operation="like" column="member.extra_vars" var="s_extra_vars" pipe="or" />
<condition operation="like_prefix" column="member.regdate" var="s_regdate" pipe="or" />
<condition operation="like_prefix" column="member.last_login" var="s_last_login" pipe="or" />
<condition operation="more" column="member.regdate" var="s_regdate_more" pipe="or" />
<condition operation="less" column="member.regdate" var="s_regdate_less" pipe="or" />
<condition operation="more" column="member.last_login" var="s_last_login_more" pipe="or" />
<condition operation="less" column="member.last_login" var="s_last_login_less" pipe="or" />
</group>
</conditions>
<groups>
<group column="member.member_srl" />
</groups>
<navigation>
<index var="sort_index" default="member.list_order" order="sort_order" />
<list_count var="list_count" default="20" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />
</navigation>
</query>

윤삼
Lv. 19
아무래도 중급 초반 수준의 코딩 오타쿠인 것 같습니다.
댓글 10
쿼리 내용자체로만 보면 라이믹스 코어에서 제공한듯한 파일처럼 보이나 실제로 서드파티를 이용하신거라면 어떻게 쿼리를 호출햇는지 좀 더 정보가 필요할 것 같습니다.
네, 안 그래도 위젯 클래스 파일도 보여드려야겠다는 생각을 하고 있었어요ㅎㅎ
/**
* @class ap_member_list
* @brief 회원 목록 및 검색 위젯
* @version 0.1
**/
class ap_member_list extends WidgetHandler
{
function proc($args)
{
// 언어 파일 로드
Context::loadLang($this->widget_path . 'lang');
// 위젯 설정에서 지정한 그룹을 별도로 목록화
$target_groups = array();
$oMemberModel = getModel('member');
$_groups = explode(',', $args->target_group);
if ( count($_groups) )
{
for ( $i = 0; $i < count($_groups); $i++ )
{
$group_srl = trim($_groups[$i]);
if ( !$group_srl ) continue;
$target_groups[$group_srl] = $oMemberModel->getGroup($group_srl);
}
}
else
{
$target_groups = $oMemberModel->getGroups(0);
if ( !$target_groups ) return;
}
// 회원 목록 변수 정리
$obj = new stdClass();
$obj->selected_group_srl = Context::get('selected_group_srl') ? Context::get('selected_group_srl') : implode(',', array_keys($target_groups));
$obj->sort_index = Context::get('sort_index') ? Context::get('sort_index') : $args->sort_index;
$obj->sort_order = Context::get('sort_order')? Context::get('sort_order') : $args->sort_order;
$obj->list_count = $args->list_count ? (int)$args->list_count : 20;
$obj->page_count = $args->page_count ? (int)$args->page_count : 10;
$obj->page = Context::get('mpage') ? abs(Context::get('mpage')) : 1;
// 회원 모듈 사용자정의 불러오기
$_extra_keys = $oMemberModel->getJoinFormList();
if ( count($_extra_keys) )
{
$extra_keys = array();
foreach ( $_extra_keys as $key => $val )
{
if ( in_array($val->column_name, array_map('trim', explode(',', $args->extra_keys))) ) $extra_keys[$key] = $val;
}
}
// 검색 대상 정리
$option_view = $args->option_view;
$_option_arr = array_map('trim', explode(',', $option_view));
$option_arr = array();
foreach ( $_option_arr as $val )
{
if ( !in_array($val, array('profile_image', 'signature', 'member_group', 'extra_vars')) ) $option_arr[$val] = Context::getLang($val);
if ( in_array($val, array('regdate', 'last_login')) )
{
$option_arr[$val] = Context::getLang('search_target_list')[$val];
$option_arr[$val.'_more'] = Context::getLang('search_target_list')[$val.'_more'];
$option_arr[$val.'_less'] = Context::getLang('search_target_list')[$val.'_less'];
}
}
$search_target_list = $option_arr;
if ( count($extra_keys) )
{
$extra_search_target_list = array();
foreach ( $extra_keys as $val )
{
$extra_search_target_list[$val->column_name] = $val->column_title;
}
}
$search_target_list = array_merge($search_target_list, $extra_search_target_list);
// 회원 목록 및 검색 쿼리 실행
$search_target = trim(Context::get('search_target'));
$search_keyword = trim(Context::get('search_keyword'));
if ( $search_target && $search_keyword )
{
$s_target = 's_' . $search_target;
if ( in_array($search_target, array('regdate', 'last_login', 'birthday')) )
{
$obj->$s_target = preg_match('/[0-9]+/', $search_keyword) ? preg_replace('/[^0-9]/', '', $search_keyword) : $search_keyword;
}
else if ( in_array($search_target, array('regdate_more', 'last_login_more')) )
{
$obj->$s_target = preg_match('/[0-9]+/', $search_keyword) ? substr(preg_replace('/[^0-9]/', '', $search_keyword) . '00000000000000', 0, 14) : $search_keyword;
}
else if ( in_array($search_target, array('regdate_less', 'last_login_less')) )
{
$obj->$s_target = substr(preg_replace('/[^0-9]/', '', $search_keyword) . '00000000000000', 0, 14);
}
else if ( array_key_exists($search_target, $extra_search_target_list) && count($extra_keys) )
{
if ( count($extra_keys) === 1 )
{
$obj->s_extra_vars = str_replace(' ', '%', $search_keyword);
}
else
{
$_search_keyword = str_replace(' ', '%', $search_keyword);
$member_srls = array();
$_output = executeQueryArray('widgets.ap_member_list.getMembersWithExtraVars')->data;
foreach ( $_output as $key => $val )
{
$_extra_vars = unserialize($val->extra_vars);
$_extra_target = new stdClass();
foreach ( $_extra_vars as $eid => $var )
{
if ( $eid === $search_target )
{
$vars = is_array($var) ? implode(', ', $var) : $var;
if ( stripos($vars, $_search_keyword) !== false ) $member_srls[] = $val->member_srl;
}
}
}
$obj->member_srls = count($member_srls) ? $member_srls : 0;
}
}
else
{
$obj->$s_target = str_replace(' ', '%', $search_keyword);
}
}
// DB 쿼리 최종 실행
$output = executeQueryArray('widgets.ap_member_list.getMemberList', $obj);
// 위젯 변수 정리
$member_list = new stdClass();
$member_list->widget_cache = (int)preg_replace('/[^0-9]*/s', '', $args->widget_cache);
$member_list->target_groups = $member_list->widget_cache ? null: $target_groups;
$member_list->title = $args->title;
$member_list->subtitle = $args->subtitle;
$member_list->view_group_tab = $args->view_group_tab ? $args->view_group_tab : 'Y';
$member_list->view_page_navigation = $args->view_page_navigation ? $args->view_page_navigation : 'Y';
$member_list->ajax_use = $args->ajax ? $args->ajax : 'Y';
// 위젯 스킨에 담을 변수를 위한 배열 변수 선언
$member_list->item = array();
// 그룹별 데이터 결과값 확인 후, 회원별로 추가 변수값 부가
if ( $output->toBool() && $output->data )
{
foreach ( $output->data as $key => $val )
{
$member_item = new stdClass();
$member_item->member_srl = $member_srl = $val->member_srl;
// 보기 옵션에 따라 변수 추가 배분
if ( strpos($option_view, 'profile_image') !== false ) $member_item->profile_info = $oMemberModel->getProfileImage($member_srl);
if ( strpos($option_view, 'nick_name') !== false ) $member_item->nick_name = $val->nick_name;
if ( strpos($option_view, 'user_id') !== false ) $member_item->user_id = $val->user_id;
if ( strpos($option_view, 'user_name') !== false ) $member_item->user_name = $val->user_name;
if ( strpos($option_view, 'email_address') !== false ) $member_item->email_address = $val->email_address;
if ( strpos($option_view, 'homepage') !== false ) $member_item->homepage = $val->homepage;
if ( strpos($option_view, 'blog') !== false ) $member_item->blog = $val->blog;
if ( strpos($option_view, 'birthday') !== false ) $member_item->birthday = $val->birthday;
if ( strpos($option_view, 'regdate') !== false ) $member_item->regdate = $val->regdate;
if ( strpos($option_view, 'last_login') !== false ) $member_item->last_login = $val->last_login;
if ( strpos($option_view, 'member_group') !== false ) $member_item->member_group = implode(', ', $oMemberModel->getMemberGroups($member_srl, 0));
if ( strpos($option_view, 'signature') !== false ) $member_item->signature = $oMemberModel->getSignature($member_srl);
// 사용자정의 가져오기
if ( strpos($option_view, 'extra_vars') !== false && count($extra_keys) )
{
$_extra_vars = unserialize($val->extra_vars);
$member_item->extra_vars = array();
foreach ( $extra_search_target_list as $name => $title )
{
foreach ( $_extra_vars as $eid => $var )
{
if ( $eid === $name )
{
$vars = is_array($var) ? implode(', ', $var) : $var;
$member_item->extra_vars[$name] = array(
'title' => $title,
'value' => $vars
);
}
}
}
if ( !count($member_item->extra_vars) )
{
foreach ( $extra_search_target_list as $name => $title )
{
$member_item->extra_vars[$name] = array(
'title' => $title,
'value' => ''
);
}
}
}
$member_list->item[] = $member_item;
continue;
}
}
// 위젯 스킨으로 변수 전달
Context::set('member_list', $member_list);
Context::set('option_view', array_map('trim', explode(',', $option_view)));
Context::set('extra_keys', $extra_keys);
if ( !$member_list->widget_cache ) Context::set('member_page', $output->page_navigation);
Context::set('search_target_list', $search_target_list);
// 템플릿의 스킨 경로를 지정 (skin, colorset에 따른 값을 설정)
$tpl_path = sprintf('%sskins/%s', $this->widget_path, $args->skin);
// 템플릿 파일을 지정
$tpl_file = 'list';
// 템플릿 컴파일
$oTemplate = &TemplateHandler::getInstance();
$output = $oTemplate->compile($tpl_path, $tpl_file);
return $output;
}
}
?>
그 부분에서 디버깅 찍었을 때 페이지네이션 문제가 생겼어요;;
JOIN과 GROUP BY가 섞여 있는 것을 보니, 라이믹스 develop 브랜치에서 며칠 전에 패치된 문제와 관련이 있을 수도 있습니다. 따끈따끈한 2.0.7로 업데이트해 보세요.^^