XE Tips 는 제가 XE 공홈에 쓴 XE 관련 유용한 팁들입니다. 기능개선은 공홈에 안 적어둔 XE 유용 개선팁들입니다.
유용정보는 외부 검색을 통해 알아낸 소스등을 기재해둔 곳입니다.
버그 신고내역들은 XE 사용하다가 발견한 버그 패치방법들로, Core Issue 에 기록해뒀기에 XE 에 적용이 되었을 가능성이 있겠죠
제가 쓴 글들에 대해 퍼가실때는 꼭 출처를남겨주시고.. (다만 플래시뷰 기반이기에 퍼가기는조금 힘들 수 있겠죠 ^^;)
타회원의 글들도 적혀있는 출처를 같이 꼭 기재해주세요
출처 | sejin7940 |
---|
휴지통 기능 사용시, 휴지통 목록은 관리자페이지에서 볼 수 있는데
해당 휴지통의 글 내용을 확인할 방법이 없었다. 복원을 해야만 볼 수 있거나 DB에 직접 접속해서 확인해야만 했는데
휴지통 목록을 클릭시 해당 글의 내용을 확인할 수 있는 trash_view 페이지를 만들었다
이 기능을 Core 에 Full Request 해뒀고
XE 1.7.5.2 부터 정식적으로 Core에 포함된 기능이다. ( Core 내부 소스에도.. 이 부분은 sejin7940 이라고 기록되어있어서 참 묘한 기분 ^^;)
XE 1.7.5.2 이전 버전을 사용하는 경우에..
이 기능을 구현하고파 하는 사람이 있을 수도 있겠다 싶어서... 해당 수정 소스를 공개한다.
휴지통 기능은 상황에 따라서 굉장히 유용하게 쓸 수 있는 기능입니다.
다만, 현재로는 한가지가 부족합니다.
휴지통에 들어간 목록은 확인할 수 있는데, 그 휴지통에 담긴 글의 내용을 확인할 수 있는 방법이 없습니다
확인하려면 복원을 시키거나, DB에 직접 들어가서 살펴봐야하는데.. 두가지 모두 불편하거나 문제가 있는 방법입니다.
따라서, 관리자페이지에서 휴지통목록을 바로 View 할 수 있는 기능이 있어야할듯합니다.
1. 휴지통 내용 보기 기능 추가
1) trash/conf/module.xml 에 추가
<action name="dispTrashAdminView" type="view" />
2) trash/tpl/trash_list.html 에
{$oTrashVO->getTitle()}
부분을 아래걸로 수정
<a href="{getUrl('act','dispTrashAdminView','trash_srl',$oTrashVO->getTrashSrl())}">{$oTrashVO->getTitle()}</a>
3) trash/trash.admin.view.php 에 함수 새로 추가
// Trash View - sejin7940
function dispTrashAdminView() {
$trash_srl = Context::get('trash_srl');
$oTrashModel = getModel('trash');
$output = $oTrashModel->getTrash($trash_srl);
if(!$output->data->getTrashSrl()) return new Object(-1, 'msg_invalid_request');
$originObject = unserialize($output->data->getSerializedObject());
if(is_array($originObject)) $originObject = (object)$originObject;
Context::set('oTrashVO',$output->data);
Context::set('oOrigin',$originObject);
$oMemberModel = &getModel('member');
$remover_info = $oMemberModel->getMemberInfoByMemberSrl($output->data->getRemoverSrl());
Context::set('remover_info', $remover_info);
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($originObject->module_srl);
Context::set('module_info', $module_info);
if($originObject) {
$args_extra->module_srl = $originObject->module_srl;
$args_extra->document_srl = $originObject->document_srl;
$output_extra = executeQueryArray('trash.getDocumentExtraVars', $args_extra);
Context::set('oOriginExtraVars',$output_extra->data);
}
$this->setTemplateFile('trash_view');
}
4) trash/tpl/trash_view.html 파일 새로 추가
<div class="x_page-header">
<h1>{$lang->cmd_trash} {$lang->trash_description}</h1>
</div>
<h2>{$lang->delete_info}</h2>
<table class="x_table x_table-striped x_table-hover">
<col width="120">
<tr>
<th scope="col" class="nowr">{$lang->trasher}</th>
<td>
{htmlspecialchars($remover_info->nick_name)} <a href="#popup_menu_area" class="member_{$oTrashVO->getRemoverSrl()}" onclick="return false">
[{$remover_info->user_id}]</a>
</td>
</tr>
<tr>
<th scope="col" class="nowr">{$lang->trash_date}</th>
<td>{zdate($oTrashVO->getRegdate(), "Y-m-d H:i:s")}</td>
</tr>
<tr>
<th scope="row">{$lang->trash_description}</th>
<td class="text">{$oTrashVO->getDescription()}</td>
</tr>
</table>
<br>
<h2>{$lang->origin_info}</h2>
<table class="x_table x_table-striped x_table-hover">
<col width="120">
<tr>
<th scope="row">{$lang->module}</th>
<td class="text">
{$module_info->browser_title} ({$module_info->mid})
</td>
</tr>
<tr>
<th scope="row">{$lang->title}</th>
<td class="text">{$oOrigin->title}</td>
</tr>
<tr>
<th scope="row">{$lang->writer}</th>
<td class="text">{htmlspecialchars($oOrigin->nick_name)} <a href="#popup_menu_area" class="member_{$oOrigin->member_srl}" onclick="return false">
[{$oOrigin->user_id}]</a></td>
</tr>
<tr>
<th scope="row">{$lang->regdate}</th>
<td class="text">{zdate($oOrigin->regdate,'Y.m.d H:i:s')}</td>
</tr>
<block loop="$oOriginExtraVars=>$key,$val">
<tr><th>{$val->name}</th>
<td>{$val->value}</td>
</tr>
</block>
<tr>
<th scope="row">{$lang->content}</th>
<td class="text">{$oOrigin->content}</td>
</tr>
</table>
<form action="./" method="post">
<input type="hidden" name="module" value="trash" />
<input type="hidden" name="act" value="procTrashAdminEmptyTrash" />
<input type="hidden" name="page" value="{$page}" />
<input type="hidden" name="is_all" value="false" />
<input type="hidden" name="origin_module" value="{$oTrashVO->getOriginModule()}" />
<input type="hidden" name="cart[]" value="{$oTrashVO->getTrashSrl()}" />
<div class="x_pull-left"><button class="x_btn" type="button" onclick="history.go(-1)">{$lang->cmd_list}</button></div>
<div class="x_pull-right">
<button type="submit" name="is_all" class="x_btn" value="false">{$lang->cmd_delete}</button>
<button type="submit" name="act" class="x_btn x_btn-primary" value="procTrashAdminRestore">{$lang->cmd_restore}</button>
</div>
</form>
5. modules/trash/queries/getDocumentextraVars.xml 파일 새로 추가
<query id="getDocumentsExtraVars" action="select">
<tables>
<table name="document_extra_keys" alias="extra_keys" />
<table name="document_extra_vars" alias="extra_vars" type="left join">
<conditions>
<condition operation="equal" column="extra_keys.module_srl" default="extra_vars.module_srl" />
<condition operation="equal" column="extra_keys.eid" default="extra_vars.eid" pipe="and" />
</conditions>
</table>
</tables>
<columns>
<column name="extra_keys.module_srl" alias="module_srl" />
<column name="extra_keys.var_name" alias="name" />
<column name="extra_keys.var_type" alias="type" />
<column name="extra_keys.var_is_required" alias="is_required" />
<column name="extra_keys.var_search" alias="search" />
<column name="extra_keys.var_default" alias="default" />
<column name="extra_keys.var_desc" alias="desc" />
<column name="extra_keys.var_idx" alias="idx" />
<column name="extra_vars.document_srl" alias="document_srl" />
<column name="extra_vars.lang_code" alias="lang_code" />
<column name="extra_vars.value" alias="value" />
<column name="extra_keys.eid" alias="eid" />
</columns>
<conditions>
<condition operation="equal" column="extra_keys.module_srl" var="module_srl" />
<condition operation="in" column="extra_vars.document_srl" var="document_srl" pipe="and" />
</conditions>
<navigation>
<index var="sort_index" default="extra_keys.var_idx" order="asc" />
</navigation>
</query>
6. modules/trash/lang/lang.xml 에 추가
<item name="cmd_restore">
<value xml:lang="ko"><![CDATA[복원]]></value>
<value xml:lang="en"><![CDATA[Restore]]></value>
<value xml:lang="jp"><![CDATA[復元]]></value>
<value xml:lang="zh-TW"><![CDATA[復原]]></value>
</item>
<item name="title">
<value xml:lang="ko"><![CDATA[제목]]></value>
<value xml:lang="en"><![CDATA[Subject]]></value>
<value xml:lang="jp"><![CDATA[タイトル]]></value>
<value xml:lang="zh-TW"><![CDATA[標題]]></value>
</item>
<item name="content">
<value xml:lang="ko"><![CDATA[내용]]></value>
<value xml:lang="en"><![CDATA[Content]]></value>
<value xml:lang="jp"><![CDATA[?容]]></value>
<value xml:lang="zh-TW"><![CDATA[內容]]></value>
</item>
<item name="trasher">
<value xml:lang="ko"><![CDATA[삭제자]]></value>
<value xml:lang="en"><![CDATA[Deleter]]></value>
<value xml:lang="jp"><![CDATA[削除者]]></value>
<value xml:lang="zh-TW"><![CDATA[刪除]]></value>
</item>
<item name="origin_info">
<value xml:lang="ko"><![CDATA[원문 정보]]></value>
<value xml:lang="en"><![CDATA[Document Info]]></value>
</item>
<item name="delete_info">
<value xml:lang="ko"><![CDATA[삭제 정보]]></value>
<value xml:lang="en"><![CDATA[Trash Info]]></value>
</item>