merge from 1.7.3.5(r13153:r13167)

git-svn-id: http://xe-core.googlecode.com/svn/trunk@13168 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ngleader 2013-09-29 23:32:39 +00:00
parent cc47d2b247
commit 2d3f149b5a
2042 changed files with 129266 additions and 126243 deletions

View file

@ -9,7 +9,7 @@
<title xml:lang="ru">Лейаут</title>
<title xml:lang="zh-TW">版面設計</title>
<title xml:lang="tr">Yerleşim Düzeni</title>
<description xml:lang="ko">레이아웃을 생성/관리하는 모듈입니다.</description>
<description xml:lang="ko">레이아웃을 생성/관리니다.</description>
<description xml:lang="zh-CN">生成/管理布局的模块。</description>
<description xml:lang="jp">レイアウトを生成・管理するモジュールです。</description>
<description xml:lang="en">This module is for creating/managing the layouts.</description>

View file

@ -18,7 +18,12 @@
<action name="dispLayoutAdminEdit" type="view" menu_name="installedLayout" />
<action name="dispLayoutAdminCopyLayout" type="view" />
<action name="getLayoutAdminSetInfoView" type="model" />
<action name="getLayoutAdminSetHTMLCSS" type="model" />
<action name="getLayoutAdminSiteDefaultLayout" type="model" />
<action name="dispLayoutPreview" type="view" />
<action name="dispLayoutPreviewWithModule" type="view" />
<action name="procLayoutAdminUpdate" type="controller" ruleset="updateLayout" />
<action name="procLayoutAdminCodeUpdate" type="controller" ruleset="codeUpdate" />
@ -37,6 +42,8 @@
<action name="procLayoutAdminUserLayoutImport" type="controller" standalone="true" ruleset="userLayoutImport" />
<action name="procLayoutAdminCopyLayout" type="controller" standalone="true" />
<action name="getLayoutInstanceListForJSONP" type="model" />
</actions>
<menus>
<menu name="installedLayout">

View file

