#18953798 : manage mobile layouts

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@7524 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
haneul 2010-06-21 04:54:56 +00:00
parent c797d3a294
commit e6c40ada52
22 changed files with 185 additions and 10 deletions

View file

@ -14,6 +14,9 @@
<action name="dispLayoutAdminLayoutModify" type="view" standalone="true" /> <action name="dispLayoutAdminLayoutModify" type="view" standalone="true" />
<action name="dispLayoutAdminLayoutImageList" type="view" standalone="true" /> <action name="dispLayoutAdminLayoutImageList" type="view" standalone="true" />
<action name="dispLayoutAdminMobileContent" type="view" standalone="true" />
<action name="dispLayoutAdminDownloadedMobileList" type="view" standalone="true" />
<action name="procLayoutAdminInsert" type="controller" standalone="true" /> <action name="procLayoutAdminInsert" type="controller" standalone="true" />
<action name="procLayoutAdminUpdate" type="controller" standalone="true" /> <action name="procLayoutAdminUpdate" type="controller" standalone="true" />

View file

@ -110,4 +110,7 @@
'attribute' => 'You can set background color/image to every area except widget, and font color(include <a> tag).', 'attribute' => 'You can set background color/image to every area except widget, and font color(include <a> tag).',
); );
$lang->mobile_layout_list = "Mobile Layout List";
$lang->mobile_downloaded_list = "Downloaded Mobile Layouts";
?> ?>

View file

@ -109,4 +109,6 @@
'attribute' => '위젯을 제외한 각 영역들은 모두 배경 색/ 이미지를 지정할 수 있고 글자색(a 태그 포함됨)을 정할 수 있습니다.', 'attribute' => '위젯을 제외한 각 영역들은 모두 배경 색/ 이미지를 지정할 수 있고 글자색(a 태그 포함됨)을 정할 수 있습니다.',
); );
$lang->mobile_layout_list = "Mobile Layout List";
$lang->mobile_downloaded_list = "Downloaded Mobile Layouts";
?> ?>

View file

@ -109,4 +109,6 @@
'attribute' => '위젯을 제외한 각 영역들은 모두 배경 색/ 이미지를 지정할 수 있고 글자색(a 태그 포함됨)을 정할 수 있습니다.', 'attribute' => '위젯을 제외한 각 영역들은 모두 배경 색/ 이미지를 지정할 수 있고 글자색(a 태그 포함됨)을 정할 수 있습니다.',
); );
$lang->mobile_layout_list = "Mobile Layout List";
$lang->mobile_downloaded_list = "Downloaded Mobile Layouts";
?> ?>

View file

@ -110,4 +110,6 @@
'attribute' => 'ウィジェットを除いた各領域はすべて背景の色・イメージ・文字のテキスト色(「a」タグを含む)の指定が可能です。', 'attribute' => 'ウィジェットを除いた各領域はすべて背景の色・イメージ・文字のテキスト色(「a」タグを含む)の指定が可能です。',
); );
$lang->mobile_layout_list = "Mobile Layout List";
$lang->mobile_downloaded_list = "Downloaded Mobile Layouts";
?> ?>

View file

@ -110,4 +110,7 @@
'attribute' => '위젯을 제외한 각 영역들은 모두 배경 색/ 이미지를 지정할 수 있고 글자색(a 태그 포함됨)을 정할 수 있습니다.', 'attribute' => '위젯을 제외한 각 영역들은 모두 배경 색/ 이미지를 지정할 수 있고 글자색(a 태그 포함됨)을 정할 수 있습니다.',
); );
$lang->mobile_layout_list = "모바일 레이아웃 목록";
$lang->mobile_downloaded_list = "모바일 다운로드 목록";
?> ?>

View file

@ -110,4 +110,6 @@
'attribute' => 'You can set background color/image to every area except widget, and font color(include <a> tag).', 'attribute' => 'You can set background color/image to every area except widget, and font color(include <a> tag).',
); );
$lang->mobile_layout_list = "Mobile Layout List";
$lang->mobile_downloaded_list = "Downloaded Mobile Layouts";
?> ?>

View file

@ -112,4 +112,6 @@
'attribute' => 'Bạn có thể đặt màu nền / hình nền tới mọi khu vực trừ Widget, và màu chữ (bao gồm cả Tag).', 'attribute' => 'Bạn có thể đặt màu nền / hình nền tới mọi khu vực trừ Widget, và màu chữ (bao gồm cả Tag).',
); );
$lang->mobile_layout_list = "Mobile Layout List";
$lang->mobile_downloaded_list = "Downloaded Mobile Layouts";
?> ?>

