XE Tips 는 제가 XE 공홈에 쓴 XE 관련 유용한 팁들입니다. 기능개선은 공홈에 안 적어둔 XE 유용 개선팁들입니다.
유용정보는 외부 검색을 통해 알아낸 소스등을 기재해둔 곳입니다.
버그 신고내역들은 XE 사용하다가 발견한 버그 패치방법들로, Core Issue 에 기록해뒀기에 XE 에 적용이 되었을 가능성이 있겠죠
제가 쓴 글들에 대해 퍼가실때는 꼭 출처를남겨주시고.. (다만 플래시뷰 기반이기에 퍼가기는조금 힘들 수 있겠죠 ^^;)
타회원의 글들도 적혀있는 출처를 같이 꼭 기재해주세요
출처 | sejin7940 |
---|
XE 1.5.3.2 에 배포되는 내용으로 알고 있는데..
혹여나 업데이트 안 하고 필요하신 분이 있을까봐서 적어둡니다
기존소스가 조금 틀려서 120908 에 살짝 고쳐서 다시 기재해둡니다
또한 다국어 기반일때 좀 애매하게 꼬이는데...
(즉, 특정 다국어에는 기재되어있고, 특정 다국어에는 안 되어있는 경우, 타다국어 중 하나에라도 있으면 계산이 되었었는데
현재 보고있는 다국어 기준으로 수가 카운트되도록 소스를 바꿨습니다. XE 이슈 쪽에 등록한건 이 부분은 제외되어있습니다)
-----------------------------------
글 수를 카운트 하는 함수는 별도로 document 모듈 안에 있는 것으로 알고 있습니다
document.model.php 에서
getDocumentCount 함수죠
여기에 기본적인 search 값을 넣어서도 가능하기에 일반적으로는 쓸 수 있는데
특정 확장변수 값이 포함된 글의 개수를 뽑을 방법이 없습니다
그렇다고 확장변수를 통한 글목록 추출로는 default 가 게시판
노출갯수로 제한이
되어있기에, 정확한 수를 뽑을 수가 없죠
따라서, 특정확장변수가 포함된 글의 개수를 알아내는 함수가 있었으면 합니다
위치는 modules/document/document.model.php 에 그래도 추가하면 되고
function getDocumentExtraVarsCount($module_srl, $search_obj = NULL)
{
// Additional search options
$args->module_srl = $module_srl;
$args->category_srl =
$search_obj->category_srl;
$args->var_idx =
$search_obj->s_var_idx;
$args->var_eid =
$search_obj->s_var_eid;
$args->var_value =
$search_obj->s_var_value;
$args->var_lang_code = Context::getLangType(); // 현재 보고있는 언어에서만 뽑히게
$output = executeQuery('document.getDocumentExtraVarsCount', $args);
//
Return total number of
$total_count = count($output->data);
return
(int)$total_count;
}
modules/document/queries/getDocumentExtraVarsCount.xml 형태로 쿼리 추가
<query id="getDocumentExtraVarsCount" action="select">
<tables>
<table name="documents" />
<table
name="document_extra_vars" alias="extra_vars" />
</tables>
<columns>
<column name="*"
/>
</columns>
<conditions>
<condition
operation="in" column="documents.module_srl" var="module_srl" filter="number"
/>
<condition operation="in" column="documents.category_srl"
var="category_srl" filter="number" pipe="and" />
<condition
operation="equal" column="extra_vars.module_srl" default="documents.module_srl"
pipe="and" />
<condition operation="equal"
column="extra_vars.document_srl" default="documents.document_srl" pipe="and"
/>
<condition operation="equal" column="extra_vars.var_idx"
var="var_idx" pipe="and" />
<condition operation="equal"
column="extra_vars.eid" var="var_eid" pipe="and" />
<condition
operation="in" column="documents.status" var="statusList" pipe="and"
/>
<condition operation="like" column="extra_vars.value"
var="var_value" notnull="notnull" pipe="and" />
<condition operation="equal" column="extra_vars.lang_code"
var="var_lang_code" pipe="and" />
</conditions>
<groups>
<group
column="extra_vars.document_srl"
/>
</groups>
</query>
실제 이 함수의 사용 예는
{@
$oDocumentModel = &getModel('document');
// $search_extra->s_var_idx = '1'; // idx 로 하거나 eid 로 하거나 원하는걸로 하면
됨
$search_extra->s_var_eid =
'letter';
$search_extra->s_var_value = 'a';
$module_srl = $module_info->module_srl;
$extra_total =
$oDocumentModel->getDocumentExtraVarsCount($module_srl,$search_extra);
}
{$extra_total}
ps. 현재 value 를 like 로 추출하는데 (checkbox 의 경우나 text,textarea 형태등을 감안해)
그런데, selectbox 나 radio 형식으로 쓰고, 해당한 값을 정확히 일치하는 경우만 뽑고프면
쿼리를 <condition operation="equal" column="extra_vars.value" var="var_value" notnull="notnull" pipe="and" /> 로 하시면 될겁니다