[공지사항]
아래와 같이 적용을 하면 확장변수로 정렬은 됩니다.
그런데 게시판에서 약간의 문제를 야기하는군요.
특히 문하우스게시판에 적용을 하면 다음/이전글에서 문제를 일으킵니다.
XE사이트의 팁에 있는 내용을 기본으로 제가 변형해서 작성합니다.
1. skin.xml편집 -- 아래 소스를 추가합니다.
<group>
<title xml:lang="ko">확장변수 정렬</title>
<var name="extra_val_solt" type="select">
<title xml:lang="ko">확장변수로 정렬</title>
<options value="N">
<title xml:lang="ko">하지 않음</title>
</options>
<options value="Y">
<title xml:lang="ko">확장변수정렬</title>
</options>
</var>
<var name="extra_val_solt_name" type="text">
<title xml:lang="ko">확장변수 이름</title>
<description xml:lang="ko">정렬을 원하는 확장변수의 이름을 적어주세요</description>
</var>
</group>
<title xml:lang="ko">확장변수 정렬</title>
<var name="extra_val_solt" type="select">
<title xml:lang="ko">확장변수로 정렬</title>
<options value="N">
<title xml:lang="ko">하지 않음</title>
</options>
<options value="Y">
<title xml:lang="ko">확장변수정렬</title>
</options>
</var>
<var name="extra_val_solt_name" type="text">
<title xml:lang="ko">확장변수 이름</title>
<description xml:lang="ko">정렬을 원하는 확장변수의 이름을 적어주세요</description>
</var>
</group>
2. list.html 상단에 소스 추가합니다. (원본소스)
<!--@if($module_info->extra_val_solt!='N')-->
<!--@if(!$sort_index)-->
{@
$noticeTF = false;
if($module_info->except_notice == 'Y') $noticeTF = true;
$args->module_srl = $module_info->module_srl;
$args->list_count = $total_count;
$args->category_srl = $category;
$oDocumentModel = &getModel('document');
$output = $oDocumentModel->getDocumentList($args, $noticeTF);
$document_list = $output->data;
}
<!--@foreach($document_list as $no => $document)-->
{@
$extra_sortkey[$no] = $document->getExtraEidValue($module_info->extra_val_solt_name);
$extra_sortkey2[$no] = $no;
}
<!--@end-->
{@
array_multisort($extra_sortkey, $extra_sortkey2, $document_list);
if($module_info->order_type == 'asc' || $order_type == 'asc') $document_list = array_reverse($document_list);
}
<!--@if($document_srl)-->
<!--@foreach($document_list as $document)-->
{@
$extra_doc_srl[] = $document->document_srl;
}
<!--@end-->
{@
$page = ((int) (array_search($document_srl, $extra_doc_srl) / $module_info->list_count)) + 1;
}
<!--@end-->
{@
$document_list = array_slice($document_list, $module_info->list_count * ($page-1), $module_info->list_count, true);
}
<!--@end-->
<!--@end-->
<!--@if(!$sort_index)-->
{@
$noticeTF = false;
if($module_info->except_notice == 'Y') $noticeTF = true;
$args->module_srl = $module_info->module_srl;
$args->list_count = $total_count;
$args->category_srl = $category;
$oDocumentModel = &getModel('document');
$output = $oDocumentModel->getDocumentList($args, $noticeTF);
$document_list = $output->data;
}
<!--@foreach($document_list as $no => $document)-->
{@
$extra_sortkey[$no] = $document->getExtraEidValue($module_info->extra_val_solt_name);
$extra_sortkey2[$no] = $no;
}
<!--@end-->
{@
array_multisort($extra_sortkey, $extra_sortkey2, $document_list);
if($module_info->order_type == 'asc' || $order_type == 'asc') $document_list = array_reverse($document_list);
}
<!--@if($document_srl)-->
<!--@foreach($document_list as $document)-->
{@
$extra_doc_srl[] = $document->document_srl;
}
<!--@end-->
{@
$page = ((int) (array_search($document_srl, $extra_doc_srl) / $module_info->list_count)) + 1;
}
<!--@end-->
{@
$document_list = array_slice($document_list, $module_info->list_count * ($page-1), $module_info->list_count, true);
}
<!--@end-->
<!--@end-->
, true 이부분은 php4 이하버전을 사용하시는 경우는 지워주세요. 지우지 않으면 게시물이 출력되지 않습니다.
php5 이상버전 사용자는 그냥 두시면 됩니다.
3. 게시판형태 파일을 수정합니다. _style.list.html을 보기로 작업합니다.
[수정전]
<!--// 컨텐츠 종류에 따라서 출력 -->
<!--@if($val->type == 'no')-->
<td class="num"><!--@if($document_srl == $document->document_srl)--><img src="/images/common/iconArrowD8.gif" border="0" alt="" /><!--@else--> {$no} <!--@end--></td>
<!--@if($val->type == 'no')-->
<td class="num"><!--@if($document_srl == $document->document_srl)--><img src="/images/common/iconArrowD8.gif" border="0" alt="" /><!--@else--> {$no} <!--@end--></td>
[수정후]
<!--// 컨텐츠 종류에 따라서 출력 -->
<!--@if($val->type == 'no')-->
<td class="num"><!--@if($document_srl == $document->document_srl)--><img src="/images/common/iconArrowD8.gif" border="0" alt="" /><!--@else--><!--@if($module_info->extra_val_solt!='N')-->{@ $recno = ($no-$total_count)*(-1)}{$recno}<!--@else-->{$no}<!--@end--><!--@end--></td>
<!--@if($val->type == 'no')-->
<td class="num"><!--@if($document_srl == $document->document_srl)--><img src="/images/common/iconArrowD8.gif" border="0" alt="" /><!--@else--><!--@if($module_info->extra_val_solt!='N')-->{@ $recno = ($no-$total_count)*(-1)}{$recno}<!--@else-->{$no}<!--@end--><!--@end--></td>
위와 같이 수정하시고 스킨관리에 들어가서 아래 부분을 적용하시면 됩니다.
확장변수의 이름은 정렬을 원하는 확장변수의 이름을 적어주시면 됩니다.
원소스에 있는 아래의 부분이 php4이하 버전 호스팅에서 문제를 일으키는 것 같습니다.
{@
$document_list = array_slice($document_list, $module_info->list_count * ($page-1), $module_info->list_count, true);
}
그런데 , true 이코드를 삭제하니 작동은 되는데 게시판 목록번호가 페이지를 넘겨도 같은 번호로 나열됩니다.
이레저레 php4이하에서는 문제를 야기합니다.