View file

@ -110,4 +110,6 @@
'attribute' => '除控件之外的各个区域都可以对其指定背景色/背景图片及字体颜色(包括a标签)。', 'attribute' => '除控件之外的各个区域都可以对其指定背景色/背景图片及字体颜色(包括a标签)。',
); );
$lang->mobile_layout_list = "Mobile Layout List";
$lang->mobile_downloaded_list = "Downloaded Mobile Layouts";
?> ?>

View file

@ -110,4 +110,6 @@
'attribute' => '除了Widget以外的各個區域都可以指定背景顏色/圖片及文字顏色(包含a標籤)。', 'attribute' => '除了Widget以外的各個區域都可以指定背景顏色/圖片及文字顏色(包含a標籤)。',
); );
$lang->mobile_layout_list = "Mobile Layout List";
$lang->mobile_downloaded_list = "Downloaded Mobile Layouts";
?> ?>

View file

@ -24,6 +24,8 @@
$args->layout_srl = getNextSequence(); $args->layout_srl = getNextSequence();
$args->layout = Context::get('layout'); $args->layout = Context::get('layout');
$args->title = Context::get('title'); $args->title = Context::get('title');
$args->layout_type = Context::get('layout_type');
if(!$args->layout_type) $args->layout_type = "P";
// DB 입력 // DB 입력
$output = $this->insertLayout($args); $output = $this->insertLayout($args);

View file

@ -25,6 +25,15 @@
$this->setTemplateFile('index'); $this->setTemplateFile('index');
} }
function dispLayoutAdminMobileContent() {
$oLayoutModel = &getModel('layout');
$layout_list = $oLayoutModel->getLayoutList(0, "M");
Context::set('layout_list', $layout_list);
$this->setTemplateFile('mindex');
}
/** /**
* @brief 레이아웃 등록 페이지 * @brief 레이아웃 등록 페이지
* 1차적으로 레이아웃만 선택한 DB 값을 넣고 상세 설정하는 단계를 거침 * 1차적으로 레이아웃만 선택한 DB 값을 넣고 상세 설정하는 단계를 거침
@ -32,7 +41,8 @@
function dispLayoutAdminInsert() { function dispLayoutAdminInsert() {
// 레이아웃 목록을 세팅 // 레이아웃 목록을 세팅
$oLayoutModel = &getModel('layout'); $oLayoutModel = &getModel('layout');
$layout_list = $oLayoutModel->getDownloadedLayoutList(); $layout_type = Context::get('layout_type');
$layout_list = $oLayoutModel->getDownloadedLayoutList($layout_type);
Context::set('layout_list', $layout_list); Context::set('layout_list', $layout_list);
$this->setTemplateFile('insert_layout'); $this->setTemplateFile('insert_layout');
@ -128,6 +138,15 @@
$this->setTemplateFile('downloaded_layout_list'); $this->setTemplateFile('downloaded_layout_list');
} }
function dispLayoutAdminDownloadedMobileList() {
// 레이아웃 목록을 세팅
$oLayoutModel = &getModel('layout');
$layout_list = $oLayoutModel->getDownloadedLayoutList(0, "M");
Context::set('layout_list', $layout_list);
$this->setTemplateFile('downloaded_mlayout_list');
}
/** /**
* @brief 레이아웃 미리 보기 * @brief 레이아웃 미리 보기
**/ **/

View file

@ -33,6 +33,8 @@
if(preg_match('/([0-9]+)\.html/i',$filename)) return true; if(preg_match('/([0-9]+)\.html/i',$filename)) return true;
} }
if(!$oDB->isColumnExists('layouts', 'layout_type')) return true;
return false; return false;
} }
@ -61,6 +63,10 @@
@unlink('./files/cache/layout/'.$filename); @unlink('./files/cache/layout/'.$filename);
} }
if(!$oDB->isColumnExists('layouts', 'layout_type')) {
$oDB->addColumn('layouts','layout_type','char',1,'P',true);
}
return new Object(0, 'success_updated'); return new Object(0, 'success_updated');
} }

View file

