XpressEngine에 관련 내용에 대해서 이야기 합니다.
글 수 193
일번 게시판 목록에서
그 게시판 상단에에 원하는 확장변수가 들어있는 글을 출력하고 싶어서 구현중입니다.
게시물 리스트상단에 확장변수1이 "A"인 게시물을 검색하여 그에 맞는 제목을 목록형식으로 게시판 위에뿌려주려고합니다.
확장변수1이 "A"가 들어있는 게시물이 2~3개가 될수도 있습니다. 이것을 모두 상단에 출력하고 싶습니다
꼭 필요한 부분이라 구현을 해야하는데 잘 안되네요.
func_include 애드온을 이용해 이것저것 봐도, 라르게덴님이 제작하신 로그인소스를봐도 잘 이해가 안가네요 ㅎㅎㅎ;;;
제로보드4에 너무 익숙해져서 그런걸까요 ;;;
가능하시다면, 설명과 함께 소스로 기본예제정도 하나 만들어주시면 정말 감사하겠습니다 (__)
새해복 많이 받으세요.. ^_^
라르게덴
- 2010.01.05
- 12:15:36
- (*.234.236.218)

xe_board 를 기준으로 하였습니다. func_include를 모듈전체에 사용으로 해두세요.
xe/.../xe_board/php/class.php 경로와 파일을 만드시고 아래의 내용을 삽입
xe/.../xe_board/queries/getExtraVars.xml 경로와 파일을 만드시고 아래의 내용을 삽입
xe/.../xe_board/style_list.html 최 상단에 아래를 삽입하세요.
간단하지만 확장성을 많이 높였습니다. 더욱 높인다면 document의 item연동도 되겠지만 여기까지 해뒀으니 나머지는 입맛대로 개조해보세요.
마지막에 삽입 내용 중에 $extra 들이 옵션이고요. eid를 기준으로 찾는 방법과 var_idx를 기준으로 찾는 방법 두가지가 있습니다. 그리고 여러개 중 일치하는 방법과 포함되는 방법 두가지 선택 가능합니다.
1.대상 선정하기
- 두개 이상일 경우 각 eid, var_idx에 작은 따옴표(')를 넣고 (,)로 구분하셔야 합니다.
- 단일 일 경우는 일반 변수 선언하듯 큰 따옴표만 묶어주시면 됩니다.
2. 단어 포함 여부
- $extra->value와 $extra->s_value가 class.php에 준비되어있습니다.
- value는 말씀하신 A라는 대상을 입력하시면 됩니다.
- s_value는 A라는 단어를 포함하는 모든 대상을 뽑을 수 있게 되어있습니다.
※ value와 s_value 두개 동시에 하면 원하는 결과물이 나오지 않습니다. 하나만 조건선택해주세요.
※ eids와 var_idx 두개 동시에 하면 원하는 결과물이 나오지 않습니다. 하나만 조건선택해주세요.
3. 페이지 기능
- 저 대로 사용하게 되면 게시판이 2페이지면 2페이지에 해당하는 결과물이 나오게 되니 사용하지 않으실 거면 주석처리해주세요.
※ 페이지 기능여부는 따로 설명 드리지 않겠습니다. xe 사이트 tip란 등으로 공부해보세요.
xe/.../xe_board/php/class.php 경로와 파일을 만드시고 아래의 내용을 삽입
<?php
if(!defined("__ZBXE__")) exit();
class extra_vars {
function extraList($args){
$eids = "test";
$obj->eids = ($args->eids)?$args->eids:$eids;
$obj->value = ($args->value)?$args->value:false;
$obj->s_value = ($args->s_value)?$args->s_value:false;
$obj->var_idxs = ($args->var_idxs)?$args->var_idxs:false;
$obj->sort_index = "documents.list_order";
$obj->order_type = "desc";
$obj->page = Context::get("page");
$obj->list_count = 20;
$obj->page_count = 10;
$output = executeQueryArray('board/skins/xe_board.getExtraVars', $obj);
if(!$output->toBool()) return;
Context::set("etotal_count", $output->total_count);
Context::set("etotal_page", $output->total_page);
Context::set("epage", $output->page);
Context::set("epage_navigation", $output->page_navigation);
return $output->data;
}
}
?>
if(!defined("__ZBXE__")) exit();
class extra_vars {
function extraList($args){
$eids = "test";
$obj->eids = ($args->eids)?$args->eids:$eids;
$obj->value = ($args->value)?$args->value:false;
$obj->s_value = ($args->s_value)?$args->s_value:false;
$obj->var_idxs = ($args->var_idxs)?$args->var_idxs:false;
$obj->sort_index = "documents.list_order";
$obj->order_type = "desc";
$obj->page = Context::get("page");
$obj->list_count = 20;
$obj->page_count = 10;
$output = executeQueryArray('board/skins/xe_board.getExtraVars', $obj);
if(!$output->toBool()) return;
Context::set("etotal_count", $output->total_count);
Context::set("etotal_page", $output->total_page);
Context::set("epage", $output->page);
Context::set("epage_navigation", $output->page_navigation);
return $output->data;
}
}
?>
xe/.../xe_board/queries/getExtraVars.xml 경로와 파일을 만드시고 아래의 내용을 삽입
<query id="getExtraVars" action="select">
<tables>
<table name="documents" alias="documents" />
<table name="document_extra_vars" alias="document_extra_vars" />
</tables>
<columns>
<column name="documents.*" />
</columns>
<conditions>
<condition operation="equal" column="documents.document_srl" var="document_extra_vars.document_srl" pipe="where" />
<group pipe="and">
<condition operation="in" column="document_extra_vars.eid" var="eids" notnull="notnull" pipe="and" />
<condition operation="equal" column="document_extra_vars.value" var="value" notnull="notnull" pipe="and" />
<condition operation="like" column="document_extra_vars.value" var="s_value" notnull="notnull" pipe="and" />
<condition operation="in" column="document_extra_vars.var_idx" var="var_idxs" notnull="notnull" pipe="and" />
</group>
</conditions>
<navigation>
<index var="sort_index" default="documents.list_order" order="order_type" />
<list_count var="list_count" default="20" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />
</navigation>
</query>
<tables>
<table name="documents" alias="documents" />
<table name="document_extra_vars" alias="document_extra_vars" />
</tables>
<columns>
<column name="documents.*" />
</columns>
<conditions>
<condition operation="equal" column="documents.document_srl" var="document_extra_vars.document_srl" pipe="where" />
<group pipe="and">
<condition operation="in" column="document_extra_vars.eid" var="eids" notnull="notnull" pipe="and" />
<condition operation="equal" column="document_extra_vars.value" var="value" notnull="notnull" pipe="and" />
<condition operation="like" column="document_extra_vars.value" var="s_value" notnull="notnull" pipe="and" />
<condition operation="in" column="document_extra_vars.var_idx" var="var_idxs" notnull="notnull" pipe="and" />
</group>
</conditions>
<navigation>
<index var="sort_index" default="documents.list_order" order="order_type" />
<list_count var="list_count" default="20" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />
</navigation>
</query>
xe/.../xe_board/style_list.html 최 상단에 아래를 삽입하세요.
<!--@if($func_check)-->
{@
func_include($tpl_path.'php/class.php');
$oExtra_vars = new extra_vars();
$extra->eids = "'test','test2'";
$extra->value = "A";
// $extra->var_idxs = "'1','2'";
$oExtra_info = $oExtra_vars->extraList($extra);
}
<!--@if($oExtra_info)-->
<ul>
<!--@foreach($oExtra_info as $key => $val)-->
<li>{$val->document_srl} : {$val->title} ({$val->nick_name})</li>
<!--@endforeach-->
</ul>
<!--@endif-->
<!--@endif-->
{@
func_include($tpl_path.'php/class.php');
$oExtra_vars = new extra_vars();
$extra->eids = "'test','test2'";
$extra->value = "A";
// $extra->var_idxs = "'1','2'";
$oExtra_info = $oExtra_vars->extraList($extra);
}
<!--@if($oExtra_info)-->
<ul>
<!--@foreach($oExtra_info as $key => $val)-->
<li>{$val->document_srl} : {$val->title} ({$val->nick_name})</li>
<!--@endforeach-->
</ul>
<!--@endif-->
<!--@endif-->
간단하지만 확장성을 많이 높였습니다. 더욱 높인다면 document의 item연동도 되겠지만 여기까지 해뒀으니 나머지는 입맛대로 개조해보세요.
마지막에 삽입 내용 중에 $extra 들이 옵션이고요. eid를 기준으로 찾는 방법과 var_idx를 기준으로 찾는 방법 두가지가 있습니다. 그리고 여러개 중 일치하는 방법과 포함되는 방법 두가지 선택 가능합니다.
1.대상 선정하기
- 두개 이상일 경우 각 eid, var_idx에 작은 따옴표(')를 넣고 (,)로 구분하셔야 합니다.
- 단일 일 경우는 일반 변수 선언하듯 큰 따옴표만 묶어주시면 됩니다.
2. 단어 포함 여부
- $extra->value와 $extra->s_value가 class.php에 준비되어있습니다.
- value는 말씀하신 A라는 대상을 입력하시면 됩니다.
- s_value는 A라는 단어를 포함하는 모든 대상을 뽑을 수 있게 되어있습니다.
※ value와 s_value 두개 동시에 하면 원하는 결과물이 나오지 않습니다. 하나만 조건선택해주세요.
※ eids와 var_idx 두개 동시에 하면 원하는 결과물이 나오지 않습니다. 하나만 조건선택해주세요.
3. 페이지 기능
- 저 대로 사용하게 되면 게시판이 2페이지면 2페이지에 해당하는 결과물이 나오게 되니 사용하지 않으실 거면 주석처리해주세요.
※ 페이지 기능여부는 따로 설명 드리지 않겠습니다. xe 사이트 tip란 등으로 공부해보세요.
내일 xe 기본 게시판 스킨으로다가 샘플만들어 드릴게요. ^^