@ -122,6 +122,10 @@
<value xml:lang="tr"><![CDATA[İndirme Listesi]]></value>
<value xml:lang="vi"><![CDATA[Danh sách Download]]></value>
</item>
<item name="sitemap_with_homemenu">
<value xml:lang="ko"><![CDATA[시작메뉴가 있는 사이트맵]]></value>
<value xml:lang="en"><![CDATA[Sitemap with Home menu]]></value>
</item>
<item name="layout_preview_content">
<value xml:lang="ko"><![CDATA[내용이 출력되는 부분입니다.]]></value>
<value xml:lang="en"><![CDATA[The content gets displayed here.]]></value>
@ -134,6 +138,10 @@
<value xml:lang="tr"><![CDATA[Burada görüntülenecek içerikler]]></value>
<value xml:lang="vi"><![CDATA[Khu vực nội dung sẽ hiển thị.]]></value>
</item>
<item name="not_support_layout_preview">
<value xml:lang="ko"><![CDATA[스킨적용 미리보기를 지원하지 않습니다.]]></value>
<value xml:lang="en"><![CDATA[Skin preview not available.]]></value>
</item>
<item name="not_apply_menu">
<value xml:lang="ko"><![CDATA[레이아웃 일괄 적용]]></value>
<value xml:lang="en"><![CDATA[Apply Layouts En Bloc]]></value>
@ -171,8 +179,8 @@
<value xml:lang="vi"><![CDATA[Danh sách đã Download]]></value>
</item>
<item name="about_title">
<value xml:lang="ko"><![CDATA[모듈에 연결 시 쉽게 구분할 수 있는 제목을 입력해주세요.]]></value>
<value xml:lang="en"><![CDATA[Please enter the title that is easy to verify when connecting to the module]]></value>
<value xml:lang="ko"><![CDATA[페이지에 연결 시 쉽게 구분할 수 있는 제목을 입력해주세요.]]></value>
<value xml:lang="en"><![CDATA[Please enter the title that is easy to verify when connecting to the page]]></value>
<value xml:lang="jp"><![CDATA[モジュールとの連動をわかりやすく区分するためのタイトルを入力してください。]]></value>
<value xml:lang="zh-CN"><![CDATA[请输入连接模块时容易区分的标题。]]></value>
<value xml:lang="zh-TW"><![CDATA[連結模組時,請輸入容易區分的標題。]]></value>
@ -183,8 +191,8 @@
<value xml:lang="vi"><![CDATA[Xin hãy nhập tiêu đề của giao diện cho dễ dàng lựa chọn về sau.]]></value>
</item>
<item name="about_not_apply_menu">
<value xml:lang="ko"><![CDATA[체크하시면 연결된 모든 메뉴의 모듈 레이아웃을 일괄 변경합니다.]]></value>
<value xml:lang="en"><![CDATA[Layouts of all modules connected via menu will be changed en bloc by checking this option.]]></value>
<value xml:lang="ko"><![CDATA[체크하면 연결된 모든 메뉴의 페이지 레이아웃을 일괄 변경합니다.]]></value>
<value xml:lang="en"><![CDATA[Layouts of all pages connected via menu will be changed en bloc by checking this option.]]></value>
<value xml:lang="jp"><![CDATA[チェックを入れると連動するすべてのメニューのモジュールのレイアウトを一括変更します。]]></value>
<value xml:lang="zh-CN"><![CDATA[勾选表示连接到此布局的菜单项全部采用此布局。]]></value>
<value xml:lang="zh-TW"><![CDATA[更新所有被連結到選單的版面模組。]]></value>
@ -195,7 +203,7 @@
<value xml:lang="vi"><![CDATA[Nếu chọn, tất cả các giao diện đang sử dụng sẽ được thay đổi thành giao diện này.]]></value>
</item>
<item name="about_layout">
<value xml:lang="ko"><![CDATA[레이아웃 모듈은 사이트의 레이아웃을 쉽게 만들 수 있도록 도와줍니다. 레이아웃 설정과 메뉴의 연결을 통해서 다양한 모듈이 완성된 사이트의 모습으로 보여줄 수 있도록 합니다. 삭제나 수정이 불가능한 레이아웃은 블로그나 기타 모듈의 자체 레이아웃이므로 해당 모듈로 가서 설정하셔야 합니다.]]></value>
<value xml:lang="ko"><![CDATA[사이트의 레이아웃을 쉽게 만들 수 있도록 도와줍니다. 레이아웃 설정과 메뉴의 연결을 통해서 완성된 사이트의 모습으로 보여줄 수 있도록 합니다. 삭제나 수정이 불가능한 레이아웃은 페이지에 포함된 레이아웃이므로 해당 페이지에서 설정해야 합니다.]]></value>
<value xml:lang="en"><![CDATA[Layout module helps you create the site's layout easily. By using layout setting and menu connection, website's completed shape will be displayed with various modules. Layouts which you cannot delete are the default layouts of blogs or other moduels, thus you have to delete them from their setting pages.]]></value>
<value xml:lang="jp"><![CDATA[レイアウトのモジュールはサイトのレイアウトを分かりやすく作成できるようにします。 レイアウトの設定とメニューのリンクで様々なモジュールで完成されたサイト構築ができます。 ブログまたは他のモジュールのレイアウトなどの削除・修正ができないレイアウトは、該当モジュールにて設定を行ってください。]]></value>
<value xml:lang="zh-CN"><![CDATA[布局模块使网站制作变得更简单。 通过布局设置及菜单的链接,可以轻松制作以多种模块组成的完整网站。 无法删除和修改的布局可能是博客或其他模块自带的模板,因此应到相关模块进行设置。]]></value>
@ -209,35 +217,16 @@
</item>
<item name="about_layout_code">
<value xml:lang="ko"><![CDATA[아래 레이아웃의 코드를 직접 수정 후 저장하시면 서비스에 반영이 됩니다.
꼭 미리보기를 하신 후에 저장을 하세요.
XE의 템플릿 문법은 <a href="#" onclick="winopen('http://code.google.com/p/xe-core/wiki/TemplateSyntax');return false;">XE 템플릿</a> 을 참고하시면 됩니다.]]></value>
<value xml:lang="en"><![CDATA[It will be applied to the service when you save the layout code after editing it.
Please first preview your code and then save it.
You can refer grammar of XE's template from <a href="#" onclick="winopen('http://code.google.com/p/xe-core/wiki/TemplateSyntax');return false;">XE Template</a>.]]></value>
<value xml:lang="jp"><![CDATA[下のレイアウトコードを修正し、保存するとサービスに反映されます。
必ずプレビューで確認してから保存してください。
XEのテンプレート文法は<a href="#" onclick="winopen('http://code.google.com/p/xe-core/wiki/TemplateSyntax');return false;">XEテンプレート</a>を参考してください。]]></value>
<value xml:lang="zh-CN"><![CDATA[修改的布局代码保存后即可生效。
保存之前请必须先预览后再保存。
XE布局语法请参考<strong><a href="#" onclick="winopen('http://code.google.com/p/xe-core/wiki/TemplateSyntax');return false;">XE模板</a></strong>。]]></value>
<value xml:lang="zh-TW"><![CDATA[儲存修改後的版面,即可生效。 儲存之前,請先預覽後再儲存。
XE 版面設計語法,請參考 <a href="#" onclick="winopen('http://code.google.com/p/xe-core/wiki/TemplateSyntax');return false;">XE 樣版</a>。]]></value>
<value xml:lang="fr"><![CDATA[Vous conservez la code de Mise en Page après l'éditer, la code sera appliquée sur le service.
Utilisez [Avant-première] avant conserver la code S.V.P.
Vous pouvez référer la grammaire de modèle de XE sur <a href="#" onclick="winopen('http://code.google.com/p/xe-core/wiki/TemplateSyntax');return false;">Modèle du XE</a>.]]></value>
<value xml:lang="ru"><![CDATA[Применения к службе будут проиведены, когда Вы сохраните код лейаут после редактирование.
Пожалуйста, сначала используйте предпросмотр кода и затем сохраните его.
Вы можете обратиться к грамматике шаблонов XE с <a href="#" onclick="winopen('http://code.google.com/p/xe-core/wiki/TemplateSyntax');return false;">XE Template</a>.]]></value>
<value xml:lang="es"><![CDATA[El diseño sera aplicado al servicio cuando usted guarda el código del diseño luego de haber editado.
Primero visualiza previamente tus códigos y luego guardalos
Referente al código de planillas de XE dirijirse a<a href="#" onclick="winopen('http://code.google.com/p/xe-core/wiki/TemplateSyntax');return false;">XE Pamphlet(Ingles)</a> ]]></value>
<value xml:lang="tr"><![CDATA[Yerleşim düzeni kodunu düzenledikten sonra kaydettiğinizde, hizmete girecektir.
Lütfen önce kodunuzun önizlemesini yapın ve sonra kaydedin.
XE'nin şablolunu örnek alabilirsiniz : <a href="#" onclick="winopen('http://code.google.com/p/xe-core/wiki/TemplateSyntax');return false;">XE Template</a>.]]></value>
<value xml:lang="vi"><![CDATA[Nó sẽ được áp dụng vào Website ngay khi bạn bấm '<b>Lưu</b>' sau khi sửa đổi.
Hãy bấm '<b>Xem trước</b>' trước khi bấm '<b>Lưu</b>'.
Bạn có thể tham khảo cách sửa giao diện tại <a href="#" onclick="winopen('http://code.google.com/p/xe-core/wiki/TemplateSyntax');return false;"><b>XE Template</b></a>.]]></value>
<value xml:lang="ko"><![CDATA[아래 레이아웃의 코드를 직접 수정 후 저장하면 서비스에 반영이 됩니다. 꼭 미리보기를 한 후에 저장을 하세요. XE의 템플릿 문법은 <a href="http://code.google.com/p/xe-core/wiki/TemplateSyntax" target="_blank">XE 템플릿</a> 을 참고하면 됩니다.]]></value>
<value xml:lang="en"><![CDATA[It will be applied to the service when you save the layout code after editing it. Please first preview your code and then save it. You can refer grammar of XE's template from <a href="http://code.google.com/p/xe-core/wiki/TemplateSyntax" target="_blank">XE Template</a>.]]></value>
<value xml:lang="jp"><![CDATA[下のレイアウトコードを修正し、保存するとサービスに反映されます。必ずプレビューで確認してから保存してください。XEのテンプレート文法は<a href="http://code.google.com/p/xe-core/wiki/TemplateSyntax" target="_blank">XEテンプレート</a>を参考してください。]]></value>
<value xml:lang="zh-CN"><![CDATA[修改的布局代码保存后即可生效。保存之前请必须先预览后再保存。XE布局语法请参考<strong><a href="http://code.google.com/p/xe-core/wiki/TemplateSyntax" target="_blank">XE模板</a></strong>。]]></value>
<value xml:lang="zh-TW"><![CDATA[儲存修改後的版面,即可生效。 儲存之前,請先預覽後再儲存。 XE 版面設計語法,請參考 <a href="http://code.google.com/p/xe-core/wiki/TemplateSyntax" target="_blank">XE 樣版</a>。]]></value>
<value xml:lang="fr"><![CDATA[Vous conservez la code de Mise en Page après l'éditer, la code sera appliquée sur le service. Utilisez [Avant-première] avant conserver la code S.V.P. Vous pouvez référer la grammaire de modèle de XE sur <a href="http://code.google.com/p/xe-core/wiki/TemplateSyntax" target="_blank">Modèle du XE</a>.]]></value>
<value xml:lang="ru"><![CDATA[Применения к службе будут проиведены, когда Вы сохраните код лейаут после редактирование. Пожалуйста, сначала используйте предпросмотр кода и затем сохраните его. Вы можете обратиться к грамматике шаблонов XE с <a href="http://code.google.com/p/xe-core/wiki/TemplateSyntax" target="_blank">XE Template</a>.]]></value>
<value xml:lang="es"><![CDATA[El diseño sera aplicado al servicio cuando usted guarda el código del diseño luego de haber editado. Primero visualiza previamente tus códigos y luego guardalos. Referente al código de planillas de XE dirijirse a<a href="http://code.google.com/p/xe-core/wiki/TemplateSyntax" target="_blank">XE Pamphlet(Ingles)</a> ]]></value>
<value xml:lang="tr"><![CDATA[Yerleşim düzeni kodunu düzenledikten sonra kaydettiğinizde, hizmete girecektir. Lütfen önce kodunuzun önizlemesini yapın ve sonra kaydedin. XE'nin şablolunu örnek alabilirsiniz : <a href="http://code.google.com/p/xe-core/wiki/TemplateSyntax" target="_blank">XE Template</a>.]]></value>
<value xml:lang="vi"><![CDATA[Nó sẽ được áp dụng vào Website ngay khi bạn bấm '<b>Lưu</b>' sau khi sửa đổi. Hãy bấm '<b>Xem trước</b>' trước khi bấm '<b>Lưu</b>'. Bạn có thể tham khảo cách sửa giao diện tại <a href="http://code.google.com/p/xe-core/wiki/TemplateSyntax" target="_blank"><b>XE Template</b></a>.]]></value>
</item>
<item name="layout_export">
<value xml:lang="ko"><![CDATA[내보내기]]></value>
@ -277,14 +266,14 @@
<value xml:lang="vi"><![CDATA[Nhập vào]]></value>
</item>
<item name="about_layout_import">
<value xml:lang="ko"><![CDATA[가져오기를 할 경우 기존에 수정된 레이아웃은 삭제됩니다. 가져오기를 하기 전에 내보내기를 통해 백업을 하시기 바랍니다.]]></value>
<value xml:lang="ko"><![CDATA[가져오기를 할 경우 기존에 수정된 레이아웃은 삭제됩니다. 가져오기를 하기 전에 내보내기를 통해 백업을 하세요.]]></value>
<value xml:lang="en"><![CDATA[Previously modified layout will be deleted when you import a new one. Please export the current layout for a backup before importing a new one.]]></value>
<value xml:lang="jp"><![CDATA[インポートする場合、既存の修正されたレイアウトを上書きします。インポート前にエクスポートでバックアップすることをお勧めします。]]></value>
<value xml:lang="zh-CN"><![CDATA[导入之前请利用<strong>导出功能</strong>备份好当前的布局及设置,因为导入会删除当前的布局及设置。]]></value>
<value xml:lang="zh-TW"><![CDATA[版面匯入時,將會刪除目前的版面設置。 版面匯入前,請先匯出備份目前的版面設置。]]></value>
<value xml:lang="fr"><![CDATA[가져오기를 할 경우 기존 수정된 레이아웃을 삭제가 됩니다. 가져오기를 하기전에 내보내기를 통해 백업을 하시기 바랍니다.]]></value>
<value xml:lang="fr"><![CDATA[가져오기를 할 경우 기존 수정된 레이아웃을 삭제가 됩니다. 가져오기를 하기전에 내보내기를 통해 백업을 하세요.]]></value>
<value xml:lang="ru"><![CDATA[Original layout will be deleted when you import. Please export current layout before importing.]]></value>
<value xml:lang="es"><![CDATA[가져오기를 할 경우 기존 수정된 레이아웃을 삭제가 됩니다. 가져오기를 하기전에 내보내기를 통해 백업을 하시기 바랍니다.]]></value>
<value xml:lang="es"><![CDATA[가져오기를 할 경우 기존 수정된 레이아웃을 삭제가 됩니다. 가져오기를 하기전에 내보내기를 통해 백업을 하세요.]]></value>
<value xml:lang="tr"><![CDATA[İçe yeni bir yerleşim düzeni aktarmanız durumunda, önceden değiştirdiğiniz yerleşim düzeni silinecektir. Lütfen içe aktarım yapmadan önce, mevcut yerleşim düzeninin yedeğini almış olmak için dışa aktarınız.]]></value>
<value xml:lang="vi"><![CDATA[Giao diện nguyên bản sẽ bị xóa khi bạn nhập vào. Hãy xuất ra để lưu giao diện hiện thời trước khi nhập vào.]]></value>
</item>
@ -845,7 +834,7 @@
<value xml:lang="vi"><![CDATA[Nơi chứa giao diện]]></value>
</item>
<item name="about_layout_image_repository">
<value xml:lang="ko"><![CDATA[선택 레이아웃에 사용될 이미지/플래시파일 등을 올릴 수 있습니다. 내보내기에 같이 포함 됩니다.]]></value>
<value xml:lang="ko"><![CDATA[선택 레이아웃에 사용될 이미지/플래시파일 등을 올릴 수 있습니다. 내보내기에 같이 포함 됩니다.]]></value>
<value xml:lang="en"><![CDATA[You can upload image/flash files for the selected layout. They will be included in exports.]]></value>
<value xml:lang="jp"><![CDATA[選択したレイアウトに使う画像・Flashファイル等のアップロードできます。また、エクスポートする際、一緒に含まれます。]]></value>
<value xml:lang="zh-CN"><![CDATA[可以上传要在所选布局中使用的图片/FLASH文件(导出时包含此库文件)。]]></value>
@ -910,24 +899,24 @@
<value xml:lang="vi"><![CDATA[Quản lý giao diện XpressEngine FaceOff]]></value>
</item>
<item name="description">
<value xml:lang="ko"><![CDATA[FaceOff Layout관리자로 웹상에서 쉽게 레이아웃을 꾸밀 수 있습니다.<br/>아래 그림을 보고 구성요소와 기능을 이용하여 원하는 레이아웃을 만드세요.]]></value>
<value xml:lang="ko"><![CDATA[FaceOff Layout관리자로 웹상에서 쉽게 레이아웃을 꾸밀 수 있습니다.<br/>아래 그림을 보고 구성요소와 기능을 이용하여 원하는 레이아웃을 만드세요.]]></value>
<value xml:lang="en"><![CDATA[FaceOff Layout Manager willl help you design layout on the web easily.<br/>Please design your own layout with components and functions as shown below.]]></value>
<value xml:lang="jp"><![CDATA[FaceOffレイアウト管理ツールでウェブ上で、かんたんにレイアウトを変更することができます。 下の図を参照しながら構成要素と機能を理解し、自由にレイアウトをカスタマイズしてみてください。]]></value>
<value xml:lang="zh-CN"><![CDATA[利用FaceOff布局管理工具可以在线随意布置您的布局。<br/>请仔细查看下面的布局示意图和功能简介后,尽情发挥吧!<br/>FaceOff的布局示意图如下]]></value>
<value xml:lang="zh-TW"><![CDATA[FaceOff Layout 版面管理者,可方便地在線上修改與設計版面。<br/>下圖為版面架構示意圖和功能簡介,瞭解後發揮創意製作出自己想要的版面吧!]]></value>
<value xml:lang="fr"><![CDATA[FaceOff Layout관리자는 웹상에서 쉽게 레이아웃을 꾸밀 수 있습니다.<br/>아래 그림을 보고 구성요소와 기능을 이용하여 원하는 레이아웃을 만드세요]]></value>
<value xml:lang="es"><![CDATA[FaceOff Layout관리자는 웹상에서 쉽게 레이아웃을 꾸밀 수 있습니다.<br/>아래 그림을 보고 구성요소와 기능을 이용하여 원하는 레이아웃을 만드세요]]></value>
<value xml:lang="fr"><![CDATA[FaceOff Layout관리자는 웹상에서 쉽게 레이아웃을 꾸밀 수 있습니다.<br/>아래 그림을 보고 구성요소와 기능을 이용하여 원하는 레이아웃을 만드세요]]></value>
<value xml:lang="es"><![CDATA[FaceOff Layout관리자는 웹상에서 쉽게 레이아웃을 꾸밀 수 있습니다.<br/>아래 그림을 보고 구성요소와 기능을 이용하여 원하는 레이아웃을 만드세요]]></value>
<value xml:lang="tr"><![CDATA[FaceOff Yerleşim Düzeni Yöneticisi, tarayıcınızı kullanarak kolayca yerleşim düzenini tasarlamanıza yardımcı olacaktır.<br/>Lütfen kendi yerleşim düzeninize, aşağıda da gösterildiği gibi, bileşenler ve özellikler tasarlayınız.]]></value>
<value xml:lang="vi"><![CDATA[Quản lý giao diện FaceOff sẽ giúp bạn tao ra một giao diện cho riêng mình một cách dễ dàng.<br/>Xin hãy thiết kế giao diện của mình với những thành phần và những chức năng hiển thị phía dưới.]]></value>
</item>
<item name="layout">
<value xml:lang="ko"><![CDATA[FaceOff는 위와 같은 HTML 구조로 되어 있습니다.<br/>이 구조에서 CSS를 이용하여 형태/배열/정렬을 할 수 있고 또 Style을 이용하여 꾸밀 수 있습니다.<br/>위젯 추가는 Extension(e1, e2)과 Neck, Knee에서 가능합니다.<br/>이 외 Body, Layout, Header, Body, Footer는 Style을 꾸밀 수 있고 Content는 모듈의 내용이 출력됩니다.]]></value>
<value xml:lang="ko"><![CDATA[FaceOff는 위와 같은 HTML 구조로 되어 있습니다.<br/>이 구조에서 CSS를 이용하여 형태/배열/정렬을 할 수 있고 또 Style을 이용하여 꾸밀 수 있습니다.<br/>위젯 추가는 Extension(e1, e2)과 Neck, Knee에서 가능합니다.<br/>이 외 Body, Layout, Header, Body, Footer는 Style을 꾸밀 수 있고 Content는 내용이 출력됩니다.]]></value>
<value xml:lang="en"><![CDATA[FaceOff has HTML structure as above.<br/>You can arrange/align with CSS, or use Style to design.<br/>You can add widget from Extension(e1, e2), Neck and Knee.<br/>Also Body, Layout, Header, Body, Footer can designed by Style, and Content will display content.]]></value>
<value xml:lang="jp"><![CDATA[FaceOffは上記のようなHTML構造になっています。 この構造にてCSSを用いた「レイアウト配列整列」の調整が可能になり、さらにStyleを使った自由なカスタマイズができます。 ウィジェットの追加はExtension(e1、e2)と Neck、 Kneeにて可能です。 その他にもBody、Layout、Header、Body、FooterはStyleをカスタマイズができ、Contentではモジュールの内容が出力されます。]]></value>
<value xml:lang="zh-CN"><![CDATA[根据布局示意图,对其进行宽度/版式/对齐方式的调整。<br/>控件插入区为Extension(e1, e2)区和Neck, Knee区。<br/>另外的Body, Layout, Header, Body, Footer区可以使用Style来进行渲染Content区是内容显示区。]]></value>
<value xml:lang="zh-TW"><![CDATA[FaceOff 的架構和 HTML 相同。<br/>可以使用 CSS 或樣式設計。<br/>可新增 Widget 到 Extension(e1, e2), Neck, Knee 等區域。<br/>另外 Body, Layout, Header, Body, Footer 可以使用樣式設計,而 Content 區域會顯示內容。]]></value>
<value xml:lang="fr"><![CDATA[FaceOff는 위와 같은 HTML 구조로 되어 있습니다.<br/>이 구조에서 CSS를 이용하여 형태/배열/정렬을 할 수 있고 또 Style을 이용하여 꾸밀 수 있습니다.<br/>위젯 추가는 Extension(e1, e2)와 Neck, Knee에서 가능합니다.<br/>이 외 Body, Layout, Header, Body, Footer는 Style을 꾸밀 수 있고 Content는 모듈의 내용이 출력됩니다.]]></value>
<value xml:lang="es"><![CDATA[FaceOff는 위와 같은 HTML 구조로 되어 있습니다.<br/>이 구조에서 CSS를 이용하여 형태/배열/정렬을 할 수 있고 또 Style을 이용하여 꾸밀 수 있습니다.<br/>위젯 추가는 Extension(e1, e2)와 Neck, Knee에서 가능합니다.<br/>이 외 Body, Layout, Header, Body, Footer는 Style을 꾸밀 수 있고 Content는 모듈의 내용이 출력됩니다.]]></value>
<value xml:lang="fr"><![CDATA[FaceOff는 위와 같은 HTML 구조로 되어 있습니다.<br/>이 구조에서 CSS를 이용하여 형태/배열/정렬을 할 수 있고 또 Style을 이용하여 꾸밀 수 있습니다.<br/>위젯 추가는 Extension(e1, e2)와 Neck, Knee에서 가능합니다.<br/>이 외 Body, Layout, Header, Body, Footer는 Style을 꾸밀 수 있고 Content는 내용이 출력됩니다.]]></value>
<value xml:lang="es"><![CDATA[FaceOff는 위와 같은 HTML 구조로 되어 있습니다.<br/>이 구조에서 CSS를 이용하여 형태/배열/정렬을 할 수 있고 또 Style을 이용하여 꾸밀 수 있습니다.<br/>위젯 추가는 Extension(e1, e2)와 Neck, Knee에서 가능합니다.<br/>이 외 Body, Layout, Header, Body, Footer는 Style을 꾸밀 수 있고 Content는 내용이 출력됩니다.]]></value>
<value xml:lang="tr"><![CDATA[FaceOff yukardaki gibi bir HTML yapısına sahiptir.<br/>Tasarlamak için Style kullanabilir ya da CSS ile ayarlayabilirsiniz.<br/>Extension(e1, e2), Neck ve Knee den widget ekleyebilirsiniz.<br/>Aynı zamanda Body, Layout, Header, Body, Footer; Style tarafından tasarlanabilir, ve İçerik, içeriği gösterecektir.]]></value>
<value xml:lang="vi"><![CDATA[FaceOff có cấu trúc HTML như trên.<br/>bạn có thể thu vào hoặc giãn ra với CSS, hay sử dụng kiểu dáng để thiết kế.<br/>Bạn có thể thêm Widget từ phần mở rộng (e1, e2), Neck và Knee.<br/>Ngoài ra Body, Giao diện, Header, Body, Footer có thể được thiết kế theo kích cỡ, và Content sẽ hiển thị nội dung.]]></value>
</item>
@ -944,14 +933,14 @@
<value xml:lang="vi"><![CDATA[Menu phía bên trái.<br/><ul><li>"Lưu lại": là lưu lại những thiết lập hiện tại.</li><li>"Loại bỏ": là bỏ qua những thay đổi hiện tại và trở lại.</li><li>"Thiết lập lại": là xóa bỏ tất cả những thay đổi.</li><li>"Form": đặt Form dạng Cố định, Biến thiên, Cố định+Biến thiên (Nội dung).</li><li>"Thu nhỏ": là thu nhỏ hai phần mở rộng và nội dung.</li><li>"Căn chỉnh" : là sắp xếp sự thẳng hàng.</li></ul>]]></value>
</item>
<item name="hotkey">
<value xml:lang="ko"><![CDATA[마우스로 각 영역을 선택하면서 Hot Key를 이용하시면 더 쉽게 꾸미실 수 있습니다.<br/><ul><li>tab 키 : 위젯이 선택되어 있지 않으면 Header, Body, Footer 순으로 선택됩니다. 위젯이 선택되어 있다면 다음 위젯으로 선택이 이동됩니다.</li><li>Shift + tab키 : tab키와 반대 역할을 합니다.</li><li>Esc : 아무것도 선택되어 있지 않을 때 Esc를 누르면 Neck, Extension(e1,e2),Knee 순서대로 선택이 되며 위젯이 선택되어 있다면 선택된 위젯을 감싸는 영역이 선택됩니다.</li><li>방향키 : 위젯이 선택되어 있을 때 방향키를 이용하여 위젯을 다른 영역으로 이동시킬 수 있습니다.</li></ul>]]></value>
<value xml:lang="ko"><![CDATA[마우스로 각 영역을 선택하면서 Hot Key를 이용하면 더 쉽게 꾸밀 수 있습니다.<br/><ul><li>tab 키 : 위젯이 선택되어 있지 않으면 Header, Body, Footer 순으로 선택됩니다. 위젯이 선택되어 있다면 다음 위젯으로 선택이 이동됩니다.</li><li>Shift + tab키 : tab키와 반대 역할을 합니다.</li><li>Esc : 아무것도 선택되어 있지 않을 때 Esc를 누르면 Neck, Extension(e1,e2),Knee 순서대로 선택이 되며 위젯이 선택되어 있다면 선택된 위젯을 감싸는 영역이 선택됩니다.</li><li>방향키 : 위젯이 선택되어 있을 때 방향키를 이용하여 위젯을 다른 영역으로 이동시킬 수 있습니다.</li></ul>]]></value>
<value xml:lang="en"><![CDATA[You can design your layout more easily with Hot Keys.<br/><ul><li>tab : Unless a widget is selected, Header, Body, Footer will be selected in order. If not, next widget will be selected.</li><li>Shift + tab : It does the opposite function to tab key.</li><li>Esc : If nothing is selected, Neck, Extension(e1,e2), Knee will be selected in order, if a widget is selected, area of the widget will be selected.</li><li>Arrow Key : If a widget is selected, arrow key will move the widget to other areas.</li></ul>]]></value>
<value xml:lang="jp"><![CDATA[マウスを使って各領域を選択しながら、Hot Keyを利用すると、より便利なカスタマイズできます。<br/><ul><li>tabキー : ウィジェットが選択されてない場合、Header、Body、 Footer順に選択されます。ウィジェットが選択されている場合は、次のウィジェットに選択されます。</li><li>Shift + tabキー : tabキーと逆の役割をします。</li><li>Esc : 何も選択されてない場合、Escを押すとNeck、Extension(e1、e2)、Knee順に選択され、また、ウィジェットが選択されている場合は選択されたウィジェットを囲む領域が選択されます。</li><li>矢印 : ウィジェットが選択されている時、矢印キーを用いて、ウィジェットを他の領域に移せます。</li></ul>]]></value>
<value xml:lang="zh-CN"><![CDATA[选取各个区域可以利用鼠标,还可以利用快捷键:<br/><ul><li>tab键 : 当前没有被选取的控件,选取顺序为: Header, Body, Footer已有被选取的控件将选取下一个控件。</li><li>Shift + tab键 : 与tab键作用相反。</li><li>Esc键 : 当前没有被选取的区域,选取顺序为: Neck, Extension(e1,e2),Knee已有被选取的控件将选取包含此控件的区域。</li><li>方向键 : 已有被选取的控件时,可以利用方向键移到别的区域。</li></ul>]]></value>
<value xml:lang="zh-TW"><![CDATA[除了可利用滑鼠選取各區域外,也能使用熱鍵選取:<br/><ul><li>tab鍵 : 當沒有選取 Widget 時,選擇順序是: Header, Footer, Body當有選取 Widget 時,將會選擇下一個。</li><li>Shift + tab 鍵 : 功能和 tab 鍵相反</li><li>Esc 鍵 : 當沒有選擇區域時,選擇順序是: Neck, Extension(e1,e2),Knee當有選擇 Widget 時,將會選則此 Widget 所屬的區域。</li><li>方向鍵 : 當有選擇 Widget 時,可利用方向鍵作移動。</li></ul>]]></value>
<value xml:lang="fr"><![CDATA[마우스로 각 영역을 선택하면서 Hot Key를 이용하시면 더 쉽게 꾸미실 수 있습니다.<br/><ul><li>tab 키 : 위젯이 선택되어 있지 않으면 Header, Body, Footer 순으로 선택됩니다. 위젯이 선택되어 있다면 다음 위젯으로 선택이 이동됩니다.</li><li>Shift + tab키 : tab키와 반대 역할을 합니다.</li><li>Esc : 아무것도 선택되어 있지 않을때 Esc를 누르면 Neck, Extension(e1,e2),Knee 순서대로 선택이 되며 위젯이 선택되어 있다면 선택된 위젯을 감싸는 영역이 선택됩니다.</li><li>방향키 : 위젯이 선택되어 있을때 방향키를 이용하여 위젯을 다른 영역으로 이동시킬 수 있습니다.</li></ul>]]></value>
<value xml:lang="fr"><![CDATA[마우스로 각 영역을 선택하면서 Hot Key를 이용하면 더 쉽게 꾸밀 수 있습니다.<br/><ul><li>tab 키 : 위젯이 선택되어 있지 않으면 Header, Body, Footer 순으로 선택됩니다. 위젯이 선택되어 있다면 다음 위젯으로 선택이 이동됩니다.</li><li>Shift + tab키 : tab키와 반대 역할을 합니다.</li><li>Esc : 아무것도 선택되어 있지 않을때 Esc를 누르면 Neck, Extension(e1,e2),Knee 순서대로 선택이 되며 위젯이 선택되어 있다면 선택된 위젯을 감싸는 영역이 선택됩니다.</li><li>방향키 : 위젯이 선택되어 있을때 방향키를 이용하여 위젯을 다른 영역으로 이동시킬 수 있습니다.</li></ul>]]></value>
<value xml:lang="ru"><![CDATA[You can design your layout more easily with Hot Keys.<br/><ul><li>tab : Unless a widget is selected, Header, Body, Footer will be selected in order. If not, next widget will be selected.</li><li>Shift + tab : It does the opposite function to tab key.</li><li>Esc : If nothing is selected, Neck, Extension(e1,e2),Knee will be selected in order, if a widget is selected, area of the widget will be selected.</li><li>Arrow Key : If a widget is selected, arrow key will move the widget to other areas.</li></ul>]]></value>
<value xml:lang="es"><![CDATA[마우스로 각 영역을 선택하면서 Hot Key를 이용하시면 더 쉽게 꾸미실 수 있습니다.<br/><ul><li>tab 키 : 위젯이 선택되어 있지 않으면 Header, Body, Footer 순으로 선택됩니다. 위젯이 선택되어 있다면 다음 위젯으로 선택이 이동됩니다.</li><li>Shift + tab키 : tab키와 반대 역할을 합니다.</li><li>Esc : 아무것도 선택되어 있지 않을때 Esc를 누르면 Neck, Extension(e1,e2),Knee 순서대로 선택이 되며 위젯이 선택되어 있다면 선택된 위젯을 감싸는 영역이 선택됩니다.</li><li>방향키 : 위젯이 선택되어 있을때 방향키를 이용하여 위젯을 다른 영역으로 이동시킬 수 있습니다.</li></ul>]]></value>
<value xml:lang="es"><![CDATA[마우스로 각 영역을 선택하면서 Hot Key를 이용하면 더 쉽게 꾸밀 수 있습니다.<br/><ul><li>tab 키 : 위젯이 선택되어 있지 않으면 Header, Body, Footer 순으로 선택됩니다. 위젯이 선택되어 있다면 다음 위젯으로 선택이 이동됩니다.</li><li>Shift + tab키 : tab키와 반대 역할을 합니다.</li><li>Esc : 아무것도 선택되어 있지 않을때 Esc를 누르면 Neck, Extension(e1,e2),Knee 순서대로 선택이 되며 위젯이 선택되어 있다면 선택된 위젯을 감싸는 영역이 선택됩니다.</li><li>방향키 : 위젯이 선택되어 있을때 방향키를 이용하여 위젯을 다른 영역으로 이동시킬 수 있습니다.</li></ul>]]></value>
<value xml:lang="tr"><![CDATA[Yerleşim düzenini kısayol tuşlarıyla daha kolay tasarlayabilirsiniz.<br/><ul><li>sekme tuşu(tab) : Bir widget seçilmedikçe; Header, Body, Footer sırasıyla seçilecektir. Eğer seçilmezse, bir sonraki widget seçilecektir.</li><li>Shift + sekme tuşu : Sekme tuşunun tersi hareket gerçekleştirir.</li><li>Esc : Eğer hiçbir şey seçilmediyse, Neck, Extension(e1,e2),Knee sırasıyla seçilecektir, eğer bir widget seçilmişse, widget alanı seçilecektir.</li><li>Yön Tuşları : Eğer bir widget seçiliyse, yön tuşları widget uygulanan yönlere hareket ettirecektir</li></ul>]]></value>
<value xml:lang="vi"><![CDATA[Bạn có thể thiết kế giao diện của mình dễ dàng hơn nữa với những phím tắt.<br/><ul><li>"Tab": trừ khi một Widget được chọn, Header, Body, Footer sẽ được chọn trong lệnh. Nếu không, Widget tiếp theo sẽ được chọn.</li><li>"Shift+Tab": nó ngược lại với phím "Tab".</li><li>"Esc": Nếu không có gì được chọn, Neck, Extension (e1, e2 ), Knee sẽ được lựa chọn theo thứ tự, nếu một Widget được chọn, kích thước Widget sẽ được lựa chọn.</li><li>"4 phím mũi tên": Nếu Widget đã được chọn, nó sẽ di chuyển Widget tới một vị trí mới.</li></ul>]]></value>
</item>
@ -991,7 +980,7 @@
<value xml:lang="tr"><![CDATA[Hareketli Görünümü Uygula]]></value>
</item>
<item name="about_apply_mobile_view">
<value xml:lang="ko"><![CDATA[체크하면 연결된 모든 메뉴에서 모바일 뷰를 사용합니다.]]></value>
<value xml:lang="ko"><![CDATA[체크하면 연결된 모든 메뉴에서 모바일 뷰를 사용합니다.]]></value>
<value xml:lang="en"><![CDATA[All connected modules use the mobile view to display when accessing with mobile device.]]></value>
<value xml:lang="jp"><![CDATA[チェックを入れると、繋がっているすべてのモジュールでモバイルスキンが適用されます。]]></value>
<value xml:lang="zh-CN"><![CDATA[勾选表示连接到此布局的所有菜单项全部采用此移动版布局。]]></value>
@ -1004,7 +993,7 @@
</item>
<item name="installed_layout">
<value xml:lang="ko"><![CDATA[설치된 레이아웃]]></value>
<value xml:lang="en"><![CDATA[Layouts]]></value>
<value xml:lang="en"><![CDATA[Installed Layouts]]></value>
<value xml:lang="jp"><![CDATA[インストールされているレイアウト]]></value>
<value xml:lang="zh-TW"><![CDATA[已安裝版面]]></value>
</item>
@ -1029,7 +1018,7 @@
</item>
<item name="faceoff_migration" type="array">
<item name="0">
<value xml:lang="ko"><![CDATA[FaceOff 레이아웃은 지원이 중단될 예정입니다. 반드시 안내에 따라 FaceOff 레이아웃을 일반 레이아웃으로 변경하여 주시기 바랍니다.]]></value>
<value xml:lang="ko"><![CDATA[FaceOff 레이아웃은 지원이 중단될 예정입니다. 반드시 안내에 따라 FaceOff 레이아웃을 일반 레이아웃으로 변경 바랍니다.]]></value>
<value xml:lang="en"><![CDATA[FaceOff layout will deprecated. You must change faceoff layout to general layout.]]></value>
<value xml:lang="jp"><![CDATA[FaceOffレイアウトは、サポートが中断される予定です。必ず案内に従って、FaceOffレイアウトを一般レイアウトに変更してください。]]></value>
<value xml:lang="zh-TW"><![CDATA[將不在支援 FaceOff 版面。 必須將 FaceOff 版面變更一般版面。]]></value>
@ -1065,7 +1054,7 @@
<value xml:lang="zh-TW"><![CDATA[透過 FTP 上傳檔案至 ./layouts]]></value>
</item>
<item name="6">
<value xml:lang="ko"><![CDATA[레이아웃 목록에서 업로드한 레이아웃을 이용하여 레이아웃을 생성합니다. 이때 레이아웃 경로가 업로드한 경로가 맞는지 확인하세요. 로고 이미지 등 레이아웃 설정은 다시 하셔야 합니다.]]></value>
<value xml:lang="ko"><![CDATA[레이아웃 목록에서 업로드한 레이아웃을 이용하여 레이아웃을 생성합니다. 이때 레이아웃 경로가 업로드한 경로가 맞는지 확인하세요. 로고 이미지 등 레이아웃 설정은 다시 야 합니다.]]></value>
<value xml:lang="en"><![CDATA[Insert new layout from installed layout. Make sure to check if the path of layout is the same as the uploaded path. You need to set the layout including logo images.]]></value>
  <value xml:lang="jp"><![CDATA[レイアウトリストでアップロードしたレイアウトを利用してレイアウトを生成します。このとき、レイアウトのパスが、アップロードしたパスであるか確認してください。ロゴイメージはなどレイアウトの設定は、改めて行ってください。]]></value>
<value xml:lang="zh-TW"><![CDATA[從"已安裝版面"中建立新版面。 確認版面路徑是否上傳正確及修改版面相關設定。]]></value>
@ -1079,4 +1068,19 @@
<value xml:lang="ko"><![CDATA[복사할 Layout이 지정되어 있지 않습니다.]]></value>
<value xml:lang="en"><![CDATA[Target layout is not assigned]]></value>
</item>
<item name="msg_at_least_one_layout">
<value xml:lang="ko"><![CDATA[해당 레이아웃의 마지막 한개 레이아웃은 삭제할 수 없습니다.]]></value>
</item>
<item name="use_site_default_layout">
<value xml:lang="ko"><![CDATA[사이트 기본 레이아웃 사용]]></value>
</item>
<item name="msg_unabled_preview">
<value xml:lang="ko"><![CDATA[해당 메뉴 타입의 페이지가 하나도 없어 미리보기가 불가능합니다.]]></value>
</item>
<item name="article_preview_title">
<value xml:lang="ko"><![CDATA[문서의 제목입니다.]]></value>
</item>
<item name="article_preview_content">
<value xml:lang="ko"><![CDATA[무궁화 꽃이 피었습니다.]]></value>
</item>
</lang>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,206 @@
<?php
/**
* @class layoutAdminView
* @author NHN (developers@xpressengine.com)
* admin view class of the layout module
*/
class layoutAdminModel extends layout
{
/**
* init
*/
public function init()
{
}
/**
* get layout setting view.
* @return void
*/
public function getLayoutAdminSetInfoView()
{
$this->setLayoutAdminSetInfoView();
Context::set('is_sitemap', '1');
$script = '<script src="./modules/layout/tpl/js/layout_modify.js"></script>';
$oTemplate = TemplateHandler::getInstance();
$html = $oTemplate->compile($this->module_path.'tpl/', 'layout_info_view');
preg_match_all('/<!--#JSPLUGIN:(.*)-->/', $html, $m);
$pluginList = $m[1];
foreach($pluginList as $plugin)
{
$info = Context::getJavascriptPluginInfo($plugin);
if(!$info)
{
continue;
}
foreach($info->jsList as $js)
{
$script .= sprintf('<script src="%s"></script>', $js);
}
foreach($info->cssList as $css)
{
$csss .= sprintf('<link rel="stylesheet" href="%s" />', $css);
}
}
$this->add('html', $csss . $script . $html);
if($isReturn)
{
return $this->get('html');
}
}
public function setLayoutAdminSetInfoView()
{
$layout_srl = Context::get('layout_srl');
// Get layout information
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($layout_srl);
// Error appears if there is no layout information is registered
if(!$layout_info)
{
return $this->stop('msg_invalid_request');
}
// Get a menu list
$oMenuAdminModel = &getAdminModel('menu');
$menu_list = $oMenuAdminModel->getMenus();
Context::set('menu_list', $menu_list);
$security = new Security();
$security->encodeHTML('menu_list..');
$security = new Security($layout_info);
$layout_info = $security->encodeHTML('.', 'author..', 'extra_var..');
$layout_info->description = nl2br(trim($layout_info->description));
if(!is_object($layout_info->extra_var))
{
$layout_info->extra_var = new StdClass();
}
foreach($layout_info->extra_var as $var_name => $val)
{
if(isset($layout_info->{$var_name}->description))
{
$layout_info->{$var_name}->description = nl2br(trim($val->description));
}
}
Context::set('selected_layout', $layout_info);
}
public function getLayoutAdminSetHTMLCSS()
{
// Set the layout with its information
$layout_srl = Context::get('layout_srl');
// Get layout information
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($layout_srl);
// Error appears if there is no layout information is registered
if(!$layout_info)
{
return $this->dispLayoutAdminInstalledList();
}
// Get Layout Code
$oLayoutModel = &getModel('layout');
$layout_file = $oLayoutModel->getUserLayoutHtml($layout_info->layout_srl);
if(!file_exists($layout_file))
{
// If faceoff
if($oLayoutModel->useDefaultLayout($layout_info->layout_srl))
{
$layout_file = $oLayoutModel->getDefaultLayoutHtml($layout_info->layout);
}
else
{
$layout_file = sprintf('%s%s', $layout_info->path, 'layout.html');
}
}
$layout_css_file = $oLayoutModel->getUserLayoutCss($layout_info->layout_srl);
if(file_exists($layout_css_file))
{
$layout_code_css = FileHandler::readFile($layout_css_file);
Context::set('layout_code_css', $layout_code_css);
}
$layout_code = FileHandler::readFile($layout_file);
Context::set('layout_code', $layout_code);
// set User Images
$layout_image_list = $oLayoutModel->getUserLayoutImageList($layout_info->layout_srl);
Context::set('layout_image_list', $layout_image_list);
$layout_image_path = $oLayoutModel->getUserLayoutImagePath($layout_info->layout_srl);
Context::set('layout_image_path', $layout_image_path);
// Set widget list
$oWidgetModel = &getModel('widget');
$widget_list = $oWidgetModel->getDownloadedWidgetList();
Context::set('widget_list', $widget_list);
$security = new Security($layout_info);
$layout_info = $security->encodeHTML('.', '.author..');
Context::set('selected_layout', $layout_info);
//Security
$security = new Security();
$security->encodeHTML('layout_list..');
$security->encodeHTML('layout_list..author..');
$security = new Security();
$security->encodeHTML('layout_code_css', 'layout_code', 'widget_list..title');
$script = '<script src="./modules/layout/tpl/js/layout_admin_set_html.js"></script>';
$oTemplate = &TemplateHandler::getInstance();
$html = $oTemplate->compile($this->module_path.'tpl/', 'layout_html_css_view');
$this->add('html', $script.$html);
}
public function getLayoutAdminSiteDefaultLayout()
{
$siteSrl = Context::get('site_srl');
$type = Context::get('type');
$layoutSrl = $this->getSiteDefaultLayout($type, $siteSrl);
$oLayoutModel = getModel('layout');
$layoutInfo = $oLayoutModel->getLayoutRawData($layoutSrl, array('title'));
$this->add('layout_srl', $layoutSrl);
$this->add('title', $layoutInfo->title);
}
public function getSiteDefaultLayout($viewType = 'P', $siteSrl = 0)
{
$target = ($viewType == 'M') ? 'mlayout_srl' : 'layout_srl';
$designInfoFile = sprintf(_XE_PATH_.'/files/site_design/design_%s.php', $siteSrl);
@include($designInfoFile);
if(!$designInfo || !$designInfo->{$target})
{
return 0;
}
$oModel = getModel('layout');
$layout_info = $oModel->getLayout($designInfo->{$target});
if(!$layout_info)
{
return 0;
}
return $designInfo->{$target};
}
}
/* End of file layout.admin.model.php */
/* Location: ./modules/layout/layout.admin.model.php */

View file

@ -1,493 +1,417 @@
<?php
/**
* @class layoutAdminView
* @author NHN (developers@xpressengine.com)
* admin view class of the layout module
**/
/**
* @class layoutAdminView
* @author NHN (developers@xpressengine.com)
* admin view class of the layout module
*/
class layoutAdminView extends layout
{
/**
* Initialization
* @return void
*/
function init()
{
$this->setTemplatePath($this->module_path.'tpl');
}
class layoutAdminView extends layout {
/**
* Display a installed layout list
* @return void
*/
function dispLayoutAdminInstalledList()
{
$type = Context::get('type');
$type = ($type != 'M') ? 'P' : 'M';
/**
* Initialization
* @return void
**/
function init() {
$this->setTemplatePath($this->module_path.'tpl');
}
/**
* Display a installed layout list
* @return void
**/
function dispLayoutAdminInstalledList() {
$type = Context::get('type');
$type = ($type != 'M') ? 'P' : 'M';
// Set a layout list
$oLayoutModel = &getModel('layout');
$layout_list = $oLayoutModel->getDownloadedLayoutList($type, true);
if(!is_array($layout_list))
{
$layout_list = array();
}
if($type == 'P')
{
// get Theme layout
$oAdminModel = &getAdminModel('admin');
$themeList = $oAdminModel->getThemeList();
$themeLayoutList = array();
foreach($themeList as $themeInfo){
if(strpos($themeInfo->layout_info->name, '.') === false) continue;
$themeLayoutList[] = $oLayoutModel->getLayoutInfo($themeInfo->layout_info->name, null, 'P');
}
$layout_list = array_merge($layout_list, $themeLayoutList);
$layout_list[] = $oLayoutModel->getLayoutInfo('faceoff', null, 'P');
}
$pcLayoutCount = $oLayoutModel->getInstalledLayoutCount('P');
$mobileLayoutCount = $oLayoutModel->getInstalledLayoutCount('M');
Context::set('pcLayoutCount', $pcLayoutCount);
Context::set('mobileLayoutCount', $mobileLayoutCount);
$this->setTemplateFile('installed_layout_list');
$security = new Security($layout_list);
$layout_list = $security->encodeHTML('..', '..author..');
//Security
$security = new Security();
$security->encodeHTML('layout_list..layout','layout_list..title');
foreach($layout_list as $no => $layout_info)
{
$layout_list[$no]->description = nl2br(trim($layout_info->description));
}
Context::set('layout_list', $layout_list);
}
/**
* Display list of pc layout all instance
* @return void|Object (void : success, Object : fail)
*/
function dispLayoutAdminAllInstanceList()
// Set a layout list
$oLayoutModel = &getModel('layout');
$layout_list = $oLayoutModel->getDownloadedLayoutList($type, true);
if(!is_array($layout_list))
{
$type = Context::get('type');
if (!in_array($type, array('P', 'M'))) $type = 'P';
$oLayoutModel = &getModel('layout');
$pcLayoutCount = $oLayoutModel->getInstalledLayoutCount('P');
$mobileLayoutCount = $oLayoutModel->getInstalledLayoutCount('M');
Context::set('pcLayoutCount', $pcLayoutCount);
Context::set('mobileLayoutCount', $mobileLayoutCount);
$columnList = array('layout_srl', 'layout', 'module_srl', 'title', 'regdate');
$_layout_list = $oLayoutModel->getLayoutInstanceList(0, $type, null, $columnList);
$layout_list = array();
foreach($_layout_list as $item)
}
if($type == 'P')
{
// get Theme layout
$oAdminModel = &getAdminModel('admin');
$themeList = $oAdminModel->getThemeList();
$themeLayoutList = array();
foreach($themeList as $themeInfo)
{
if(!$layout_list[$item->layout])
if(strpos($themeInfo->layout_info->name, '.') === false) continue;
$themeLayoutList[] = $oLayoutModel->getLayoutInfo($themeInfo->layout_info->name, null, 'P');
}
$layout_list = array_merge($layout_list, $themeLayoutList);
$layout_list[] = $oLayoutModel->getLayoutInfo('faceoff', null, 'P');
}
$pcLayoutCount = $oLayoutModel->getInstalledLayoutCount('P');
$mobileLayoutCount = $oLayoutModel->getInstalledLayoutCount('M');
Context::set('pcLayoutCount', $pcLayoutCount);
Context::set('mobileLayoutCount', $mobileLayoutCount);
$this->setTemplateFile('installed_layout_list');
$security = new Security($layout_list);
$layout_list = $security->encodeHTML('..', '..author..');
//Security
$security = new Security();
$security->encodeHTML('layout_list..layout','layout_list..title');
foreach($layout_list as $no => $layout_info)
{
$layout_list[$no]->description = nl2br(trim($layout_info->description));
}
Context::set('layout_list', $layout_list);
}
/**
* Display list of pc layout all instance
* @return void|Object (void : success, Object : fail)
*/
function dispLayoutAdminAllInstanceList()
{
$type = Context::get('type');
if(!in_array($type, array('P', 'M'))) $type = 'P';
$oLayoutModel = &getModel('layout');
$pcLayoutCount = $oLayoutModel->getInstalledLayoutCount('P');
$mobileLayoutCount = $oLayoutModel->getInstalledLayoutCount('M');
Context::set('pcLayoutCount', $pcLayoutCount);
Context::set('mobileLayoutCount', $mobileLayoutCount);
$columnList = array('layout_srl', 'layout', 'module_srl', 'title', 'regdate');
$_layout_list = $oLayoutModel->getLayoutInstanceList(0, $type, null, $columnList);
$layout_list = array();
foreach($_layout_list as $item)
{
if(!$layout_list[$item->layout])
{
$layout_list[$item->layout] = array();
$layout_info = $oLayoutModel->getLayoutInfo($item->layout, null, $type);
if ($layout_info)
{
$layout_list[$item->layout] = array();
$layout_info = $oLayoutModel->getLayoutInfo($item->layout, null, $type);
if ($layout_info)
{
$layout_list[$item->layout]['title'] = $layout_info->title;
}
$layout_list[$item->layout]['title'] = $layout_info->title;
}
$layout_list[$item->layout][] = $item;
}
usort($layout_list, array($this, 'sortLayoutInstance'));
Context::set('layout_list', $layout_list);
$this->setTemplateFile('layout_all_instance_list');
$security = new Security();
$security->encodeHTML('layout_list..');
$layout_list[$item->layout][] = $item;
}
/**
* Sort layout instance by layout name, instance name
*/
function sortLayoutInstance($a, $b)
usort($layout_list, array($this, 'sortLayoutInstance'));
Context::set('layout_list', $layout_list);
$this->setTemplateFile('layout_all_instance_list');
$security = new Security();
$security->encodeHTML('layout_list..');
}
/**
* Sort layout instance by layout name, instance name
*/
function sortLayoutInstance($a, $b)
{
$aTitle = strtolower($a['title']);
$bTitle = strtolower($b['title']);
if($aTitle == $bTitle)
{
$aTitle = strtolower($a['title']);
$bTitle = strtolower($b['title']);
if($aTitle == $bTitle)
{
return 0;
}
return ($aTitle < $bTitle) ? -1 : 1;
return 0;
}
/**
* Display list of pc layout instance
* @return void|Object (void : success, Object : fail)
*/
function dispLayoutAdminInstanceList()
return ($aTitle < $bTitle) ? -1 : 1;
}
/**
* Display list of pc layout instance
* @return void|Object (void : success, Object : fail)
*/
function dispLayoutAdminInstanceList()
{
$type = Context::get('type');
$layout = Context::get('layout');
if(!in_array($type, array('P', 'M'))) $type = 'P';
if(!$layout) return $this->stop('msg_invalid_request');
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayoutInfo($layout, null, $type);
if(!$layout_info) return $this->stop('msg_invalid_request');
Context::set('layout_info', $layout_info);
$columnList = array('layout_srl', 'layout', 'module_srl', 'title', 'regdate');
$layout_list = $oLayoutModel->getLayoutInstanceList(0, $type, $layout, $columnList);
Context::set('layout_list', $layout_list);
$this->setTemplateFile('layout_instance_list');
$security = new Security();
$security->encodeHTML('layout_list..');
}
/**
* Layout setting page
* Once select a layout with empty value in the DB, then adjust values
* @return void|Object (void : success, Object : fail)
*/
function dispLayoutAdminInsert()
{
$oModel = &getModel('layout');
$type = Context::get('type');
if(!in_array($type, array('P', 'M'))) $type = 'P';
//Security
$security = new Security();
$security->encodeHTML('layout_list..layout','layout_list..title');
// Get layout info
$layout = Context::get('layout');
if($layout == 'faceoff') return $this->stop('not supported');
$layout_info = $oModel->getLayoutInfo($layout, null, $type);
if(!$layout_info) return $this->stop('msg_invalid_request');
// get Menu list
$oMenuAdminModel = &getAdminModel('menu');
$menu_list = $oMenuAdminModel->getMenus();
Context::set('menu_list', $menu_list);
$security = new Security();
$security->encodeHTML('menu_list..');
$security = new Security($layout_info);
$layout_info = $security->encodeHTML('.', 'author..', 'extra_var..', 'extra_var....');
$layout_info->description = nl2br(trim($layout_info->description));
if(!is_object($layout_info->extra_var)) $layout_info->extra_var = new StdClass();
foreach($layout_info->extra_var as $var_name => $val)
{
$type = Context::get('type');
$layout = Context::get('layout');
if (!in_array($type, array('P', 'M'))) $type = 'P';
if (!$layout) return $this->stop('msg_invalid_request');
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayoutInfo($layout, null, $type);
if (!$layout_info) return $this->stop('msg_invalid_request');
Context::set('layout_info', $layout_info);
$columnList = array('layout_srl', 'layout', 'module_srl', 'title', 'regdate');
$layout_list = $oLayoutModel->getLayoutInstanceList(0, $type, $layout, $columnList);
Context::set('layout_list', $layout_list);
$this->setTemplateFile('layout_instance_list');
$security = new Security();
$security->encodeHTML('layout_list..');
if(isset($layout_info->{$var_name}->description))
$layout_info->{$var_name}->description = nl2br(trim($val->description));
}
Context::set('selected_layout', $layout_info);
/**
* Layout setting page
* Once select a layout with empty value in the DB, then adjust values
* @return void|Object (void : success, Object : fail)
**/
function dispLayoutAdminInsert() {
$oModel = &getModel('layout');
$type = Context::get('type');
if (!in_array($type, array('P', 'M'))) $type = 'P';
//Security
$security = new Security();
$security->encodeHTML('layout_list..layout','layout_list..title');
$this->setTemplateFile('layout_modify');
}
// Get layout info
$layout = Context::get('layout');
if ($layout == 'faceoff') return $this->stop('not supported');
/**
* Insert Layout details
* @return void
*/
function dispLayoutAdminModify()
{
$oLayoutAdminModel = &getAdminModel('layout');
$oLayoutAdminModel->setLayoutAdminSetInfoView();
$layout_info = $oModel->getLayoutInfo($layout, null, $type);
if (!$layout_info) return $this->stop('msg_invalid_request');
Context::set('is_sitemap', '0');
$script = '<script src="./modules/layout/tpl/js/layout_modify.js"></script>';
$oTemplate = &TemplateHandler::getInstance();
$content = $oTemplate->compile($this->module_path.'tpl/', 'layout_info_view');
// get Menu list
$oMenuAdminModel = &getAdminModel('menu');
$menu_list = $oMenuAdminModel->getMenus();
Context::set('menu_list', $menu_list);
Context::set('content', $content);
$security = new Security();
$security->encodeHTML('menu_list..');
$this->setTemplateFile('layout_modify');
}
$security = new Security($layout_info);
$layout_info = $security->encodeHTML('.', 'author..', 'extra_var..', 'extra_var....');
/**
* Edit layout codes
* @return void
*/
function dispLayoutAdminEdit()
{
// Set the layout with its information
$layout_srl = Context::get('layout_srl');
// Get layout information
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($layout_srl);
// Error appears if there is no layout information is registered
if(!$layout_info) return $this->dispLayoutAdminInstalledList();
$layout_info->description = nl2br(trim($layout_info->description));
if (!is_object($layout_info->extra_var)) $layout_info->extra_var = new StdClass();
foreach($layout_info->extra_var as $var_name => $val)
// Get Layout Code
$oLayoutModel = &getModel('layout');
$layout_file = $oLayoutModel->getUserLayoutHtml($layout_info->layout_srl);
if(!file_exists($layout_file))
{
// If faceoff
if($oLayoutModel->useDefaultLayout($layout_info->layout_srl))
{
if (isset($layout_info->{$var_name}->description))
$layout_info->{$var_name}->description = nl2br(trim($val->description));
$layout_file = $oLayoutModel->getDefaultLayoutHtml($layout_info->layout);
}
Context::set('selected_layout', $layout_info);
$this->setTemplateFile('layout_modify');
}
/**
* Insert Layout details
* @return void
**/
function dispLayoutAdminModify() {
// Set the layout after getting layout information
$layout_srl = Context::get('layout_srl');
// Get layout information
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($layout_srl);
// Error appears if there is no layout information is registered
if(!$layout_info) return $this->stop('msg_invalid_request');
// If faceoff, no need to display the path
if($layout_info->type == 'faceoff') unset($layout_info->path);
// Get a menu list
$oMenuAdminModel = &getAdminModel('menu');
$menu_list = $oMenuAdminModel->getMenus();
Context::set('menu_list', $menu_list);
$security = new Security();
$security->encodeHTML('menu_list..');
$security = new Security($layout_info);
$layout_info = $security->encodeHTML('.', 'author..', 'extra_var..');
$layout_info->description = nl2br(trim($layout_info->description));
if (!is_object($layout_info->extra_var)) $layout_info->extra_var = new StdClass();
foreach($layout_info->extra_var as $var_name => $val)
else
{
if (isset($layout_info->{$var_name}->description))
$layout_info->{$var_name}->description = nl2br(trim($val->description));
$layout_file = sprintf('%s%s', $layout_info->path, 'layout.html');
}
Context::set('selected_layout', $layout_info);
$this->setTemplateFile('layout_modify');
}
/**
* The first page of the layout admin
* @deprecated
* @return void|Object (void : success, Object : fail)
**/
function dispLayoutAdminContent() {
$path = Context::get('path');
if (!$path) return $this->stop('msg_invalid_request');
$oLayoutModel = &getModel('layout');
$columnList = array('layout_srl', 'layout', 'module_srl', 'title', 'regdate');
$layout_list = $oLayoutModel->getLayoutList(0, 'P', $columnList);
Context::set('layout_list', $layout_list);
$this->setTemplateFile('index');
}
/**
* The first page of the mobile layout admin
* @deprecated
* @return void
**/
function dispLayoutAdminMobileContent() {
$oLayoutModel = &getModel('layout');
$columnList = array('layout_srl', 'layout', 'module_srl', 'title', 'regdate');
$layout_list = $oLayoutModel->getLayoutList(0, 'M', $columnList);
Context::set('layout_list', $layout_list);
$this->setTemplateFile('mindex');
}
/**
* Edit layout codes
* @return void
**/
function dispLayoutAdminEdit() {
// Set the layout with its information
$layout_srl = Context::get('layout_srl');
// Get layout information
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($layout_srl);
// Error appears if there is no layout information is registered
if(!$layout_info) return $this->dispLayoutAdminInstalledList();
$layout_css_file = $oLayoutModel->getUserLayoutCss($layout_info->layout_srl);
if(file_exists($layout_css_file))
{
$layout_code_css = FileHandler::readFile($layout_css_file);
Context::set('layout_code_css', $layout_code_css);
}
// Get Layout Code
$oLayoutModel = &getModel('layout');
$layout_file = $oLayoutModel->getUserLayoutHtml($layout_info->layout_srl);
if(!file_exists($layout_file)){
// If faceoff
if($oLayoutModel->useDefaultLayout($layout_info->layout_srl)){
$layout_file = $oLayoutModel->getDefaultLayoutHtml($layout_info->layout);
}else{
$layout_file = sprintf('%s%s', $layout_info->path, 'layout.html');
}
}
$layout_code = FileHandler::readFile($layout_file);
Context::set('layout_code', $layout_code);
$layout_css_file = $oLayoutModel->getUserLayoutCss($layout_info->layout_srl);
if(file_exists($layout_css_file)){
$layout_code_css = FileHandler::readFile($layout_css_file);
Context::set('layout_code_css', $layout_code_css);
}
// set User Images
$layout_image_list = $oLayoutModel->getUserLayoutImageList($layout_info->layout_srl);
Context::set('layout_image_list', $layout_image_list);
$layout_code = FileHandler::readFile($layout_file);
Context::set('layout_code', $layout_code);
$layout_image_path = $oLayoutModel->getUserLayoutImagePath($layout_info->layout_srl);
Context::set('layout_image_path', $layout_image_path);
// Set widget list
$oWidgetModel = &getModel('widget');
$widget_list = $oWidgetModel->getDownloadedWidgetList();
Context::set('widget_list', $widget_list);
// set User Images
$layout_image_list = $oLayoutModel->getUserLayoutImageList($layout_info->layout_srl);
Context::set('layout_image_list', $layout_image_list);
$this->setTemplateFile('layout_edit');
$layout_image_path = $oLayoutModel->getUserLayoutImagePath($layout_info->layout_srl);
Context::set('layout_image_path', $layout_image_path);
// Set widget list
$oWidgetModel = &getModel('widget');
$widget_list = $oWidgetModel->getDownloadedWidgetList();
Context::set('widget_list', $widget_list);
$security = new Security($layout_info);
$layout_info = $security->encodeHTML('.', '.author..');
Context::set('selected_layout', $layout_info);
$this->setTemplateFile('layout_edit');
//Security
$security = new Security();
$security->encodeHTML('layout_list..');
$security->encodeHTML('layout_list..author..');
$security = new Security($layout_info);
$layout_info = $security->encodeHTML('.', '.author..');
Context::set('selected_layout', $layout_info);
//Security
$security = new Security();
$security->encodeHTML('layout_list..');
$security->encodeHTML('layout_list..author..');
$security = new Security();
$security->encodeHTML('layout_code_css', 'layout_code', 'widget_list..title');
}
$security = new Security();
$security->encodeHTML('layout_code_css', 'layout_code', 'widget_list..title');
}
/**
* Preview a layout
* @return void|Object (void : success, Object : fail)
**/
function dispLayoutAdminPreview() {
$layout_srl = Context::get('layout_srl');
$code = Context::get('code');
$code_css = Context::get('code_css');
if(!$layout_srl || !$code) return new Object(-1, 'msg_invalid_request');
// Get the layout information
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($layout_srl);
if(!$layout_info) return new Object(-1, 'msg_invalid_request');
// Separately handle the layout if its type is faceoff
if($layout_info && $layout_info->type == 'faceoff') $oLayoutModel->doActivateFaceOff($layout_info);
// Apply CSS directly
Context::addHtmlHeader("<style type=\"text/css\" charset=\"UTF-8\">".$code_css."</style>");
// Set names and values of extra_vars to $layout_info
if($layout_info->extra_var_count) {
foreach($layout_info->extra_var as $var_id => $val) {
$layout_info->{$var_id} = $val->value;
}
}
// menu in layout information becomes an argument for Context:: set
if($layout_info->menu_count) {
foreach($layout_info->menu as $menu_id => $menu) {
if(file_exists($menu->php_file)) @include($menu->php_file);
Context::set($menu_id, $menu);
}
}
/**
* Preview a layout
* @return void|Object (void : success, Object : fail)
*/
function dispLayoutAdminPreview()
{
$layout_srl = Context::get('layout_srl');
$code = Context::get('code');
$code_css = Context::get('code_css');
if(!$layout_srl || !$code) return new Object(-1, 'msg_invalid_request');
// Get the layout information
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($layout_srl);
if(!$layout_info) return new Object(-1, 'msg_invalid_request');
// Separately handle the layout if its type is faceoff
if($layout_info && $layout_info->type == 'faceoff') $oLayoutModel->doActivateFaceOff($layout_info);
// Apply CSS directly
Context::addHtmlHeader("<style type=\"text/css\" charset=\"UTF-8\">".$code_css."</style>");
// Set names and values of extra_vars to $layout_info
if($layout_info->extra_var_count)
{
foreach($layout_info->extra_var as $var_id => $val)
{
$layout_info->{$var_id} = $val->value;
}
}
// menu in layout information becomes an argument for Context:: set
if($layout_info->menu_count)
{
foreach($layout_info->menu as $menu_id => $menu)
{
if(file_exists($menu->php_file)) @include($menu->php_file);
Context::set($menu_id, $menu);
}
}
Context::set('layout_info', $layout_info);
Context::set('content', Context::getLang('layout_preview_content'));
// Temporary save the codes
$edited_layout_file = sprintf('./files/cache/layout/tmp.tpl');
FileHandler::writeFile($edited_layout_file, $code);
Context::set('layout_info', $layout_info);
Context::set('content', Context::getLang('layout_preview_content'));
// Temporary save the codes
$edited_layout_file = sprintf('./files/cache/layout/tmp.tpl');
FileHandler::writeFile($edited_layout_file, $code);
// Compile
$oTemplate = &TemplateHandler::getInstance();
// Compile
$oTemplate = &TemplateHandler::getInstance();
$layout_path = $layout_info->path;
$layout_file = 'layout';
$layout_path = $layout_info->path;
$layout_file = 'layout';
$layout_tpl = $oTemplate->compile($layout_path, $layout_file, $edited_layout_file);
Context::set('layout','none');
// Convert widgets and others
$oContext = &Context::getInstance();
Context::set('layout_tpl', $layout_tpl);
// Delete Temporary Files
FileHandler::removeFile($edited_layout_file);
$this->setTemplateFile('layout_preview');
$layout_tpl = $oTemplate->compile($layout_path, $layout_file, $edited_layout_file);
Context::set('layout','none');
// Convert widgets and others
$oContext = &Context::getInstance();
Context::set('layout_tpl', $layout_tpl);
// Delete Temporary Files
FileHandler::removeFile($edited_layout_file);
$this->setTemplateFile('layout_preview');
}
}
/**
* Pop-up details of the layout(conf/info.xml)
* @deprecated
* @return void
**/
function dispLayoutAdminInfo() {
// Get the layout information
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayoutInfo(Context::get('selected_layout'));
Context::set('layout_info', $layout_info);
// Set the layout to be pop-up
$this->setLayoutFile('popup_layout');
$security = new Security();
$security->encodeHTML('layout_list..');
$security->encodeHTML('layout_list..author..');
$security->encodeHTML('layout_list..history..');
$security->encodeHTML('layout_list..history..author..');
// Set a template file
$this->setTemplateFile('layout_detail_info');
}
/**
* Modify admin layout of faceoff
* @deprecated
* @return void
*/
function dispLayoutAdminLayoutModify()
{
// Get layout_srl
$current_module_info = Context::get('current_module_info');
$layout_srl = $current_module_info->layout_srl;
// Remove the remaining tmp files because of temporarily saving
// This part needs to be modified
$delete_tmp = Context::get('delete_tmp');
if($delete_tmp =='Y')
{
$oLayoutAdminController = &getAdminController('layout');
$oLayoutAdminController->deleteUserLayoutTempFile($layout_srl);
}
/**
* Modify admin layout of faceoff
* @deprecated
* @return void
**/
function dispLayoutAdminLayoutModify(){
// Get layout_srl
$current_module_info = Context::get('current_module_info');
$layout_srl = $current_module_info->layout_srl;
// Remove the remaining tmp files because of temporarily saving
// This part needs to be modified
$delete_tmp = Context::get('delete_tmp');
if($delete_tmp =='Y'){
$oLayoutAdminController = &getAdminController('layout');
$oLayoutAdminController->deleteUserLayoutTempFile($layout_srl);
}
$oLayoutModel = &getModel('layout');
// layout file is used as a temp.
$oLayoutModel->setUseUserLayoutTemp();
// Apply CSS in inline style
$faceoffcss = $oLayoutModel->_getUserLayoutFaceOffCss($current_module_info->layout_srl);
$oLayoutModel = &getModel('layout');
// layout file is used as a temp.
$oLayoutModel->setUseUserLayoutTemp();
// Apply CSS in inline style
$faceoffcss = $oLayoutModel->_getUserLayoutFaceOffCss($current_module_info->layout_srl);
$css = FileHandler::readFile($faceoffcss);
$match = null;
preg_match_all('/([^\{]+)\{([^\}]*)\}/is',$css,$match);
for($i=0,$c=count($match[1]);$i<$c;$i++)
{
$name = trim($match[1][$i]);
$css = trim($match[2][$i]);
if(!$css) continue;
$css = str_replace('./images/',Context::getRequestUri().$oLayoutModel->getUserLayoutImagePath($layout_srl),$css);
$style[] .= sprintf('"%s":"%s"',$name,$css);
}
$css = FileHandler::readFile($faceoffcss);
$match = null;
preg_match_all('/([^\{]+)\{([^\}]*)\}/is',$css,$match);
for($i=0,$c=count($match[1]);$i<$c;$i++) {
$name = trim($match[1][$i]);
$css = trim($match[2][$i]);
if(!$css) continue;
$css = str_replace('./images/',Context::getRequestUri().$oLayoutModel->getUserLayoutImagePath($layout_srl),$css);
$style[] .= sprintf('"%s":"%s"',$name,$css);
}
if(count($style))
{
$script = '<script type="text/javascript"> var faceOffStyle = {'.implode(',',$style).'}; </script>';
Context::addHtmlHeader($script);
}
if(count($style)) {
$script = '<script type="text/javascript"> var faceOffStyle = {'.implode(',',$style).'}; </script>';
Context::addHtmlHeader($script);
}
$oTemplate = &TemplateHandler::getInstance();
Context::set('content', $oTemplate->compile($this->module_path.'tpl','about_faceoff'));
// Change widget codes in Javascript mode
$oWidgetController = &getController('widget');
$oWidgetController->setWidgetCodeInJavascriptMode();
// Set a template file
$this->setTemplateFile('faceoff_layout_edit');
}
$oTemplate = &TemplateHandler::getInstance();
Context::set('content', $oTemplate->compile($this->module_path.'tpl','about_faceoff'));
// Change widget codes in Javascript mode
$oWidgetController = &getController('widget');
$oWidgetController->setWidgetCodeInJavascriptMode();
// Set a template file
$this->setTemplateFile('faceoff_layout_edit');
}
/**
* Copy layout instance
* @return void
*/
function dispLayoutAdminCopyLayout()
{
$layoutSrl = Context::get('layout_srl');
/**
* display used images info for faceoff
* @deprecated
* @return void
**/
function dispLayoutAdminLayoutImageList(){
$layout_srl = Context::get('layout_srl');
$oLayoutModel = &getModel('layout');
// Image List
$layout_image_list = $oLayoutModel->getUserLayoutImageList($layout_srl);
Context::set('layout_image_list',$layout_image_list);
// Path
$layout_image_path = $oLayoutModel->getUserLayoutImagePath($layout_srl);
Context::set('layout_image_path',$layout_image_path);
$oLayoutModel = &getModel('layout');
$layout = $oLayoutModel->getLayout($layoutSrl);
$this->setLayoutFile('popup_layout');
$this->setTemplateFile('layout_image_list');
}
/**
* Copy layout instance
* @return void
*/
function dispLayoutAdminCopyLayout(){
$layoutSrl = Context::get('layout_srl');
$oLayoutModel = &getModel('layout');
$layout = $oLayoutModel->getLayout($layoutSrl);
Context::set('layout', $layout);
$this->setTemplateFile('copy_layout');
}
}
?>
Context::set('layout', $layout);
$this->setTemplateFile('copy_layout');
}
}
/* End of file layout.admin.view.php */
/* Location: ./modules/layout/layout.admin.view.php */

View file

@ -1,113 +1,122 @@
<?php
/**
* @class layout
* @author NHN (developers@xpressengine.com)
* high class of the layout module
**/
/**
* @class layout
* @author NHN (developers@xpressengine.com)
* high class of the layout module
*/
class layout extends ModuleObject
{
/**
* Implement if additional tasks are necessary when installing
* @return Object
*/
function moduleInstall()
{
// Create a directory to be used in the layout
FileHandler::makeDir('./files/cache/layout');
class layout extends ModuleObject {
return new Object();
}
/**
* Implement if additional tasks are necessary when installing
* @return Object
**/
function moduleInstall() {
// Create a directory to be used in the layout
FileHandler::makeDir('./files/cache/layout');
/**
* a method to check if successfully installed
* @return boolean
*/
function checkUpdate()
{
$oDB = &DB::getInstance();
// 2009. 02. 11 Add site_srl to layout table
if(!$oDB->isColumnExists('layouts', 'site_srl')) return true;
// 2009. 02. 26 Move the previous layout for faceoff
$files = FileHandler::readDir('./files/cache/layout');
for($i=0,$c=count($files);$i<$c;$i++)
{
$filename = $files[$i];
if(preg_match('/([0-9]+)\.html/i',$filename)) return true;
}
return new Object();
}
if(!$oDB->isColumnExists('layouts', 'layout_type')) return true;
/**
* a method to check if successfully installed
* @return boolean
**/
function checkUpdate() {
$oDB = &DB::getInstance();
// 2009. 02. 11 Add site_srl to layout table
if(!$oDB->isColumnExists('layouts', 'site_srl')) return true;
// 2009. 02. 26 Move the previous layout for faceoff
$files = FileHandler::readDir('./files/cache/layout');
for($i=0,$c=count($files);$i<$c;$i++) {
$filename = $files[$i];
if(preg_match('/([0-9]+)\.html/i',$filename)) return true;
}
if(!$oDB->isColumnExists('layouts', 'layout_type')) return true;
$args->layout = '.';
$output = executeQueryArray('layout.getLayoutDotList', $args);
if($output->data && count($output->data) > 0)
$args = new stdClass();
$args->layout = '.';
$output = executeQueryArray('layout.getLayoutDotList', $args);
if($output->data && count($output->data) > 0)
{
foreach($output->data as $layout)
{
foreach($output->data as $layout)
$layout_path = explode('.', $layout->layout);
if(count($layout_path) != 2) continue;
if(is_dir(sprintf(_XE_PATH_ . 'themes/%s/layouts/%s', $layout_path[0], $layout_path[1]))) return true;
}
}
return false;
}
/**
* Execute update
* @return Object
*/
function moduleUpdate()
{
$oDB = &DB::getInstance();
// 2009. 02. 11 Add site_srl to menu table
if(!$oDB->isColumnExists('layouts', 'site_srl'))
{
$oDB->addColumn('layouts','site_srl','number',11,0,true);
}
// 2009. 02. 26 Move the previous layout for faceoff
$oLayoutModel = &getModel('layout');
$files = FileHandler::readDir('./files/cache/layout');
for($i=0,$c=count($files);$i<$c;$i++)
{
$filename = $files[$i];
if(!preg_match('/([0-9]+)\.html/i',$filename,$match)) continue;
$layout_srl = $match[1];
if(!$layout_srl) continue;
$path = $oLayoutModel->getUserLayoutPath($layout_srl);
if(!is_dir($path)) FileHandler::makeDir($path);
FileHandler::copyFile('./files/cache/layout/'.$filename, $path.'layout.html');
@unlink('./files/cache/layout/'.$filename);
}
if(!$oDB->isColumnExists('layouts', 'layout_type'))
{
$oDB->addColumn('layouts','layout_type','char',1,'P',true);
}
$args->layout = '.';
$output = executeQueryArray('layout.getLayoutDotList', $args);
if($output->data && count($output->data) > 0)
{
foreach($output->data as $layout)
{
$layout_path = explode('.', $layout->layout);
if(count($layout_path) != 2) continue;
if(is_dir(sprintf(_XE_PATH_ . 'themes/%s/layouts/%s', $layout_path[0], $layout_path[1])))
{
$layout_path = explode('.', $layout->layout);
if(count($layout_path) != 2) continue;
if(is_dir(sprintf(_XE_PATH_ . 'themes/%s/layouts/%s', $layout_path[0], $layout_path[1]))) return true;
$args->layout = implode('|@|', $layout_path);
$args->layout_srl = $layout->layout_srl;
$output = executeQuery('layout.updateLayout', $args);
}
}
}
return new Object(0, 'success_updated');
}
return false;
}
/**
* Execute update
* @return Object
**/
function moduleUpdate() {
$oDB = &DB::getInstance();
// 2009. 02. 11 Add site_srl to menu table
if(!$oDB->isColumnExists('layouts', 'site_srl')) {
$oDB->addColumn('layouts','site_srl','number',11,0,true);
}
// 2009. 02. 26 Move the previous layout for faceoff
$oLayoutModel = &getModel('layout');
$files = FileHandler::readDir('./files/cache/layout');
for($i=0,$c=count($files);$i<$c;$i++) {
$filename = $files[$i];
if(!preg_match('/([0-9]+)\.html/i',$filename,$match)) continue;
$layout_srl = $match[1];
if(!$layout_srl) continue;
$path = $oLayoutModel->getUserLayoutPath($layout_srl);
if(!is_dir($path)) FileHandler::makeDir($path);
FileHandler::copyFile('./files/cache/layout/'.$filename, $path.'layout.html');
@unlink('./files/cache/layout/'.$filename);
}
if(!$oDB->isColumnExists('layouts', 'layout_type')) {
$oDB->addColumn('layouts','layout_type','char',1,'P',true);
}
$args->layout = '.';
$output = executeQueryArray('layout.getLayoutDotList', $args);
if($output->data && count($output->data) > 0)
{
foreach($output->data as $layout)
{
$layout_path = explode('.', $layout->layout);
if(count($layout_path) != 2) continue;
if(is_dir(sprintf(_XE_PATH_ . 'themes/%s/layouts/%s', $layout_path[0], $layout_path[1])))
{
$args->layout = implode('|@|', $layout_path);
$args->layout_srl = $layout->layout_srl;
$output = executeQuery('layout.updateLayout', $args);
}
}
}
return new Object(0, 'success_updated');
}
/**
* Re-generate the cache file
* @return void
**/
function recompileCache() {
$path = './files/cache/layout';
if(!is_dir($path)) {
FileHandler::makeDir($path);
return;
}
}
}
?>
/**
* Re-generate the cache file
* @return void
*/
function recompileCache()
{
$path = './files/cache/layout';
if(!is_dir($path))
{
FileHandler::makeDir($path);
return;
}
}
}
/* End of file layout.class.php */
/* Location: ./modules/layout/layout.class.php */

File diff suppressed because it is too large Load diff

View file

@ -1,94 +1,412 @@
<?php
/**
* @class layoutView
* @author NHN (developers@xpressengine.com)
* admin view class of the layout module
**/
/**
* @class layoutView
* @author NHN (developers@xpressengine.com)
* admin view class of the layout module
*/
class layoutView extends layout
{
/**
* Initialization
* @return void
*/
function init()
{
$this->setTemplatePath($this->module_path.'tpl');
}
class layoutView extends layout {
/**
* Pop-up layout details(conf/info.xml)
* @return void
*/
function dispLayoutInfo()
{
// Get the layout information
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayoutInfo(Context::get('selected_layout'));
if(!$layout_info) exit();
Context::set('layout_info', $layout_info);
// Set the layout to be pop-up
$this->setLayoutFile('popup_layout');
// Set a template file
$this->setTemplateFile('layout_detail_info');
}
/**
* Initialization
* @return void
**/
function init() {
$this->setTemplatePath($this->module_path.'tpl');
}
/**
* Preview a layout with module.
*
* @return Object
*/
public function dispLayoutPreviewWithModule()
{
$content = '';
$layoutSrl = Context::get('layout_srl');
/**
* Pop-up layout details(conf/info.xml)
* @return void
**/
function dispLayoutInfo() {
// Get the layout information
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayoutInfo(Context::get('selected_layout'));
if(!$layout_info) exit();
Context::set('layout_info', $layout_info);
// Set the layout to be pop-up
$this->setLayoutFile('popup_layout');
// Set a template file
$this->setTemplateFile('layout_detail_info');
}
$module = Context::get('module_name');
$mid = Context::get('target_mid');
$skin = Context::get('skin');
$skinType = Context::get('skin_type');
/**
* Preview a layout
* @return void|Object (void : success, Object : fail)
**/
function dispLayoutPreview() {
try
{
// admin check
// this act is admin view but in normal view because do not load admin css/js files
$logged_info = Context::get('logged_info');
if ($logged_info->is_admin != 'Y') return $this->stop('msg_invalid_request');
if($logged_info->is_admin != 'Y')
{
throw new Exception(Context::getLang('msg_invalid_request'));
}
$layout_srl = Context::get('layout_srl');
$code = Context::get('code');
// if module is 'ARTiCLE' and from site design setting, make content directly
if($module == 'ARTICLE' && !$mid)
{
$oDocumentModel = &getModel('document');
$oDocument = $oDocumentModel->getDocument(0, true);
$code_css = Context::get('code_css');
if(!$layout_srl || !$code) return new Object(-1, 'msg_invalid_request');
// Get the layout information
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($layout_srl);
if(!$layout_info) return new Object(-1, 'msg_invalid_request');
// Separately handle the layout if its type is faceoff
if($layout_info && $layout_info->type == 'faceoff') $oLayoutModel->doActivateFaceOff($layout_info);
// Apply CSS directly
Context::addHtmlHeader("<style type=\"text/css\" charset=\"UTF-8\">".$code_css."</style>");
// Set names and values of extra_vars to $layout_info
if($layout_info->extra_var_count) {
foreach($layout_info->extra_var as $var_id => $val) {
$layout_info->{$var_id} = $val->value;
}
}
// menu in layout information becomes an argument for Context:: set
if($layout_info->menu_count) {
foreach($layout_info->menu as $menu_id => $menu) {
if(file_exists($menu->php_file)) @include($menu->php_file);
Context::set($menu_id, $menu);
}
}
$t = Context::getLang('article_preview_title');
Context::set('layout_info', $layout_info);
Context::set('content', Context::getLang('layout_preview_content'));
// Temporary save the codes
$edited_layout_file = sprintf('./files/cache/layout/tmp.tpl');
FileHandler::writeFile($edited_layout_file, $code);
$c = '';
for($i = 0; $i < 4; $i++)
{
$c .= '<p>';
for($j = 0; $j < 20; $j++)
{
$c .= Context::getLang('article_preview_content') . ' ';
}
$c .= '</p>';
}
// Compile
$oTemplate = &TemplateHandler::getInstance();
$attr = new stdClass();
$attr->title = $t;
$attr->content = $c;
$attr->document_srl = -1;
$oDocument->setAttribute($attr, FALSE);
$layout_path = $layout_info->path;
$layout_file = 'layout';
Context::set('oDocument', $oDocument);
$layout_tpl = $oTemplate->compile($layout_path, $layout_file, $edited_layout_file);
Context::set('layout','none');
// Convert widgets and others
$oContext = &Context::getInstance();
Context::set('layout_tpl', $layout_tpl);
// Delete Temporary Files
FileHandler::removeFile($edited_layout_file);
$this->setTemplateFile('layout_preview');
if ($skinType == 'M')
{
$templatePath = './modules/page/m.skins/' . $skin;
$templateFile = 'mobile';
}
else
{
$templatePath = './modules/page/skins/' . $skin;
$templateFile = 'content';
}
}
}
?>
$oTemplate = TemplateHandler::getInstance();
$content = $oTemplate->compile($templatePath, $templateFile);
}
// else use real module
else
{
$content = $this->procRealModule($module, $mid, $skin, $skinType);
}
Context::set('content', $content);
// find layout
if($layoutSrl)
{
if($layoutSrl == -1)
{
$site_srl = ($oModule) ? $oModule->module_info->site_srl : 0;
$designInfoFile = sprintf(_XE_PATH_.'/files/site_design/design_%s.php', $site_srl);
@include($designInfoFile);
if($skinType == 'M')
{
$layoutSrl = $designInfo->mlayout_srl;
}
else
{
$layoutSrl = $designInfo->layout_srl;
}
}
$oLayoutModel = getModel('layout');
$layoutInfo = $oLayoutModel->getLayout($layoutSrl);
// If there is no layout, pass it.
if($layoutInfo)
{
// Adhoc...
// Input extra_vars into $layout_info
if($layoutInfo->extra_var_count)
{
foreach($layoutInfo->extra_var as $var_id => $val)
{
if($val->type == 'image')
{
if(preg_match('/^\.\/files\/attach\/images\/(.+)/i', $val->value))
{
$val->value = Context::getRequestUri() . substr($val->value, 2);
}
}
$layoutInfo->{$var_id} = $val->value;
}
}
// Set menus into context
if($layoutInfo->menu_count)
{
foreach($layoutInfo->menu as $menu_id => $menu)
{
// set default menu set(included home menu)
if(!$menu->menu_srl || $menu->menu_srl == -1)
{
$oMenuAdminController = getAdminController('menu');
$homeMenuCacheFile = $oMenuAdminController->getHomeMenuCacheFile();
if(file_exists($homeMenuCacheFile))
{
@include($homeMenuCacheFile);
}
if(!$menu->menu_srl)
{
$menu->xml_file = str_replace('.xml.php', $homeMenuSrl . '.xml.php', $menu->xml_file);
$menu->php_file = str_replace('.php', $homeMenuSrl . '.php', $menu->php_file);
$layout_info->menu->{$menu_id}->menu_srl = $homeMenuSrl;
}
else
{
$menu->xml_file = str_replace($menu->menu_srl, $homeMenuSrl, $menu->xml_file);
$menu->php_file = str_replace($menu->menu_srl, $homeMenuSrl, $menu->php_file);
}
}
if(file_exists($menu->php_file))
{
@include($menu->php_file);
}
Context::set($menu_id, $menu);
}
}
Context::set('layout_info', $layoutInfo);
}
}
}
catch(Exception $e)
{
$content = '<div class="message error"><p id="preview_error">' . $e->getMessage() . '</p></div>';
Context::set('content', $content);
$layoutSrl = 0;
}
// Compile
$oTemplate = TemplateHandler::getInstance();
Context::clearHtmlHeader();
if($layoutInfo)
{
$layout_path = $layoutInfo->path;
$editLayoutTPL = $this->getRealLayoutFile($layoutSrl);
$editLayoutCSS = $this->getRealLayoutCSS($layoutSrl);
if($editLayoutCSS != '')
{
Context::addCSSFile($editLayoutCSS);
}
$layout_file = 'layout';
$oModuleModel = getModel('module');
$part_config = $oModuleModel->getModulePartConfig('layout', $layoutSrl);
Context::addHtmlHeader($part_config->header_script);
}
else
{
$layout_path = './common/tpl';
$layout_file = 'default_layout';
}
$layout_tpl = $oTemplate->compile($layout_path, $layout_file, $editLayoutTPL);
Context::set('layout','none');
// Convert widgets and others
$oContext = Context::getInstance();
Context::set('layout_tpl', $layout_tpl);
Context::set('admin_bar', 'false');
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('layout_preview');
}
/**
* Get content of real module
*
* @param string $module module name
* @param string $mid module id
* @param string $skin skin name
* @param string $skinType PC(P) or mobile(M)
* @return string content of real module
*/
private function procRealModule($module, $mid, $skin, $skinType)
{
// if form site design and preview module, find target module
if($module && !$mid)
{
$args = new stdClass();
$args->module = $module;
$output = executeQuery('layout.getOneModuleInstanceByModuleName', $args);
if(!$output->toBool())
{
throw new Exception($output->getMessage());
}
// if there is no module instance, error...
if(!$output->data)
{
throw new Exception(Context::getLang('msg_unabled_preview'));
}
$mid = current($output->data)->mid;
}
// if form site design and preview layout, find start module
elseif(!$module && !$mid)
{
$oModuleModel = getModel('module');
$columnList = array('modules.mid', 'sites.index_module_srl');
$startModuleInfo = $oModuleModel->getSiteInfo(0, $columnList);
$mid = $startModuleInfo->mid;
}
$oModuleHandler = new ModuleHandler('', '', $mid, '', '');
// Adhoc...
$oModuleHandler->act = '';
$oModuleHandler->init();
// Adhoc...
$oModuleHandler->module_info->use_mobile = 'Y';
$oModuleHandler->module_info->is_skin_fix = 'Y';
$oModuleHandler->module_info->is_mskin_fix = 'Y';
if($skinType == 'M')
{
Mobile::setMobile(TRUE);
$oModuleHandler->module_info->mskin = $skin;
}
else
{
Mobile::setMobile(FALSE);
$oModuleHandler->module_info->skin = $skin;
}
// Proc module
$oModule = $oModuleHandler->procModule();
if(!$oModule->toBool())
{
throw new Exception(Context::getLang('not_support_layout_preview'));
}
// get module html
require_once("./classes/display/HTMLDisplayHandler.php");
$handler = new HTMLDisplayHandler();
return $handler->toDoc($oModule);
}
/**
* Preview a layout
* @return void|Object (void : success, Object : fail)
*/
function dispLayoutPreview()
{
// admin check
// this act is admin view but in normal view because do not load admin css/js files
$logged_info = Context::get('logged_info');
if($logged_info->is_admin != 'Y') return $this->stop('msg_invalid_request');
$layout_srl = Context::get('layout_srl');
$code = Context::get('code');
$code_css = Context::get('code_css');
if(!$layout_srl || !$code) return new Object(-1, 'msg_invalid_request');
// Get the layout information
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($layout_srl);
if(!$layout_info) return new Object(-1, 'msg_invalid_request');
// Separately handle the layout if its type is faceoff
if($layout_info && $layout_info->type == 'faceoff') $oLayoutModel->doActivateFaceOff($layout_info);
// Apply CSS directly
Context::addHtmlHeader("<style type=\"text/css\" charset=\"UTF-8\">".$code_css."</style>");
// Set names and values of extra_vars to $layout_info
if($layout_info->extra_var_count)
{
foreach($layout_info->extra_var as $var_id => $val)
{
$layout_info->{$var_id} = $val->value;
}
}
// menu in layout information becomes an argument for Context:: set
if($layout_info->menu_count)
{
foreach($layout_info->menu as $menu_id => $menu)
{
if(file_exists($menu->php_file)) @include($menu->php_file);
Context::set($menu_id, $menu);
}
}
Context::set('layout_info', $layout_info);
Context::set('content', Context::getLang('layout_preview_content'));
// Temporary save the codes
$edited_layout_file = sprintf('./files/cache/layout/tmp.tpl');
FileHandler::writeFile($edited_layout_file, $code);
// Compile
$oTemplate = &TemplateHandler::getInstance();
$layout_path = $layout_info->path;
$layout_file = 'layout';
$layout_tpl = $oTemplate->compile($layout_path, $layout_file, $edited_layout_file);
Context::set('layout','none');
// Convert widgets and others
$oContext = &Context::getInstance();
Context::set('layout_tpl', $layout_tpl);
Context::set('admin_bar', 'false');
// Delete Temporary Files
FileHandler::removeFile($edited_layout_file);
$this->setTemplateFile('layout_preview');
}
private function getRealLayoutFile($layoutSrl)
{
$oLayoutModel = getModel('layout');
$layoutFile = $oLayoutModel->getUserLayoutHtml($layoutSrl);
if(file_exists($layoutFile))
{
return $layoutFile;
}
else
{
return '';
}
}
private function getRealLayoutCSS($layoutSrl)
{
$oLayoutModel = getModel('layout');
$cssFile = $oLayoutModel->getUserLayoutCss($layoutSrl);
if(file_exists($cssFile))
{
return $cssFile;
}
else
{
return '';
}
}
}
/* End of file layout.view.php */
/* Location: ./modules/layout/layout.view.php */

View file

@ -0,0 +1,18 @@
<query id="getOneModuleInstanceByModuleName" action="select">
<tables>
<table name="modules" />
</tables>
<columns>
<column name="mid" />
<column name="module_srl" />
</columns>
<conditions>
<condition operation="equal" column="module" var="module" notnull="notnull" />
</conditions>
<navigation>
<index var="sort_index" default="regdate" order="order_type" />
<list_count var="d" default="1" />
<page_count var="d" default="10" />
<page var="d" default="1" />
</navigation>
</query>

View file

@ -1,10 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<ruleset version="1.5.0">
<customrules>
<rule name="imageExtension" type="regex" test="/\.(gif|jpg|jpeg|gif|png|swf|flv)$/i" />
<rule name="imageExtension" type="regex" test="/\.(gif|jpg|jpeg|gif|png|swf|flv)$/i">
<message xml:lang="ko">%s은 gif, png, jpg, swf, flv 파일만 가능합니다.</message>
</rule>
</customrules>
<fields>
<field name="user_layout_image['name']" required="true" rule="imageExtension" />
<field name="user_layout_image" required="true" rule="imageExtension">
<title xml:lang="ko">파일</title>
</field>
<field name="layout_srl" required="true" rule="number" />
</fields>
</ruleset>

View file

@ -1,9 +0,0 @@
<div class="aboutFaceOff">
<h3>{$lang->about_faceoff['title']}</h3>
<p>{$lang->about_faceoff['description']}</p>
<img src="./images/faceoff.gif" border="0" />
<p>{$lang->about_faceoff['layout']}</p>
<p>{$lang->about_faceoff['setting']}</p>
<p>{$lang->about_faceoff['hotkey']}</p>
<p>{$lang->about_faceoff['attribute']}</p>
</div>

View file

@ -1,7 +0,0 @@
<script type="text/javascript">
<!--@if($msg)-->
alert('{$msg}');
<!--@else-->
parent.afterDeleteConfigImage('{$name}');
<!--@end-->
</script>

View file

@ -1,4 +1,4 @@
<script type="text/javascript">
<script>
<!--@if($msg)-->
alert('{$msg}');
<!--@else-->

View file

@ -1,40 +1,43 @@
<script type="text/javascript">
<script>
var newTitle = '{$lang->new_title}';
var layoutTitle = '{$layout->layout_title}';
var addLang = '{$lang->cmd_insert}';
</script>
<load target="js/layout_admin.js" usecdn="true" />
<h1 class="h1">{$lang->cmd_layout_copy}</h1>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/layout/tpl/copy_layout/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form action="./" method="post">
<input type="hidden" name="layout" value="{$layout->layout}" />
<input type="hidden" name="act" value="procLayoutAdminCopyLayout" />
<input type="hidden" name="layout_srl" value="{$layout->layout_srl}" />
<div class="table">
<table width="100%" border="1" cellspacing="0">
<tr>
<th scope="row">{$lang->layout_name}</th>
<td>{$layout->title}</td>
</tr>
<tr>
<th scope="row">{$lang->title}</th>
<td>{$layout->layout_title}</td>
</tr>
</table>
<div class="x_modal-header">
<h1>{$lang->cmd_layout_copy}</h1>
</div>
<div class="table">
<table width="100%" border="1" cellspacing="0" id="inputTable">
<tr>
<th scope="col"><div>{$lang->title}<div></th>
<th scope="col"><div>{$lang->cmd_insert}</div></th>
</tr>
<tr>
<td><input type="text" name="title[]" size="50" /></td>
<td><span class="btn"><input type="button" value="{$lang->cmd_insert}" onclick="addLayoutCopyInputbox()" /></span></td>
</tr>
</table>
<div class="x_modal-body x_form-horizontal" id="inputDiv">
<input type="hidden" name="layout" value="{$layout->layout}" />
<input type="hidden" name="act" value="procLayoutAdminCopyLayout" />
<input type="hidden" name="layout_srl" value="{$layout->layout_srl}" />
<input type="hidden" name="xe_validator_id" value="modules/layout/tpl/copy_layout/1" />
<div class="x_control-group">
<div class="x_control-label">{$lang->layout_name}</div>
<div class="x_controls">{$layout->title}</div>
</div>
<div class="x_control-group">
<div class="x_control-label">{$lang->title}</div>
<div class="x_controls">{$layout->layout_title}</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="">{$lang->new_title}</label>
<div class="x_controls">
<span class="x_input-append">
<input type="text" name="title[]" required placeholder="{$layout->layout_title}" />
<input type="button" value="{$lang->cmd_insert}" onclick="addLayoutCopyInputbox()" class="x_btn" />
</span>
</div>
</div>
</div>
<div class="btnArea">
<span class="btn"><input type="submit" value="{$lang->cmd_save}" /></span>
<div class="x_modal-footer">
<button type="button" class="x_btn x_pull-left" onclick="window.close();">{$lang->cmd_close}</button>
<input type="submit" value="{$lang->cmd_save}" class="x_btn x_btn-primary x_pull-right" />
</div>
</form>

View file

@ -1,3 +0,0 @@
.uploaded_image_list {list-style: none; margin: 0; padding: 0;}
.uploaded_image_list li {display: inline-block; margin-right: 10px;}
.uploaded_image_list img {border: 1px #ccc solid; padding: 3px; width: 96px; height: 96px;}

View file

@ -1,51 +0,0 @@
<!--#include("header.html")-->
<!-- 레이아웃의 목록 -->
<div class="table">
<table width="100%" border="1" cellspacing="0">
<thead>
<tr>
<th scope="col" class="halfwide">{$lang->layout_name}</th>
<th scope="col">{$lang->version}</th>
<th scope="col">{$lang->author}</th>
<th scope="col">{$lang->menu_count}</th>
<th scope="col">{$lang->date}</th>
<th scope="col">{$lang->path}</th>
<th scope="col">{$lang->cmd_make}</th>
</tr>
</thead>
<tbody>
<!--@foreach($layout_list as $key => $val)-->
<!--// 레이아웃 정보 파일(conf/info.xml)가 있는 경우-->
<!--@if($val->title)-->
<tr class="row{$cycle_idx}">
<th rowspan="2"> <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}) </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)}">{$lang->cmd_make}</a></td>
</tr>
<tr>
<td colspan="6" >
{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)}">{$lang->cmd_make}</a></td>
</tr>
<!--@end-->
<!--@end-->
</tbody>
</table>
</div>

View file

@ -1,53 +0,0 @@
<!--#include("header.html")-->
<!-- 레이아웃의 목록 -->
<div class="table">
<table width="100%" border="1" cellspacing="0">
<thead>
<tr>
<th scope="col" class="halfwide">{$lang->layout_name}</th>
<th scope="col">{$lang->version}</th>
<th scope="col">{$lang->author}</th>
<th scope="col">{$lang->menu_count}</th>
<th scope="col">{$lang->date}</th>
<th scope="col">{$lang->path}</th>
<th scope="col">{$lang->cmd_make}</th>
</tr>
</thead>
<tbody>
<!--@foreach($layout_list as $key => $val)-->
<!--// 레이아웃 정보 파일(conf/info.xml)가 있는 경우-->
<!--@if($val->title)-->
<tr class="row{$cycle_idx}">
<th rowspan="2"> <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}) </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')}">{$lang->cmd_make}</a></td>
</tr>
<tr>
<td colspan="6" >
{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>
</div>

View file

@ -1,15 +1,25 @@
<style type="text/css">
#faceoff_migration_info img { border: 1px solid #ccc; padding: 5px; }
<style>
#faceoff_migration_info img {border:1px solid #ccc;padding:5px}
</style>
<h1 class="h1">{$lang->installed_layout}</h1>
<div class="x_page-header">
<h1>
{$lang->installed_layout} <a class="x_icon-question-sign" href="./admin/help/index.html#UMAN_advanced_installed_layout" target="_blank">{$lang->help}</a>
<span cond="$layout_info" class="path" title="{$layout_info->layout}">&gt; {$layout_info->title} v{$layout_info->version}</span>
<span cond="$selected_layout" class="path" title="{$selected_layout->layout}">&gt; {$selected_layout->title} v{$selected_layout->version}</span>
<span cond="$selected_layout" class="path">&gt; {$selected_layout->layout_title}</span>
</h1>
</div>
<div cond="$layout == 'faceoff'" class="message error">
<div cond="$layout == 'faceoff'" class="x_alert x_alert-block">
<p>{$lang->faceoff_migration[0]}</p>
<p><a href="#faceoff_migration_info" class="modalAnchor">{$lang->faceoff_migration[1]}</a></p>
</div>
<div cond="$layout == 'faceoff'" id="faceoff_migration_info" class="modal">
<div class="fg">
<section cond="$layout == 'faceoff'" id="faceoff_migration_info" class="x_modal">
<div class="x_modal-header">
<h1>{$lang->faceoff_migration[1]}</h1>
</div>
<div class="x_modal-body">
<ol>
<li>
<p>{$lang->faceoff_migration[2]}</p>
@ -37,8 +47,21 @@
</li>
</ol>
</div>
</div>
<div class="x_modal-footer">
<button type="button" class="x_btn x_pull-left" data-hide="#faceoff_migration_info">{$lang->cmd_close}</button>
</div>
</section>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
{@
$validator_ids = array(
'modules/layout/tpl/layout_all_instance_list/1' => 1,
'modules/autoinstall/tpl/uninstall/1' => 1,
'modules/layouts/tpl/layout_edit/1' => 1,
'modules/layout/tpl/lyaout_info_view/1' => 1,
'modules/layout/tpl/layout_instance_list/1' => 1,
'modules/layout/tpl/layout_instance_list/2' => 1
);
}
<div cond="$XE_VALIDATOR_MESSAGE && isset($validator_ids[$XE_VALIDATOR_ID])" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,005 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

@ -1,23 +0,0 @@
<block cond="$use_multilang">
<div id="langEdit" class="langEdit tgContent">
<ul class="langList"></ul>
<div class="langInput form">
<h2>{$lang->multilingual} <strong>{$lang->cmd_modify}...</strong> | <a href="#langEdit">{$lang->cmd_insert}</a></h2>
<ul>
{@
/* move current language to the top */
$a = array($lang_type=>$lang_supported[$lang_type]);
unset($lang_supported[$lang_type]);
$lang_supported = array_merge($a, $lang_supported);
}
<li loop="$lang_supported=>$code,$name" class="{$code}"><label for="{$code}_var1">{$name}</label> <input type="text" value="" id="{$code}_var1" /></li>
</ul>
<div class="action">
<div class="btnArea">
<span class="btn small"><input type="submit" value="{$lang->use}|{$lang->use_after_save}" /></span>
</div>
<p><a href="{getUrl('act','dispModuleAdminLangcode')}">{$lang->multilingual_manager}</a></p>
</div>
</div>
</div>
</block>

View file

@ -1,27 +0,0 @@
<block cond="$use_multilang_textarea">
<style type="text/css">
#langEditTextarea textarea { width: 258px; }
</style>
<div id="langEditTextarea" class="langEdit tgContent">
<ul class="langList"></ul>
<div class="langInput form">
<h2>{$lang->multilingual} <strong>{$lang->cmd_modify}...</strong> | <a href="#langEdit">{$lang->cmd_insert}</a></h2>
<ul>
{@
/* move current language to the top */
$a = array($lang_type=>$lang_supported[$lang_type]);
unset($lang_supported[$lang_type]);
$lang_supported = array_merge($a, $lang_supported);
}
<li loop="$lang_supported=>$code,$name" class="{$code}"><label for="{$code}_var1">{$name}</label> <textarea id="{$code}_var1" rows="8" cols="42"></textarea></li>
</ul>
<div class="action">
<div class="btnArea">
<span class="btn small"><input type="submit" value="{$lang->use}|{$lang->use_after_save}" /></span>
</div>
<p><a href="{getUrl('act','dispModuleAdminLangcode')}">{$lang->multilingual_manager}</a></p>
</div>
</div>
</div>
</block>

View file

@ -1,50 +0,0 @@
<!--%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>
<!-- 목록 -->
<div class="table">
<table width="100%" border="1" cellspacing="0">
<thead>
<tr>
<th scope="col">{$lang->no}</th>
<th scope="col">{$lang->layout}</th>
<th scope="col">{$lang->title}</th>
<th scope="col">{$lang->regdate}</th>
<th scope="col" colspan="3">&nbsp;</th>
</tr>
</thead>
<tbody>
<!--@foreach($layout_list as $no => $val)-->
<tr class="row{$cycle_idx}">
<td>{$no+1}</td>
<td>
{$val->layout}
<!--@if($val->module_srl)-->
(module)
<!--@end-->
</td>
<td >{$val->title}</td>
<td>{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-->
</tbody>
</table>
</div>
<div class="btnArea">
<span class="btn"><a href="{getUrl('act','dispLayoutAdminInsert','layout_srl','')}">{$lang->cmd_make}</a></span>
</div>

View file

@ -1,39 +0,0 @@
<!--#include("header.html")-->
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="insertLayout" action="./" method="post">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminInsert" />
<input type="hidden" name="layout_type" value="{$layout_type}" />
<div class="table">
<table width="100%" border="1" cellspacing="0">
<tr>
<th scope="row">{$lang->layout_name}</th>
<td>
<select name="layout">
<option value="faceoff">faceoff</option>
<optgroup label="{$lang->downloaded_list}">
<!--@foreach($layout_list as $key => $val)-->
<option value="{$val->layout}" <!--@if($layout == $val->layout)-->selected="selected"<!--@end-->> <!--@if($val->title)-->{$val->title} ({$val->layout})<!--@else-->{$val->layout}<!--@end--></option>
<!--@end-->
</optgroup>
</select>
</td>
</tr>
<tr>
<th scope="row">{$lang->title}</th>
<td>
<input type="text" name="title" value="{$info->title}" />
<p>{$lang->about_title}</p>
</td>
</tr>
</table>
</div>
<div class="btnArea">
<span class="btn"><input type="submit" value="{$lang->cmd_next}" /></span>
</div>
</form>

View file

@ -1,54 +1,54 @@
<include target="header.html" />
<div class="table even easyList dsTg">
<include target="sub_tab.html" />
<table width="100%" border="1" cellspacing="0">
<caption>
<span class="side"><button type="button" class="text"><span class="hide">{$lang->simple_view}</span><span class="show">{$lang->detail_view}</span></button></span>
</caption>
<thead>
<tr>
<th scope="col" class="title">{$lang->layout_name}</th>
<th scope="col" class="nowr">{$lang->version}</th>
<th scope="col" class="nowr">{$lang->author}</th>
<th scope="col" class="nowr">{$lang->path}</th>
<th scope="col" class="nowr">{$lang->cmd_delete}</th>
</tr>
</thead>
<tbody>
<block loop="$layout_list => $key, $layout">
<tr>
<block cond="$layout->title">
<td class="title">
<p><a href="{getUrl('act', 'dispLayoutAdminInstanceList', 'type', $type, 'layout', $layout->layout)}">{$layout->title}</a></p>
<p>{$layout->description}</p>
<p cond="$layout->need_update == 'Y'" class="update">
{$lang->msg_avail_easy_update} <a href="{$layout->update_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->msg_do_you_like_update}</a>
</p>
</td>
<td class="nowr">{$layout->version}</td>
<td class="nowr">
<block loop="$layout->author => $author">
<a cond="$author->homepage" href="{$author->homepage}" target="_blank">{$author->name}</a>
<block cond="!$author->homepage">{$author->name}</block>
</block>
</td>
<td class="nowr">{$layout->path}</td>
<td class="nowr"><a cond="$layout->remove_url" href="{$layout->remove_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->cmd_delete}</a></td>
</block>
<block cond="!$layout->title">
<td class="title">
<p><a href="{getUrl('act', 'dispLayoutAdminInstanceList', 'type', $type, 'layout', $layout->layout)}">{$layout->layout}</a></p>
<p cond="$layout->need_update == 'Y'" class="update">
{$lang->msg_avail_easy_update} <a href="{$layout->update_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->msg_do_you_like_update}</a>
</p>
</td>
<td class="nowr">-</td>
<td class="nowr">-</td>
<td class="nowr">{$layout->path}</td>
<td class="nowr"><a cond="$layout->remove_url" href="{$layout->remove_url}&amp;return_url={urlencodegetRequestUriByServerEnviroment()}">{$lang->cmd_delete}</a></td>
</block>
</tr>
<table class="x_table x_table-striped x_table-hover dsTg">
<caption>
<div class="x_pull-right x_btn-group">
<button class="x_btn x_active __simple">{$lang->simple_view}</button>
<button class="x_btn __detail">{$lang->detail_view}</button>
</div>
</caption>
<thead>
<tr>
<th scope="col" class="nowr">{$lang->layout_name}</th>
<th scope="col" class="nowr">{$lang->version}</th>
<th scope="col" class="nowr">{$lang->author}</th>
<th scope="col" class="nowr">{$lang->path}</th>
<th scope="col" class="nowr">{$lang->cmd_delete}</th>
</tr>
</thead>
<tbody>
<tr loop="$layout_list => $key, $layout">
<block cond="$layout->title">
<td class="title">
<p><a href="{getUrl('act', 'dispLayoutAdminInstanceList', 'type', $type, 'layout', $layout->layout)}">{$layout->title}</a></p>
<p>{$layout->description}</p>
<p cond="$layout->need_update == 'Y'" class="update">
{$lang->msg_avail_easy_update} <a href="{$layout->update_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->msg_do_you_like_update}</a>
</p>
</td>
<td>{$layout->version}</td>
<td>
<block loop="$layout->author => $author">
<a cond="$author->homepage" href="{$author->homepage}" target="_blank">{$author->name}</a>
<block cond="!$author->homepage">{$author->name}</block>
</block>
</td>
<td>{$layout->path}</td>
<td class="nowr"><a cond="$layout->remove_url" class="x_btn x_btn-link" href="{$layout->remove_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->cmd_delete}</a></td>
</block>
</tbody>
</table>
</div>
<block cond="!$layout->title">
<td class="title">
<p><a href="{getUrl('act', 'dispLayoutAdminInstanceList', 'type', $type, 'layout', $layout->layout)}">{$layout->layout}</a></p>
<p cond="$layout->need_update == 'Y'" class="update">
{$lang->msg_avail_easy_update} <a href="{$layout->update_url}&amp;return_url={urlencode(getRequestUriByServerEnviroment())}">{$lang->msg_do_you_like_update}</a>
</p>
</td>
<td>-</td>
<td>-</td>
<td>{$layout->path}</td>
<td class="nowr"><a cond="$layout->remove_url" class="x_btn x_btn-link" href="{$layout->remove_url}&amp;return_url={urlencodegetRequestUriByServerEnviroment()}">{$lang->cmd_delete}</a></td>
</block>
</tr>
</tbody>
</table>

View file

@ -1,15 +1,3 @@
jQuery(document).ready(function($){
$('.uploaded_image').css('cursor', 'pointer');
$('.uploaded_image_path').hide();
$('.uploaded_image').bind('click', function(e){
var path = $(this).siblings('.uploaded_image_path').html();
var html = '<div class="selected_image_path">' + path + '</div>';
$('.selected_image_path').remove();
$('.uploaded_image_list').after(html);
});
});
function doPreviewLayoutCode()
{
var $form = jQuery('#fo_layout'), $act = $form.find('input[name=act]');
@ -21,4 +9,4 @@ function doPreviewLayoutCode()
$form.removeAttr('target');
$act.val(og_act);
}
}

View file

@ -51,16 +51,21 @@ function deleteFile(layout_srl,filename){
function addLayoutCopyInputbox()
{
var html = '<tr>';
html += '<td><input type="text" name="title[]" size="50" /></td>';
html += '<td><span class="btn"><input type="button" value="'+addLang+'" onclick="addLayoutCopyInputbox()" /></span></td>';
html += '</tr>';
var html = '<div class="x_control-group">';
html += '<label class="x_control-label" for="">'+newTitle+'</label>';
html += '<div class="x_controls">';
html += '<span class="x_input-append">';
html += '<input type="text" name="title[]" required placeholder="'+layoutTitle+'" />';
html += '<input type="button" value="'+addLang+'" onclick="addLayoutCopyInputbox()" class="x_btn" />';
html += '</span>';
html += '</div>';
html += '</div>';
var it = jQuery('#inputTable');
var it = jQuery('#inputDiv');
it.append(html);
it.find('SPAN.btn').hide();
it.find('TR:last-child SPAN.btn').show();
it.find('input.x_btn').hide();
it.find('>div:last-child').find('input.x_btn').show();
}
(function($){

View file

@ -0,0 +1,13 @@
function initHtmlCSSView()
{
var $ = jQuery;
$('.uploaded_image').css('cursor', 'pointer');
$('.uploaded_image_path').hide();
$('.uploaded_image').bind('click', function(e){
var path = $(this).find('.uploaded_image_path').html();
var html = '<div class="x_well selected_image_path">' + path + '</div>';
$('.selected_image_path').remove();
$('.uploaded_image_list').after(html);
});
}

View file

@ -1,50 +1,45 @@
<script type="text/javascript">
xe.lang.confirm_delete = '{$lang->confirm_delete}';
</script>
<include target="header.html" />
<load target="js/adminList.js" usecdn="true" />
<div class="table even easyList">
<script>
xe.lang.confirm_delete = '{$lang->confirm_delete}';
</script>
<include target="sub_tab.html" />
<table width="100%" border="1" cellspacing="0">
<caption>
<span class="side"><button type="button" class="text"><span class="hide">{$lang->simple_view}</span><span class="show">{$lang->detail_view}</span></button></span>
</caption>
<thead>
<tr>
<th scope="col" class="nowr">{$lang->number}</th>
<th scope="col" class="nowr">{$lang->layout_name}</th>
<th scope="col" class="title">{$lang->title}</th>
<th scope="col" class="nowr">{$lang->regdate}</th>
<th scope="col" class="nowr">{$lang->cmd_layout_management}</th>
<th scope="col" class="nowr">{$lang->cmd_layout_edit}</th>
<th scope="col" class="nowr">{$lang->cmd_copy}</th>
<th scope="col" class="nowr">{$lang->cmd_delete}</th>
</tr>
</thead>
<tbody>
{@$count=1}
<!--@foreach($layout_list as $layout)-->
{@$layout_name = $layout['title']}
{@unset($layout['title'])}
<tr loop="$layout => $no, $item">
<td class="nowr" rowspan="{count($layout)}" cond="$no === 0" >{$count++}</td>
<td class="nowr" rowspan="{count($layout)}" cond="$no === 0" >{$layout_name}</td>
<td class="title">{$item->title}</td>
<td class="nowr">{zdate($item->regdate, "Y-m-d")}</td>
<td class="nowr"><a href="{getUrl('act', 'dispLayoutAdminModify', 'layout_srl', $item->layout_srl)}">{$lang->cmd_layout_management}</a></td>
<td class="nowr"><a href="{getUrl('act', 'dispLayoutAdminEdit', 'layout_srl', $item->layout_srl)}">{$lang->cmd_layout_edit}</a></td>
<td class="nowr"><a href="{getUrl('', 'module', 'layout', 'act', 'dispLayoutAdminCopyLayout', 'layout_srl', $item->layout_srl)}" onclick="popopen(this.href);return false;" title="{$lang->cmd_copy}">{$lang->cmd_copy}</a></td>
<td class="nowr">
<form class="layout_delete_form" ruleset="deleteLayout" action="./" method="post">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminDelete" />
<input type="hidden" name="layout_srl" value="{$item->layout_srl}" />
<input class="text" type="submit" value="{$lang->cmd_delete}" />
</form>
</td>
</tr>
<!--@end-->
</tbody>
</table>
</div>
<table class="x_table x_table-striped x_table-hover">
<thead>
<tr>
<th scope="col" class="nowr">{$lang->number}</th>
<th scope="col" class="nowr">{$lang->layout_name}</th>
<th scope="col" class="nowr">{$lang->title}</th>
<th scope="col" class="nowr">{$lang->regdate}</th>
<th scope="col" class="nowr">{$lang->cmd_setup}</th>
<th scope="col" class="nowr">{$lang->cmd_edit}</th>
<th scope="col" class="nowr">{$lang->cmd_copy}</th>
<th scope="col" class="nowr">{$lang->cmd_delete}</th>
</tr>
</thead>
<tbody>
{@$count=1}
<!--@foreach($layout_list as $layout)-->
{@$layout_name = $layout['title']}
{@unset($layout['title'])}
<tr loop="$layout => $no, $item">
<td rowspan="{count($layout)}" cond="$no === 0" >{$count++}</td>
<td rowspan="{count($layout)}" cond="$no === 0" >{$layout_name}</td>
<td>{$item->title}</td>
<td>{zdate($item->regdate, "Y-m-d")}</td>
<td><a href="{getUrl('act', 'dispLayoutAdminModify', 'layout_srl', $item->layout_srl)}">{$lang->cmd_setup}</a></td>
<td><a href="{getUrl('act', 'dispLayoutAdminEdit', 'layout_srl', $item->layout_srl)}">{$lang->cmd_edit}</a></td>
<td><a href="{getUrl('', 'module', 'layout', 'act', 'dispLayoutAdminCopyLayout', 'layout_srl', $item->layout_srl)}" onclick="popopen(this.href);return false;" title="{$lang->cmd_copy}">{$lang->cmd_copy}</a></td>
<td>
<form cond="count($layout) > 1" class="layout_delete_form" ruleset="deleteLayout" action="./" method="post">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminDelete" />
<input type="hidden" name="layout_srl" value="{$item->layout_srl}" />
<input class="x_btn x_btn-link" type="submit" value="{$lang->cmd_delete}" />
<input type="hidden" name="xe_validator_id" value="modules/layout/tpl/layout_all_instance_list/1" />
</form>
</td>
</tr>
<!--@end-->
</tbody>
</table>

View file

@ -1,79 +0,0 @@
<h1 class="h1">{$lang->layout_maker}</h1>
<div class="table">
<table width="100%" border="1" cellspacing="0">
<tr>
<th scope="row"><div>{$lang->title}</div></th>
<td>{$layout_info->title} ver {$layout_info->version}</td>
</tr>
<tr>
<th scope="row"><div>{$lang->author}</div></th>
<td>
<!--@foreach($layout_info->author as $author)-->
{$author->name} <!--@if($author->homepage || $author->email_address)-->(<!--@if($author->homepage)--><a href="{$author->homepage}" onclick="window.open(this.href);return false;">{$author->homepage}</a><!--@end--><!--@if($author->homepage && $author->email_address)-->, <!--@end--><!--@if($author->email_address)--><a href="mailto:{$author->email_address}">{$author->email_address}</a><!--@end-->)<!--@end--><br />
<!--@endforeach-->
</td>
</tr>
<!--@if($layout_info->homepage)-->
<tr>
<th scope="row"><div>{$lang->homepage}</div></th>
<td><a href="{$layout_info->author->homepage}" onclick="window.open(this.href);return false;">{$layout_info->homepage}</a></td>
</tr><!--@end-->
<tr>
<th scope="row"><div>{$lang->regdate}</div></th>
<td>{zdate($layout_info->date, 'Y-m-d')}</td>
</tr>
<!--@if($layout_info->license || $layout_info->license_link)-->
<tr>
<th scope="row"><div>{$lang->layout_license}</div></th>
<td>
{nl2br(trim($layout_info->license))}
<!--@if($layout_info->license_link)-->
<p><a href="{$layout_info->license_link}" onclick="window.close(); return false;">{$layout_info->license_link}</a></p>
<!--@end-->
&nbsp;
</td>
</tr><!--@end-->
<!--@if($layout_info->description)-->
<tr>
<th scope="row"><div>{$lang->description}</div></th>
<td>{nl2br(trim($layout_info->description))}</td>
</tr><!--@end-->
</table>
</div>
<!--@if($layout_info->history)-->
<h1 class="h1">{$lang->layout_history}</h1>
<div class="table">
<table width="100%" border="1" cellspacing="0">
<!--@foreach($layout_info->history as $history)-->
<tr class="row{$cycle_idx}">
<th scope="row"><div>
{$history->version}<br />
{zdate($history->date, 'Y-m-d')}
</div></th>
<td>
<!--@foreach($history->author as $author)-->
<p>{$author->name} (<a href="{$author->homepage}" onclick="window.open(this.href);return false;">{$author->homepage}</a> / <a href="mailto:{$author->email_address}">{$author->email_address}</a>)</p>
<!--@endforeach-->
<!--@if($history->description)-->
<p>{nl2br(trim($history->description))}</p>
<!--@endif-->
<!--@if($history->logs)-->
<ul>
<!--@foreach($history->logs as $log)-->
<!--@if($log->link)-->
<li><a href="{$log->link}" onclick="window.close(); return false;">{$log->text}</a></li>
<!--@else-->
<li>{$log->text}</li>
<!--@endif-->
<!--@endforeach-->
</ul>
<!--@endif-->
</td>
</tr>
<!--@endforeach-->
</table>
</div>
<!--@endif-->

View file

@ -1,89 +1,96 @@
<include target="header.html" />
<load target="css/adminEdit.css" usecdn="true" />
<load target="js/adminEdit.js" usecdn="true" />
<h2 class="h2">{$selected_layout->layout_title}</h2>
<h3 class="h3">{$selected_layout->title} ver {$selected_layout->version} ({$selected_layout->layout})</h3>
<p>{nl2br($lang->about_layout_code)}</p>
<section class="section">
<h1>{$lang->layout_image_repository}</h1>
<p>{nl2br($lang->about_layout_image_repository)}</p>
<h3 class="h3">{$lang->layout_image_repository}</h3>
<p>{nl2br($lang->about_layout_image_repository)}</p>
<fieldset class="section">
<ul class="uploaded_image_list">
<li loop="$layout_image_list => $no, $file">
<ul class="x_thumbnails uploaded_image_list">
<li loop="$layout_image_list => $no, $file" class="x_span2" style="float:none;display:inline-block;_display:inline;zoom:1;vertical-align:top">
{@$ext=substr(strrchr($file,'.'),1)}
<div class="a uploaded_image">
<script cond="$ext == 'swf' || $ext == 'flv'" type="text/javascript">
<div class="x_thumbnail a uploaded_image x_clearfix">
<script cond="$ext == 'swf' || $ext == 'flv'">
//<![CDATA[
displayMultimedia('{getUrl('')}{$layout_image_path}{$file}', '100px', '100px');
//]]>
</script>
<img cond="$ext != 'swf' && $ext != 'flv'" src="{getUrl('')}{$layout_image_path}{$file}" />
<div style="width:100%;word-wrap:break-word">
<p class="uploaded_image_path" style="margin:5px 0 0 0;font:11px/1.25 Tahoma, Geneva, sans-serif">{$layout_image_path}{$file}</p>
<form action="./" method="post" class="x_pull-right" style="margin:0;padding:0">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminUserImageDelete" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="filename" value="{$file}" />
<input class="x_icon-remove" type="submit" value="{$lang->cmd_delete}" title="{$lang->cmd_delete}" style="width:14px" />
</form>
</div>
</div>
<div class="uploaded_image_path">{$layout_image_path}{$file}</div>
<form action="./" method="post">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminUserImageDelete" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="filename" value="{$file}" />
<input class="text" type="submit" value="{$lang->cmd_delete}" />
</form>
</li>
</ul>
<form class="form" ruleset="imageUpload" action="./" method="post" enctype="multipart/form-data">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminUserImageUpload" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<ul>
<li>
<p class="a"><input type="file" name="user_layout_image" value="" /> <span class="desc">{$lang->msg_layout_image_target}</span></p>
</li>
</ul>
<div class="btnArea">
<span class="btn medium"><input type="submit" value="{$lang->cmd_save}" /></span>
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/layout/tpl/layout_edit/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="imageUpload" action="./" method="post" enctype="multipart/form-data">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminUserImageUpload" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="xe_validator_id" value="modules/layout/tpl/layout_edit/1" />
<p>
<input type="file" name="user_layout_image" value="" title="{$lang->uploaded_file}" />
<span class="x_help-inline">{$lang->msg_layout_image_target}</span>
</p>
<div class="x_clearfix btnArea">
<div class="x_pull-right">
<button type="submit" class="x_btn x_btn-primary">{$lang->cmd_save}</button>
</div>
</div>
</form>
</fieldset>
</section>
<block cond="$selected_layout->type == 'faceoff'">
<fieldset class="section">
<h3 class="h3">{$lang->faceoff_export}</h3>
<section class="section">
<h1>{$lang->faceoff_export}</h1>
<p>{nl2br($lang->about_faceoff_export)}</p>
<ul class="form">
<li>
<p class="q">{$lang->layout_export}</p>
<p class="a"><span class="btn small"><a href="{getUrl('', 'act', 'procLayoutAdminUserLayoutExport', 'layout_srl', $layout_srl)}">{$lang->layout_btn_export}</a></span></p>
<p class="desc">{$lang->about_layout_export}</p>
</li>
</ul>
</fieldset>
<p>
<a class="x_btn" href="{getUrl('', 'act', 'procLayoutAdminUserLayoutExport', 'layout_srl', $layout_srl)}">{$lang->layout_btn_export}</a>
</p>
</section>
</block>
<fieldset class="section">
<form id="fo_layout" class="form" ruleset="codeUpdate" action="./" method="post">
<form id="fo_layout" ruleset="codeUpdate" action="./" method="post">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="act" value="procLayoutAdminCodeUpdate" />
<input type="hidden" name="xe_validator_id" value="modules/layouts/tpl/layout_edit/1" />
<h3 class="h3">HTML</h3>
<div>
<textarea name="code" rows="8" cols="42" style="width:100%;height:300px;font-size:11px;">{$layout_code}</textarea>
<span loop="$widget_list => $widget" class="btn"><a href="{getUrl('','module','admin','act','dispWidgetAdminGenerateCode','selected_widget',$widget->widget)}" target="_blank">{$widget->title}</a></span>
<section class="section">
<h1>HTML</h1>
<div style="margin-right:14px">
<textarea name="code" rows="8" cols="42" style="width:100%;height:300px;font:12px 'Courier New', Courier, monospace">{$layout_code}</textarea>
</div>
<div>
<block loop="$widget_list => $widget"> <i>|</i> <a href="{getUrl('','module','admin','act','dispWidgetAdminGenerateCode','selected_widget',$widget->widget)}" target="_blank">{$widget->title}</a></block>
</div>
</section>
<h3 class="h3">CSS</h3>
<div>
<textarea name="code_css" rows="8" cols="42" style="width:100%;height:300px;font-size:11px;">{$layout_code_css}</textarea>
<section class="section">
<h1>CSS</h1>
<div style="margin-right:14px">
<textarea name="code_css" rows="8" cols="42" style="width:100%;height:300px;font:12px 'Courier New', Courier, monospace">{$layout_code_css}</textarea>
</div>
<div class="btnArea" style="float: left" >
<span class="btn medium"><button type="submit" name="mode" value="reset">{$lang->cmd_reset}</button></span>
</div>
<div class="btnArea">
<span class="btn medium"><button type="button" onclick="doPreviewLayoutCode();">{$lang->cmd_preview}</button></span>
<span class="btn medium"><button type="submit" name="mode" value="save">{$lang->cmd_save}</button></span>
</div>
</form>
</fieldset>
</section>
<div class="x_clearfix btnArea">
<span class="x_pull-left">
<button type="submit" class="x_btn" name="mode" value="reset">{$lang->cmd_reset}</button>
</span>
<span class="x_pull-right x_btn-group">
<button type="button" class="x_btn" onclick="doPreviewLayoutCode()">{$lang->cmd_preview}</button>
<button type="submit" class="x_btn x_btn-primary" name="mode" value="save">{$lang->cmd_save}</button>
</span>
</div>
</form>

View file

@ -0,0 +1,100 @@
<section class="section">
<h1>{$lang->layout_image_repository}</h1>
<p>{nl2br($lang->about_layout_image_repository)}</p>
<ul class="x_thumbnails uploaded_image_list">
<li loop="$layout_image_list => $no, $file" class="x_span2" style="float:none;display:inline-block;_display:inline;zoom:1;vertical-align:top">
{@$ext=substr(strrchr($file,'.'),1)}
<div class="x_thumbnail a uploaded_image x_clearfix">
<script cond="$ext == 'swf' || $ext == 'flv'">
//<![CDATA[
displayMultimedia('{getUrl('')}{$layout_image_path}{$file}', '100px', '100px');
//]]>
</script>
<img cond="$ext != 'swf' && $ext != 'flv'" src="{getUrl('')}{$layout_image_path}{$file}" />
<div style="width:100%;word-wrap:break-word">
<p class="uploaded_image_path" style="margin:5px 0 0 0;font:11px/1.25 Tahoma, Geneva, sans-serif">{$layout_image_path}{$file}</p>
<form action="./" method="post" class="x_pull-right" style="margin:0;padding:0">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminUserImageDelete" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="filename" value="{$file}" />
<input class="x_icon-remove" type="submit" value="{$lang->cmd_delete}" title="{$lang->cmd_delete}" style="width:14px" />
</form>
</div>
</div>
</li>
</ul>
<form ruleset="imageUpload" action="./" method="post" enctype="multipart/form-data">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminUserImageUpload" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="file" name="user_layout_image" value="" title="{$lang->uploaded_file}" />
<p>{$lang->msg_layout_image_target}</p>
<div class="x_clearfix btnArea">
<div class="x_pull-right">
<button type="submit" class="x_btn x_btn-primary">{$lang->cmd_upload}</button>
</div>
</div>
</form>
</section>
<block cond="$selected_layout->type == 'faceoff'">
<section class="section">
<h1>{$lang->faceoff_export}</h1>
<p>{nl2br($lang->about_faceoff_export)}</p>
<p>
<a class="x_btn" href="{getUrl('', 'act', 'procLayoutAdminUserLayoutExport', 'layout_srl', $layout_srl)}">{$lang->layout_btn_export}</a>
</p>
</section>
</block>
<form id="fo_layout" ruleset="codeUpdate" action="./" method="post">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="act" value="procLayoutAdminCodeUpdate" />
<textarea name="code_css" rows="8" cols="42" style="display:none;width:100%;height:300px;font:12px 'Courier New', Courier, monospace">{$layout_code_css}</textarea>
<section class="section">
<h1>HTML</h1>
<div style="margin-right:14px">
<textarea name="code" rows="8" cols="42" style="width:100%;height:300px;font:12px 'Courier New', Courier, monospace">{$layout_code}</textarea>
</div>
<div>
<block loop="$widget_list => $widget"> <i class="vr">|</i> <a href="{getUrl('','module','admin','act','dispWidgetAdminGenerateCode','selected_widget',$widget->widget)}" target="_blank">{$widget->title}</a></block>
</div>
</section>
<div class="x_clearfix btnArea">
<span class="x_pull-left">
<button type="submit" class="x_btn" name="mode" value="reset">{$lang->cmd_reset}</button>
</span>
<span class="x_pull-right">
<button type="submit" class="x_btn x_btn-primary" name="mode" value="save">{$lang->cmd_save}</button>
</span>
</div>
</form>
<form id="fo_layout" ruleset="codeUpdate" action="./" method="post">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="act" value="procLayoutAdminCodeUpdate" />
<textarea name="code" rows="8" cols="42" style="display:none;width:100%;height:300px;font:12px 'Courier New', Courier, monospace">{$layout_code}</textarea>
<section class="section">
<h1>CSS</h1>
<div style="margin-right:14px">
<textarea name="code_css" rows="8" cols="42" style="width:100%;height:300px;font:12px 'Courier New', Courier, monospace">{$layout_code_css}</textarea>
</div>
</section>
<div class="x_clearfix btnArea">
<span class="x_pull-left">
<button type="submit" class="x_btn" name="mode" value="reset">{$lang->cmd_reset}</button>
</span>
<span class="x_pull-right">
<button type="submit" class="x_btn x_btn-primary" name="mode" value="save">{$lang->cmd_save}</button>
</span>
</div>
</form>

View file

@ -1,26 +0,0 @@
<!--%import("js/layout_image_list.js")-->
<!--%import("js/layout_admin.js")-->
<!--%import("../../admin/tpl/css/admin.css")-->
<h1 class="h1">레이아웃 이미지 목록</h1>
<!--@foreach($layout_image_list as $no => $file)-->
{@$ext=substr(strrchr($file,'.'),1)}
<div class="filebox_preview_{$val->module_filebox_srl}" style="width:100px;height:100px;float:left; position:relative;margin-right:10px; ">
<!--@if($ext=='swf'||$ext=='flv')-->
<script type="text/javascript">//<![CDATA[
displayMultimedia('{getUrl('')}{$layout_image_path}{$file}', '100%', '100%');
//]]></script>
<!--@elseif(in_array($ext,array('gif','png','jpg','jpeg')))-->
<img src="{getUrl('')}{$layout_image_path}{$file}" width="100%" height="100%" />
<!--@end-->
<span class="btn"><button type="button" onclick="selectLayoutImage(request_uri+'{$layout_image_path}{$file}');">{$lang->cmd_select}</button></span>
</div>
<!--@end-->
<form action="{Context::getRequestUri()}" target="hidden_iframe" method="post" onsubmit="return checkFile(this)" enctype="multipart/form-data">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminUserImageUpload" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input name="user_layout_image" type="file" />
<span class="button black strong"><button type="submit">{$lang->cmd_save}</button></span>
</form>
<iframe name="hidden_iframe" style="width:0;height:0;border:0"></iframe>

View file

@ -0,0 +1,176 @@
<form id="config_form" ruleset="updateLayout" action="./" enctype="multipart/form-data" method="post">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminUpdate" />
<input type="hidden" name="is_sitemap" value="{$is_sitemap}" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="layout" value="{$selected_layout->layout}" />
<input type="hidden" name="_layout_type" value="{$selected_layout->layout_type}" />
<input type="hidden" name="xe_validator_id" value="modules/layout/tpl/lyaout_info_view/1" />
<!--// For submit config. Do not delete this division. -->
<div></div>
</form>
<section id="layout_config" class="x_form-horizontal">
<div cond="$selected_layout->path" class="x_control-group">
<label class="x_control-label">{$lang->path}</label>
<div class="x_controls" style="padding-top:5px">
{$selected_layout->path}
</div>
</div>
<div cond="$selected_layout->description" class="x_control-group">
<label class="x_control-label">{$lang->description}</label>
<div class="x_controls" style="padding-top:5px">
{$selected_layout->description}
</div>
</div>
<div cond="$selected_layout->author" class="x_control-group">
<label class="x_control-label">{$lang->author}</label>
<div class="x_controls" style="padding-top:5px">
<block loop="$selected_layout->author=>$author_info">
<!--@if($author_info->homepage)-->
<a href="{$author_info->homepage}" target="_blank">{$author_info->name}</a>
<!--@else-->
{$author_info->name}
<!--@end-->
</block>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="title">{$lang->title} <em>*</em></label>
<div class="x_controls">
<input type="text" id="title" name="title" value="{$selected_layout->layout_title}" />
<span class="x_help-block">{$lang->about_title}</span>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="header_script">{$lang->header_script}</label>
<div class="x_controls">
<textarea name="header_script" id="header_script" rows="4" cols="42">{$selected_layout->header_script}</textarea>
<span class="x_help-block">{$lang->about_header_script}</span>
</div>
</div>
<section class="section" cond="count($selected_layout->extra_var)">
<h1>{$lang->extra_vars}</h1>
{@$cnt = 1}
<block loop="$selected_layout->extra_var => $name, $var">
<block cond="$cnt == 1 && $var->group"><div class="x_tabbable"><ul class="x_nav x_nav-tabs"></block>
<block cond="$group != $var->group">
<li class="x_active"|cond="$cnt == 1"><a href="#extra_var{$cnt}" data-index="{$cnt}">{$var->group}</a></li>
{@$group = $var->group}
{@$cnt ++}
</block>
</block>
</ul>
{@$group = ''}
{@$cnt = 1}
<block loop="$selected_layout->extra_var => $name, $var">
<block cond="$cnt == 1 && $var->group"><div class="x_tab-content"></block>
<block cond="$group != $var->group">
<block cond="$cnt != 1"></div></block>
<div style="display: none;"|cond="$cnt != 1" id="extra_var{$cnt}" class="x_tab-pane <!--@if($cnt == 1)-->x_active<!--@end-->" data-index="{$cnt}">
{@$group = $var->group}
{@$cnt ++}
</block>
<div class="x_control-group">
<label class="x_control-label" for="{$name}"|cond="$var->type!='text'&&$var->type!='textarea'" for="lang_{$name}"|cond="$var->type=='text'||$var->type=='textarea'">{$var->title}</label>
<div class="x_controls">
<div cond="$var->type == 'text'">
<input type="text" name="{$name}" id="{$name}" class="lang_code" value="<!--@if(strpos($var->value, "$user_lang->") !== false)-->{htmlspecialchars($var->value)}<!--@else-->{$var->value}<!--@end-->" />
</div>
<div cond="$var->type == 'textarea'">
{@$use_multilang_textarea = true}
<textarea name="{$name}" rows="4" cols="42" class="lang_code"><!--@if(strpos($var->value, "$user_lang->") !== false)-->{htmlspecialchars($var->value)}<!--@else-->{$var->value}<!--@end--></textarea>
</div>
<block cond="$var->type == 'image'">
<input type="hidden" name="{$name}" id="file_{$name}" value="{$var->value}" />
<div id="preview_{$name}" class="x_thumbnail" style="<!--@if(!$var->value)-->display:none;<!--@end-->max-width:210px;margin-bottom:20px;">
<img src="../../../{$var->value}"|cond="$var->value" alt="" style="max-width:100%" />
<div style="text-align:right">
<button class="x_icon-remove" type="button" onclick="deleteImage('{$name}')" title="{$lang->cmd_delete}">{$lang->cmd_delete}</button>
</div>
</div>
<form action="./" enctype="multipart/form-data" method="post" target="hiddenIframe" class="imageUpload" style="margin:0">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminConfigImageUpload" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="name" value="{$name}" />
<p>
<input type="file" name="img" id="file_select_{$name}" value="" title="{$lang->uploaded_file}" />
<input class="x_btn" type="submit" value="{$lang->cmd_submit}" style="vertical-align:top" />
</p>
</form>
</block>
<select cond="$var->type == 'select'" name="{$name}" id="{$name}" style="width:auto">
<option loop="$var->options => $key, $val" value="{$key}" selected="selected"|cond="$key == $var->value">{$val->val}</option>
</select>
<block cond="$var->type == 'checkbox'">
<block loop="$var->options => $key, $val">
<label class="x_inline"><input type="checkbox" name="{$name}[]" value="{$key}" checked="checked"|cond="@in_array($key, $var->value)" /> {$val->val}</label>
</block>
</block>
<block cond="$var->type == 'radio'">
<div class="x_thumbnails">
<block loop="$var->options => $key, $val">
<div class="x_span2 <!--@if($val->thumbnail)-->x_thumbnail<!--@end-->">
<img src="../../../{$val->thumbnail}" cond="$val->thumbnail" alt="{$val->val}" />
<div class="x_caption">
<label><input type="radio" name="{$name}" value="{$key}" checked="checked"|cond="$key == $var->value" /> {$val->val}</label>
</div>
</div>
</block>
</div>
</block>
<block cond="$var->type == 'colorpicker'">
{@ $use_colorpicker = true; }
<input type="text" class="color-indicator" name="{$name}" id="{$name}" value="{$var->value}" />
<p id="categoy_color_help" hidden style="margin:8px 0 0 0">{$lang->about_category_color}</p>
</block>
<p class="x_help-block">{$var->description}</p>
</div>
</div>
</block>
<block cond="$group"></div></div></block>
</section>
<section class="section">
<h1 cond="$selected_layout->menu">{$lang->menu}</h1>
<div cond="$selected_layout->menu" class="x_form-horizontal">
<div loop="$selected_layout->menu => $menu_name, $menu_info" class="x_control-group">
<label class="x_control-label" for="{$menu_name}">{$menu_info->title}({$menu_name})</label>
<div class="x_controls">
<select name="{$menu_name}" id="{$menu_name}">
<option value="0">{$lang->cmd_select}</option>
<option selected="selected"|cond="!$menu_info->menu_srl||$menu_info->menu_srl == -1" value="-1">{$lang->sitemap_with_homemenu}</option>
<option loop="$menu_list => $key, $val" value="{$val->menu_srl}" selected="selected"|cond="$val->menu_srl == $menu_info->menu_srl">{$val->title}</option>
</select>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->not_apply_menu}</label>
<div class="x_controls">
<label class="x_inline"><input type="checkbox" name="apply_layout" id="apply_layout" value="Y" /> {$lang->about_not_apply_menu}</label>
</div>
</div>
</div>
</section>
<div class="x_clearfix btnArea">
<span class="etc">
<a cond="$layout" class="x_btn" href="{getUrl('', 'module', 'admin', 'act', 'dispLayoutAdminInstanceList', 'layout', $selected_layout->layout)}">{$lang->cmd_list}</a>
<a cond="!$layout" class="x_btn" href="{getUrl('', 'module', 'admin', 'act', 'dispLayoutAdminAllInstanceList')}">{$lang->cmd_list}</a>
</span>
<span class="x_btn-group x_pull-right">
<input class="x_btn x_btn-primary" type="submit" value="{$lang->cmd_save}" onclick="doSubmitConfig()"/>
</span>
</div>
</section>
<iframe name="hiddenIframe" src="about:blank" hidden></iframe>
<!--@if($use_colorpicker)-->
<!--%load_js_plugin("ui.colorpicker")-->
<!--@end-->

View file

@ -1,83 +1,107 @@
<include target="header.html" />
<load target="js/adminList.js" usecdn="true" />
<script type="text/javascript">
xe.lang.confirm_delete = '{$lang->confirm_delete}';
<script>
xe.lang.confirm_delete = '{$lang->confirm_delete}';
</script>
<h2 class="h2">{$layout_info->title} ver {$layout_info->version} ({$layout_info->layout})</h2>
<div class="table even easyList">
<table width="100%" border="1" cellspacing="0">
<thead>
<tr>
<th scope="col" class="nowr">{$lang->no}</th>
<th scope="col" class="title">{$lang->title}</th>
<th scope="col" class="nowr">{$lang->regdate}</th>
<th scope="col" class="nowr">{$lang->cmd_layout_management}</th>
<th scope="col" class="nowr">{$lang->cmd_layout_edit}</th>
<th scope="col" class="nowr">{$lang->cmd_copy}</th>
<th scope="col" class="nowr">{$lang->cmd_delete}</th>
</tr>
</thead>
<tbody>
<tr loop="$layout_list => $no, $layout">
<td class="nowr">{$no+1}</td>
<td class="title">{$layout->title}</td>
<td class="nowr">{zdate($layout->regdate, "Y-m-d")}</td>
<td class="nowr"><a href="{getUrl('act', 'dispLayoutAdminModify', 'layout_srl', $layout->layout_srl)}">{$lang->cmd_layout_management}</a></td>
<td class="nowr"><a href="{getUrl('act', 'dispLayoutAdminEdit', 'layout_srl', $layout->layout_srl)}">{$lang->cmd_layout_edit}</a></td>
<td class="nowr"><a href="{getUrl('', 'module', 'layout', 'act', 'dispLayoutAdminCopyLayout', 'layout_srl', $layout->layout_srl)}" onclick="popopen(this.href);return false;" title="{$lang->cmd_copy}">{$lang->cmd_copy}</a></td>
<td class="nowr">
<form class="layout_delete_form" ruleset="deleteLayout" action="./" method="post">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminDelete" />
<input type="hidden" name="layout_srl" value="{$layout->layout_srl}" />
<input class="text" type="submit" value="{$lang->cmd_delete}" />
</form>
</td>
</tr>
</tbody>
</table>
</div>
<div cond="$layout_info->layout != 'faceoff'" class="btnArea">
<span class="btn"><a href="#insertLayout" class="modalAnchor">{$lang->cmd_insert}...</a></span>
</div>
<div id="insertLayout" class="modal">
<div class="fg">
<h2></h2>
<form ruleset="insertLayout" action="./" class="form">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminInsert" />
<input type="hidden" name="layout" value="{$layout_info->layout}" />
<input type="hidden" name="_layout_type" value="{$type}" />
<input type="hidden" name="success_return_url" value="{getUrl('act', 'dispLayoutAdminInstanceList')}" />
<ul>
<li>
<p class="q">{$lang->layout}</p>
<p class="a">{$layout_info->title} ver {$layout_info->version} ({$layout_info->layout})</p>
</li>
<li cond="$layout_info->path">
<p class="q">{$lang->path}</p>
<p class="a">{$layout_info->path}</p>
</li>
<li cond="$layout_info->description">
<p class="q">{$lang->description}</p>
<p class="a">{$layout_info->description}</p>
</li>
<li>
<p class="q">{$lang->author}</p>
<p class="a"><a href="{$layout_info->author->homepage}" target="_blank">{$layout_info->layout->author->name}</a></p>
</li>
<li>
<p class="q">{$lang->title}</p>
<p class="a">
<input type="text" name="title" value="" />
</p>
<p class="desc">{$lang->about_title}</p>
</li>
</ul>
<div class="btnArea">
<span class="btn"><input type="submit" value="{$lang->cmd_insert}" /></span>
</div>
</form>
<div cond="$layout_info->layout != 'faceoff'" class="x_clearfix">
<div class="x_btn-group x_pull-right">
<a href="#insertLayout" class="x_btn modalAnchor">{$lang->cmd_insert}</a>
</div>
</div>
{@ $isDeletable = count($layout_list) > 1 ? TRUE : FALSE}
<table class="x_table x_table-striped x_table-hover">
<thead>
<tr>
<th scope="col" class="nowr">{$lang->no}</th>
<th scope="col" class="nowr">{$lang->title}</th>
<th scope="col" class="nowr">{$lang->regdate}</th>
<th scope="col" class="nowr">{$lang->cmd_setup}</th>
<th scope="col" class="nowr">{$lang->cmd_edit}</th>
<th scope="col" class="nowr">{$lang->cmd_copy}</th>
<th scope="col" class="nowr">{$lang->cmd_delete}</th>
</tr>
</thead>
<tbody>
<tr loop="$layout_list => $no, $layout">
<td class="nowr">{$no+1}</td>
<td class="title">{$layout->title}</td>
<td class="nowr">{zdate($layout->regdate, "Y-m-d")}</td>
<td class="nowr"><a href="{getUrl('act', 'dispLayoutAdminModify', 'layout_srl', $layout->layout_srl)}">{$lang->cmd_setup}</a></td>
<td class="nowr"><a href="{getUrl('act', 'dispLayoutAdminEdit', 'layout_srl', $layout->layout_srl)}">{$lang->cmd_edit}</a></td>
<td class="nowr"><a href="{getUrl('', 'module', 'layout', 'act', 'dispLayoutAdminCopyLayout', 'layout_srl', $layout->layout_srl)}" onclick="popopen(this.href);return false;" title="{$lang->cmd_copy}">{$lang->cmd_copy}</a></td>
<td class="nowr">
<form cond="$isDeletable" class="layout_delete_form" ruleset="deleteLayout" action="./" method="post">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminDelete" />
<input type="hidden" name="layout_srl" value="{$layout->layout_srl}" />
<input class="x_btn x_btn-link" type="submit" value="{$lang->cmd_delete}" />
<input type="hidden" name="xe_validator_id" value="modules/layout/tpl/layout_instance_list/1" />
</form>
</td>
</tr>
</tbody>
</table>
<div cond="$layout_info->layout != 'faceoff'" class="x_clearfix">
<div class="x_btn-group x_pull-right">
<a href="#insertLayout" class="x_btn modalAnchor">{$lang->cmd_insert}</a>
</div>
</div>
<section id="insertLayout" class="x_modal">
<form action="./" method="post" ruleset="insertLayout" class="x_form-horizontal">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminInsert" />
<input type="hidden" name="layout" value="{$layout_info->layout}" />
<input type="hidden" name="_layout_type" value="{$type}" />
<input type="hidden" name="success_return_url" value="{getUrl('act', 'dispLayoutAdminInstanceList')}" />
<input type="hidden" name="xe_validator_id" value="modules/layout/tpl/layout_instance_list/2" />
<div class="x_modal-header">
<h1>{$lang->cmd_insert}</h1>
</div>
<div class="x_modal-body">
<div class="x_control-group">
<label class="x_control-label">{$lang->layout}</label>
<div class="x_controls" style="padding-top:3px">
{$layout_info->title} ver {$layout_info->version} ({$layout_info->layout})
</div>
</div>
<div cond="$layout_info->path" class="x_control-group">
<label class="x_control-label">{$lang->path}</label>
<div class="x_controls" style="padding-top:3px">
{$layout_info->path}
</div>
</div>
<div cond="$layout_info->description" class="x_control-group">
<label class="x_control-label">{$lang->description}</label>
<div class="x_controls" style="padding-top:3px">
{$layout_info->description}
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->author}</label>
<div class="x_controls" style="padding-top:3px">
<block loop="$layout_info->author=>$author_info">
<!--@if($author_info->homepage)-->
<a href="{$author_info->homepage}" target="_blank">{$author_info->name}</a>
<!--@else-->
{$author_info->name}
<!--@end-->
</block>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->title}</label>
<div class="x_controls">
<input type="text" name="title" value="" />
<p class="x_help-inline">{$lang->about_title}</p>
</div>
</div>
</div>
<div class="x_modal-footer">
<button type="button" class="x_btn x_pull-left" data-hide="#insertLayout">{$lang->cmd_close}</button>
<span class="x_btn-group x_pull-right">
<button type="submit" class="x_btn x_btn-primary">{$lang->cmd_insert}</button>
</span>
</div>
</form>
</section>

View file

@ -1,185 +1,3 @@
<include target="header.html" />
<load target="js/layout_modify.js" />
<h2 cond="$act == 'dispLayoutAdminModify'" class="h2">{$selected_layout->layout_title}</h2>
<form id="config_form" ruleset="updateLayout"|cond="$act == 'dispLayoutAdminModify'" action="./" class="form" enctype="multipart/form-data" method="post">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminUpdate"|cond="$act == 'dispLayoutAdminModify'" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="layout" value="{$selected_layout->layout}" />
<input type="hidden" name="_layout_type" value="{$selected_layout->layout_type}" />
<input type="hidden" name="success_return_url" value="{getUrl('act', 'dispLayoutAdminInstanceList')}" />
<!--// For submit config. Do not delete this division. -->
<div></div>
</form>
<div id="layout_config" class="form">
<ul>
<li>
<p class="q">{$lang->layout}</p>
<p class="a">{$selected_layout->title} ver {$selected_layout->version} ({$selected_layout->layout})</p>
</li>
<li cond="$selected_layout->path">
<p class="q">{$lang->path}</p>
<p class="a">{$selected_layout->path}</p>
</li>
<li cond="$selected_layout->description">
<p class="q">{$lang->description}</p>
<p class="a">{$selected_layout->description}</p>
</li>
<li cond="$selected_layout->author->homepage">
<p class="q">{$lang->author}</p>
<p class="a"><a href="{$selected_layout->author->homepage}" target="_blank">{$selected_layout->author->name}</a></p>
</li>
<li>
<p class="q">{$lang->title} <em>*</em></p>
<p class="a">
<input type="text" name="title" value="{$selected_layout->layout_title}" />
</p>
<p class="desc">{$lang->about_title}</p>
</li>
<li>
<p class="q">{$lang->header_script}</p>
<p class="a">
<textarea name="header_script" rows="8" cols="42">{$selected_layout->header_script}</textarea>
</p>
<p class="desc">{$lang->about_header_script}</p>
</li>
</ul>
<block cond="$act == 'dispLayoutAdminModify'" loop="$selected_layout->extra_var => $name, $var">
<block cond="!$not_first && !$var->group"><ul></block>
<block cond="$group != $var->group">
<block cond="$not_first"></ul></block>
<h3 class="h3">{$var->group}</h3>
<ul>
{@$group = $var->group}
</block>
{@$not_first = true}
<li>
<p class="q">{$var->title}</p>
<div class="a">
<div cond="$var->type == 'text'" class="multiLangEdit">
{@$use_multilang = true}
<input type="hidden" name="{$name}" value="<!--@if(strpos($var->value, "$user_lang->") !== false)-->{htmlspecialchars($var->value)}<!--@else-->{$var->value}<!--@end-->" class="vLang" />
<input type="text" id="{$name}" value="{$var->value}" class="vLang" />
<span class="desc"><a href="#langEdit" class="editUserLang tgAnchor">{$lang->cmd_set_multilingual}</a></span>
</div>
<div cond="$var->type == 'textarea'" class="multiLangEdit">
{@$use_multilang_textarea = true}
<input type="hidden" name="{$name}" value="<!--@if(strpos($var->value, "$user_lang->") !== false)-->{htmlspecialchars($var->value)}<!--@else-->{$var->value}<!--@end-->" class="vLang" />
<textarea id="{$name}" rows="8" cols="42" class="vLang">{$var->value}</textarea>
<span class="desc"><a href="#langEditTextarea" class="editUserLang tgAnchor">{$lang->cmd_set_multilingual}</a></span>
</div>
<block cond="$var->type == 'image'">
<input type="hidden" name="{$name}" id="file_{$name}" value="{$var->value}" />
<div id="preview_{$name}" style="display:none;"|cond="!$var->value">
<img src="../../../{$var->value}"|cond="$var->value" alt="" style="max-width: 250px" />
<input type="button" value="{$lang->cmd_delete}" onclick="deleteImage('{$name}')" />
</div>
<form action="./" enctype="multipart/form-data" method="post" target="hiddenIframe" class="imageUpload">
<input type="hidden" name="module" value="layout" />
<input type="hidden" name="act" value="procLayoutAdminConfigImageUpload" />
<input type="hidden" name="layout_srl" value="{$layout_srl}" />
<input type="hidden" name="name" value="{$name}" />
<p>
<input type="file" name="img" id="file_select_{$name}" value="" />
<input type="submit" value="{$lang->cmd_submit}" />
</p>
</form>
</block>
<select cond="$var->type == 'select'" name="{$name}">
<option loop="$var->options => $key, $val" value="{$key}" selected="selected"|cond="$key == $var->value">{$val->val}</option>
</select>
<block cond="$var->type == 'checkbox'">
<block loop="$var->options => $key, $val">
<label><input type="checkbox" name="{$name}[]" value="{$key}" checked="checked"|cond="@in_array($key, $var->value)" /> {$val->val}</label>
</block>
</block>
<block cond="$var->type == 'radio'">
<block loop="$var->options => $key, $val">
<block cond="$val->thumbnail">
{@
$_img_info = getImageSize($val->thumbnail);
$_height = $_img_info[1] + 40;
$_width = $img_info[0] + 20;
$_talign = 'center';
}
</block>
<block cond="!$val->thumbnail">
{@
$_width = 200;
$_height = 20;
$_talign = 'left';
}
</block>
<block cond="$var->thumbnail_exist">
<div cond= style="float:left;text-align:{$_talign};margin-bottom:1em;width:{$_width}px;height:{$_height}px;margin-right:10px;">
</block>
<label>
<input type="radio" name="{$name}" value="{$key}" checked="checked"|cond="$key == $var->value"/>{$val->val}
<block cond="$val->thumbnail">
<br />
<img src="../../../{$val->thumbnail}" alt="{$val->val}" style="border:1px solid #888888;padding:2px;margin:2px;"/>
</block>
</label>
<block cond="$var->thumbnail_exist">
</div>
</block>
</block>
</block>
</div>
<p class="desc">{$var->description}</p>
</li>
</block>
<block cond="$act == 'dispLayoutAdminModify'"></ul></block>
<h3 class="h3" cond="$selected_layout->menu">{$lang->menu}</h3>
<ul cond="$selected_layout->menu">
<li loop="$selected_layout->menu => $menu_name, $menu_info">
<p class="q">{$menu_info->title}({$menu_name})</p>
<p class="a">
<select name="{$menu_name}">
<option value="0">{$lang->cmd_select}</option>
<option loop="$menu_list => $key, $val" value="{$val->menu_srl}" selected="selected"|cond="$val->menu_srl == $menu_info->menu_srl">{$val->title}</option>
</select>
<a href="{getUrl('module','admin','act','dispMenuAdminSiteMap')}">{$lang->cmd_management}</a>
</p>
</li>
<li>
<p class="q">{$lang->not_apply_menu}</p>
<p class="a">
<input type="checkbox" name="apply_layout" id="apply_layout" value="Y" /> <label for="apply_layout">{$lang->about_not_apply_menu}</label>
</p>
</li>
<li cond="$selected_layout->layout_type == 'M'">
<p class="q">{$lang->apply_mobile_view}</p>
<p class="a">
<input type="checkbox" name="apply_mobile_view" id="apply_mobile_layout" value="Y" /> <label for="apply_mobile_layout">{$lang->about_apply_mobile_view}</label>
</p>
</li>
</ul>
<div class="btnArea">
<span class="etc">
<!--@if($layout)-->
<span class="btn"><a href="{getUrl('', 'module', 'admin', 'act', 'dispLayoutAdminInstanceList', 'layout', $selected_layout->layout)}">{$lang->cmd_list}</a></span>
<!--@else-->
<span class="btn"><a href="{getUrl('', 'module', 'admin', 'act', 'dispLayoutAdminAllInstanceList')}">{$lang->cmd_list}</a></span>
<!--@end-->
</span>
<span class="btn medium">
<input type="submit" value="{$lang->cmd_insert}"|cond="$act == 'dispLayoutAdminInsert'" value="{$lang->cmd_save}"|cond="$act == 'dispLayoutAdminModify'" onclick="doSubmitConfig()"/>
</span>
</div>
<include target="include.multilang.html" />
<include target="include.multilang.textarea.html" />
</div>
<iframe name="hiddenIframe" src="about:blank" width="1000px" height="1000px" frameborder="0" style="position:absolute;top:-9999px;left:-9999px"></iframe>
{$content}

View file

@ -1 +1,2 @@
<load target="../../../common/js/foggyLayer.js" />
{$layout_tpl}

View file

@ -1,50 +0,0 @@
<!--%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>
<!-- 목록 -->
<div class="table">
<table width="100%" border="1" cellspacing="0">
<thead>
<tr>
<th scope="col">{$lang->no}</th>
<th scope="col">{$lang->layout}</th>
<th scope="col">{$lang->title}</th>
<th scope="col">{$lang->regdate}</th>
<th scope="col" colspan="3">&nbsp;</th>
</tr>
</thead>
<tbody>
<!--@foreach($layout_list as $no => $val)-->
<tr class="row{$cycle_idx}">
<td>{$no+1}</td>
<td>
{$val->layout}
<!--@if($val->module_srl)-->
(module)
<!--@end-->
</td>
<td >{$val->title}</td>
<td>{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-->
</tbody>
</table>
</div>
<div class="btnArea">
<span class="btn"><a href="{getUrl('act','dispLayoutAdminInsert','layout_srl','','layout_type','M')}">{$lang->cmd_make}</a></span>
</div>

View file

@ -1,14 +1,8 @@
<div class="cnb">
<a cond="$type == 'M'" href="{getUrl('act', 'dispLayoutAdminInstalledList', 'type', 'P')}">PC({$pcLayoutCount})</a>
<block cond="$type != 'M'">PC({$pcLayoutCount})</block>
|
<a cond="$type != 'M'" href="{getUrl('act', 'dispLayoutAdminInstalledList', 'type', 'M')}">Mobile({$mobileLayoutCount})</a>
<block cond="$type == 'M'">Mobile({$mobileLayoutCount})</block>
</div>
<div class="cnb">
<a cond="$act != 'dispLayoutAdminAllInstanceList'" href="{getUrl('act', 'dispLayoutAdminAllInstanceList', 'layout_srl', '')}">{$lang->instance_layout}</a>
<block cond="$act == 'dispLayoutAdminAllInstanceList'">{$lang->instance_layout}</block>
|
<a cond="$act != 'dispLayoutAdminInstalledList'" href="{getUrl('act', 'dispLayoutAdminInstalledList')}">{$lang->installed_layout}</a>
<block cond="$act == 'dispLayoutAdminInstalledList'">{$lang->installed_layout}</block>
<ul class="x_nav x_nav-tabs">
<li class="x_active"|cond="$type != 'M'"><a href="{getUrl('act', 'dispLayoutAdminInstalledList', 'type', 'P')}">PC({$pcLayoutCount})</a></li>
<li class="x_active"|cond="$type == 'M'"><a href="{getUrl('act', 'dispLayoutAdminInstalledList', 'type', 'M')}">Mobile({$mobileLayoutCount})</a></li>
</ul>
<div>
<a class="active"|cond="$act == 'dispLayoutAdminAllInstanceList'" href="{getUrl('act', 'dispLayoutAdminAllInstanceList', 'layout_srl', '')}">{$lang->instance_layout}</a> <i>|</i>
<a class="active"|cond="$act == 'dispLayoutAdminInstalledList'" href="{getUrl('act', 'dispLayoutAdminInstalledList')}">{$lang->installed_layout}</a>
</div>

View file

@ -1,4 +1,4 @@
<script type="text/javascript">//<![CDATA[
<script>//<![CDATA[
alert("{$lang->success_updated}");
top.location.href = top.location.href;
//]]></script>