@ -19,12 +19,13 @@
* @brief DB 생성된 레이아웃의 목록을 구함 * @brief DB 생성된 레이아웃의 목록을 구함
* 생성되었다는 것은 DB에 등록이 되었다는 것을 의미 * 생성되었다는 것은 DB에 등록이 되었다는 것을 의미
**/ **/
function getLayoutList($site_srl = 0) { function getLayoutList($site_srl = 0, $layout_type="P") {
if(!$site_srl) { if(!$site_srl) {
$site_module_info = Context::get('site_module_info'); $site_module_info = Context::get('site_module_info');
$site_srl = (int)$site_module_info->site_srl; $site_srl = (int)$site_module_info->site_srl;
} }
$args->site_srl = $site_srl; $args->site_srl = $site_srl;
$args->layout_type = $layout_type;
$output = executeQuery('layout.getLayoutList', $args); $output = executeQuery('layout.getLayoutList', $args);
if(!$output->data) return; if(!$output->data) return;
if(is_array($output->data)) return $output->data; if(is_array($output->data)) return $output->data;
@ -42,17 +43,21 @@
if(!$output->data) return; if(!$output->data) return;
// layout, extra_vars를 정리한 후 xml 파일 정보를 정리해서 return // layout, extra_vars를 정리한 후 xml 파일 정보를 정리해서 return
$layout_info = $this->getLayoutInfo($layout, $output->data); $layout_info = $this->getLayoutInfo($layout, $output->data, $output->data->layout_type);
return $layout_info; return $layout_info;
} }
/** /**
* @brief 레이아웃의 경로를 구함 * @brief 레이아웃의 경로를 구함
**/ **/
function getLayoutPath($layout_name) { function getLayoutPath($layout_name, $layout_type = "P") {
if($layout_name == 'faceoff'){ if($layout_name == 'faceoff'){
$class_path = './modules/layout/faceoff/'; $class_path = './modules/layout/faceoff/';
}else{ }else if($layout_type == "M") {
$class_path = sprintf("./m.layouts/%s/", $layout_name);
}
else
{
$class_path = sprintf('./layouts/%s/', $layout_name); $class_path = sprintf('./layouts/%s/', $layout_name);
} }
if(is_dir($class_path)) return $class_path; if(is_dir($class_path)) return $class_path;
@ -63,9 +68,18 @@
* @brief 레이아웃의 종류와 정보를 구함 * @brief 레이아웃의 종류와 정보를 구함
* 다운로드되어 있는 레이아웃의 종류 (생성과 다른 의미) * 다운로드되어 있는 레이아웃의 종류 (생성과 다른 의미)
**/ **/
function getDownloadedLayoutList() { function getDownloadedLayoutList($layout_type = "P") {
// 다운받은 레이아웃과 설치된 레이아웃의 목록을 구함 // 다운받은 레이아웃과 설치된 레이아웃의 목록을 구함
$searched_list = FileHandler::readDir('./layouts'); if($layout_type == "M")
{
$directory = "./m.layouts";
}
else
{
$directory = "./layouts";
}
$searched_list = FileHandler::readDir($directory);
$searched_count = count($searched_list); $searched_count = count($searched_list);
if(!$searched_count) return; if(!$searched_count) return;
@ -75,7 +89,7 @@
$layout = $searched_list[$i]; $layout = $searched_list[$i];
// 해당 레이아웃의 정보를 구함 // 해당 레이아웃의 정보를 구함
$layout_info = $this->getLayoutInfo($layout); $layout_info = $this->getLayoutInfo($layout, null, $layout_type);
$list[] = $layout_info; $list[] = $layout_info;
} }
@ -86,7 +100,7 @@
* @brief 모듈의 conf/info.xml 읽어서 정보를 구함 * @brief 모듈의 conf/info.xml 읽어서 정보를 구함
* 이것 역시 캐싱을 통해서 xml parsing 시간을 줄인다.. * 이것 역시 캐싱을 통해서 xml parsing 시간을 줄인다..
**/ **/
function getLayoutInfo($layout, $info = null) { function getLayoutInfo($layout, $info = null, $layout_type = "P") {
if($info) { if($info) {
$layout_title = $info->title; $layout_title = $info->title;
$layout = $info->layout; $layout = $info->layout;
@ -101,7 +115,7 @@
} }
// 요청된 모듈의 경로를 구한다. 없으면 return // 요청된 모듈의 경로를 구한다. 없으면 return
if(!$layout_path) $layout_path = $this->getLayoutPath($layout); if(!$layout_path) $layout_path = $this->getLayoutPath($layout, $layout_type);
if(!is_dir($layout_path)) return; if(!is_dir($layout_path)) return;
// 현재 선택된 모듈의 스킨의 정보 xml 파일을 읽음 // 현재 선택된 모듈의 스킨의 정보 xml 파일을 읽음

View file

@ -7,6 +7,7 @@
</columns> </columns>
<conditions> <conditions>
<condition operation="equal" column="site_srl" var="site_srl" filter="number" default="0" notnull="notnull" /> <condition operation="equal" column="site_srl" var="site_srl" filter="number" default="0" notnull="notnull" />
<condition operation="equal" column="layout_type" var="layout_type" default="P" pipe="and" />
</conditions> </conditions>
<navigation> <navigation>
<index var="sort_index" default="layout_srl" order="desc" /> <index var="sort_index" default="layout_srl" order="desc" />

View file

@ -10,5 +10,6 @@
<column name="module_srl" var="module_srl" /> <column name="module_srl" var="module_srl" />
<column name="layout_path" var="layout_path" /> <column name="layout_path" var="layout_path" />
<column name="regdate" var="regdate" default="curdate()" /> <column name="regdate" var="regdate" default="curdate()" />
<column name="layout_type" var="layout_type" default="P" />
</columns> </columns>
</query> </query>

View file

@ -7,4 +7,5 @@
<column name="layout_path" type="varchar" size="250" /> <column name="layout_path" type="varchar" size="250" />
<column name="module_srl" type="number" size="12" default="0" index="idx_module_srl" /> <column name="module_srl" type="number" size="12" default="0" index="idx_module_srl" />
<column name="regdate" type="date" index="idx_regdate" /> <column name="regdate" type="date" index="idx_regdate" />
<column name="layout_type" type="char" size="1" default="P" />
</table> </table>

View file

@ -0,0 +1,54 @@
<!--#include("header.html")-->
<!-- 레이아웃의 목록 -->
<table cellspacing="0" class="crossTable">
<thead>
<tr>
<th scope="col" class="halfwide"><div>{$lang->layout_name}</div></th>
<th scope="col"><div>{$lang->version}</div></th>
<th scope="col"><div>{$lang->author}</div></th>
<th scope="col"><div>{$lang->menu_count}</div></th>
<th scope="col"><div>{$lang->date}</div></th>
<th scope="col"><div>{$lang->path}</div></th>
<th scope="col"><div>{$lang->cmd_make}</div></th>
</tr>
</thead>
<tbody>
<!--@foreach($layout_list as $key => $val)-->
<!--// 레이아웃 정보 파일(conf/info.xml)가 있는 경우-->
<!--@if($val->title)-->
<tr class="row{$cycle_idx}">
<th rowspan="2">
<div>
<a href="{getUrl('','module','layout','act','dispLayoutAdminInfo','selected_layout',$val->layout)}" onclick="popopen(this.href,'layout_info');return false" class="blue">{$val->title}</a> <br />
({$val->layout})
</div>
</th>
<td>{$val->version}</td>
<td>
<!--@foreach($val->author as $author)-->
<!--@if($author->homepage)--><a href="{$author->homepage}" onclick="window.open(this.href);return false;"><!--@end-->{$author->name}<!--@if($author->homepage)--></a><!--@end-->
<!--@endforeach-->
</td>
<td>{$val->menu_count}</td>
<td>{zdate($val->date, 'Y-m-d')}</td>
<td>{$val->path}</td>
<td><a href="{getUrl('act','dispLayoutAdminInsert','layout',$val->layout,'layout_type','M')}" class="button"><span>{$lang->cmd_make}</span></a></td>
</tr>
<tr>
<td colspan="6" class="left">
{nl2br(trim($val->description))}
</td>
</tr>
<!--// 레이아웃 정보 파일(conf/info.xml)이 없는 경우 -->
<!--@else-->
<tr>
<td colspan="6">{$val->layout}</td>
<td class="tahoma">{$val->path}</td>
<td class="tahoma blue"><a href="{getUrl('act','dispLayoutAdminInsert','layout',$val->layout,'layout_type','M')}">{$lang->cmd_make}</a></td>
</tr>
<!--@end-->
<!--@end-->
</tbody>
</table>

View file

@ -5,6 +5,7 @@
<parameter> <parameter>
<param name="layout" target="layout" /> <param name="layout" target="layout" />
<param name="title" target="title" /> <param name="title" target="title" />
<param name="layout_type" target="layout_type" />
</parameter> </parameter>
<response callback_func="completeInsertLayout"> <response callback_func="completeInsertLayout">
<tag name="error" /> <tag name="error" />

View file

@ -10,6 +10,8 @@
<ul class="localNavigation"> <ul class="localNavigation">
<li <!--@if($act=='dispLayoutAdminContent')-->class="on"<!--@end-->><a href="{getUrl('act','dispLayoutAdminContent')}">{$lang->layout_list}</a></li> <li <!--@if($act=='dispLayoutAdminContent')-->class="on"<!--@end-->><a href="{getUrl('act','dispLayoutAdminContent')}">{$lang->layout_list}</a></li>
<li <!--@if($act=='dispLayoutAdminDownloadedList')-->class="on"<!--@end-->><a href="{getUrl('act','dispLayoutAdminDownloadedList')}">{$lang->downloaded_list}</a></li> <li <!--@if($act=='dispLayoutAdminDownloadedList')-->class="on"<!--@end-->><a href="{getUrl('act','dispLayoutAdminDownloadedList')}">{$lang->downloaded_list}</a></li>
<li <!--@if($act=='dispLayoutAdminMobileContent')-->class="on"<!--@end-->><a href="{getUrl('act','dispLayoutAdminMobileContent')}">{$lang->mobile_layout_list}</a></li>
<li <!--@if($act=='dispLayoutAdminDownloadedMobileList')-->class="on"<!--@end-->><a href="{getUrl('act','dispLayoutAdminDownloadedMobileList')}">{$lang->mobile_downloaded_list}</a></li>
</ul> </ul>
</div> </div>
<!--@end--> <!--@end-->

View file

@ -3,6 +3,7 @@
<!--#include("header.html")--> <!--#include("header.html")-->
<form action="./" method="get" onsubmit="return procFilter(this, insert_layout)"> <form action="./" method="get" onsubmit="return procFilter(this, insert_layout)">
<input type="hidden" name="layout_type" value="{$layout_type}" />
<table cellspacing="0" class="rowTable"> <table cellspacing="0" class="rowTable">
<tr> <tr>

View file

@ -0,0 +1,50 @@
<!--%import("filter/delete_layout.xml")-->
<!--#include("header.html")-->
<!-- 삭제를 위한 임시 form -->
<form id="fo_layout" action="./" method="get" onsubmit="return procFilter(this, delete_layout)">
<input type="hidden" name="layout_srl" value="" />
</form>
<!-- 목록 -->
<table cellspacing="0" class="crossTable">
<thead>
<tr>
<th scope="col"><div>{$lang->no}</div></th>
<th scope="col"><div>{$lang->layout}</div></th>
<th scope="col"><div>{$lang->title}</div></th>
<th scope="col"><div>{$lang->regdate}</div></th>
<th scope="col" colspan="3"><div>&nbsp;</div></th>
</tr>
</thead>
<tbody>
<!--@foreach($layout_list as $no => $val)-->
<tr class="row{$cycle_idx}">
<td class="number center">{$no+1}</td>
<td>
{$val->layout}
<!--@if($val->module_srl)-->
(module)
<!--@end-->
</td>
<td class="wide">{htmlspecialchars($val->title)}</td>
<td class="nowrap">{zdate($val->regdate,"Y-m-d")}</td>
<td>
<!--@if(!$val->module_srl)-->
<a href="{getUrl('act','dispLayoutAdminModify','layout_srl',$val->layout_srl)}" title="{htmlspecialchars($lang->cmd_layout_management)}" class="buttonSet buttonSetting"><span>{$lang->cmd_layout_management}</span></a>
<!--@else-->
&nbsp;
<!--@end-->
</td>
<td><a href="{getUrl('act','dispLayoutAdminEdit','layout_srl',$val->layout_srl)}" title="{htmlspecialchars($lang->cmd_layout_edit)}" class="buttonSet buttonLayoutEditor"><span>{$lang->cmd_layout_edit}</span></a></td>
<td><a href="#" onclick="doDeleteLayout('{$val->layout_srl}');return false;" title="{htmlspecialchars($lang->cmd_delete)}" class="buttonSet buttonDelete"><span>{$lang->cmd_delete}</span></a></td>
</tr>
<!--@end-->
<tr class="row2">
<th colspan="7" class="button">
<a href="{getUrl('act','dispLayoutAdminInsert','layout_srl','','layout_type','M')}" class="button black strong"><span>{$lang->cmd_make}</span></a>
</th>
</tr>
</tbody>
</table>