ํ ํ๋ฆฟ ๋ฌธ๋ฒ v1¶
๋ผ์ด๋ฏน์ค์ ์ ์ ์ธ XE 1.x์์ ์ฌ์ฉํ๋ ํ
ํ๋ฆฟ ๋ฌธ๋ฒ์ผ๋ก,
๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ HTML ํ๊ทธ, ์์ฑ, ์ฃผ์ ๋ฑ์ ํํ๋ก ๊ตฌํํ๋ ค๊ณ ํ๋ ๊ฒ์ด ํน์ง์
๋๋ค.
๋ผ์ด๋ฏน์ค์์ ์ ์ ์ง์ํ๋ ๋ฌธ๋ฒ์ด๊ณ , ์ง์์ ์ข
๋ฃํ ๊ณํ๋ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋์ด์ ์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๊ฑฐ๋ ๋์ ๋๋ ๋ณ๊ฒฝ์ ์์ ์์ ์
๋๋ค.
ํน์ ํ ๊ธฐ๋ฅ ์ฌ์ฉ์ ๋ฒ๊ทธ๊ฐ ์ฆ๋ค๋ ์ง์ ์ด ์์ ๋ถํฐ ์์์ง๋ง, bug-for-bug ํธํ์ฑ ์ ์ง๋ฅผ ์ํด ์์ ํ์ง ์์ต๋๋ค.
๋ผ์ด๋ฏน์ค 2.2 ์ดํ ์ ๊ท ์๋ฃ์๋ ๋์ด์ v1 ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ง ์์ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
๋ฐ์ดํฐ ์ถ๋ ฅ¶
๋ณ์๋ ๊ทธ ๋ฐ์ PHP ํํ์์ ์ถ๋ ฅํ ๋๋ ํ ์์ ์ค๊ดํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
[๋ณ์ ์ถ๋ ฅ ์์]
{$name}
{$oDocument->getTitleText()}
{$array[$key]}
<!-- ๋ผ์ด๋ฏน์ค 2.0.23 ์ด์ ์ง์ -->
{$object->$prop[0]}
์ฒซ ์ค๊ดํธ ์งํ์ ๊ณต๋ฐฑ์ด ์๊ฑฐ๋, ํํ์ ์ค๊ฐ์ ์ค๋ฐ๊ฟ์ด ๋ฐ์ํ๋ฉด ์๋ํ์ง ์์ต๋๋ค.
HTML ํ์ผ์ ํํ ํฌํจ๋์ด ์๋ JS ํจ์ ์ ์ธ์ ํ
ํ๋ฆฟ ๋ฌธ๋ฒ์ผ๋ก ์ค์ธํ์ง ์๊ธฐ ์ํ ์กฐ์น๋ก ์ถ์ ๋ฉ๋๋ค.
[์๋ํ์ง ์๋ ์์]
{ $name }
๋ณ์์ ์ ํจ ๋ฒ์(์ค์ฝํ)¶
ํ
ํ๋ฆฟ์์ ์ฌ์ฉํ๋ ๋ชจ๋ ๋ณ์๋ Context
์์ ๊ฐ์ ธ์ค๊ณ , Context
์ ์ ์ฅ๋ฉ๋๋ค.
๋ชจ๋์ด๋ ์์ ฏ ๋ฑ์์ Context::set('foo', $value)
๋ก ์
ํ
ํ์๊ฑฐ๋ $_GET['foo']
๋ก ๋ค์ด์จ URL ํ๋ผ๋ฏธํฐ์ ๊ฐ์
ํ
ํ๋ฆฟ์์ $foo
๋ณ์๋ก ์ฐธ์กฐํ ์ ์๊ณ , ๋ฐ๋๋ก ํ
ํ๋ฆฟ์์ $foo
๋ผ๋ ๋ณ์๋ฅผ ์กฐ์ํ๋ฉด
๋ค๋ฅธ ์๋ฃ์์ Context::get('foo')
๋ก ๊ทธ ๊ฐ์ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค.
์์ ์์์ ๋ฑ์ฅํ๋ $var
, $oDocument
, $array
, $key
, $object
, $prop
๋ฑ์ ๋ณ์๋ค์ ๋ชจ๋
์ค์ ๋ก๋ Context::get('var')
, Context::get('oDocument')
๋ฑ์ผ๋ก ํด์๋๋ค๋ ๋ป์
๋๋ค.
($_SERVER
๋ฑ์ ์ด์ ์ญ๋ณ์์ $this
๋ ์์ธ์
๋๋ค.)
์ฆ, Context
๋ฅผ ํตํด ์๋ก ๋ค๋ฅธ ์๋ฃ๋ค๊ณผ ํ
ํ๋ฆฟ ์ฌ์ด์ ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ๋ชจ๋ ํ
ํ๋ฆฟ์ด ํ๋์ ์ค์ฝํ๋ฅผ ๊ณต์ ํ๋ ์์คํ
์ ์ข
์ข
๋ฒ๊ทธ๋ฅผ ์ผ์ผํค๊ธฐ๋ ํ์ง๋ง,
XE 1.x์ฉ ์๋ฃ์ ํ์ํธํ์ฑ์ ์ ์งํ๋ ๋ฐ ํ์์ ์ธ ์ฅ์น์ด๋ฏ๋ก ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.
๊ทธ ๋์ , ๊ณผ๊ฑฐ register_globals
์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ก URL ํ๋ผ๋ฏธํฐ ํํฐ๋ง,
์๋ escape ๋ฑ์ ์์ ์ฅ์น๋ฅผ ๊ฐํํ๊ณ ์์ต๋๋ค.
์ถ๋ ฅ ํํฐ¶
๋ผ์ด๋ฏน์ค 1.8.31 ์ด์, XE 1.11.0 ์ด์์์๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ ๋ ํํฐ๋ฅผ ๊ฑฐ์ณ ๊ฐ๊ณตํ๋๋ก ํ ์ ์์ต๋๋ค.
ํจ์(ํจ์(ํจ์(๋ณ์))) ํํ๋ก ๊ฒน๊ฒน์ด ๋๋ฌ์ธ๋ ๊ฒ๋ณด๋ค ๊ฐ๊ฒฐํ ํํ์ด ๋์ค๋ ๊ฒ์ ๋ฌผ๋ก ,
๋ณด์๊ณผ ์ง๊ฒฐ๋๋ escape ์ฒ๋ฆฌ๋ ์์ฝ๊ฒ ์ปจํธ๋กคํ ์ ์์ต๋๋ค.
์๋์ ์์ ๋ $var
๋ฅผ ์๋ฌธ์๋ก ๋ณํํ๊ณ escapeํ์ฌ ์ถ๋ ฅํฉ๋๋ค.
{$var|lower|escape}
์๋์ ์์ ๋ ํ์์คํฌํ๋ฅผ ํน์ ํ ํํ๋ก ํฌ๋งทํ์ฌ ์ถ๋ ฅํฉ๋๋ค. ํํฐ๋ช
๊ณผ ์ต์
์ :
์ผ๋ก ๊ตฌ๋ถํฉ๋๋ค.
{$timestamp|date:'n/j H:i'}
ํ ํ๋ฆฟ ๋ฌธ๋ฒ v1์์ ์ง์ํ๋ ๋ชจ๋ ํํฐ์ ๋ชฉ๋ก์ ์๋์ ํ๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
ํํฐ๋ช | ๊ธฐ๋ฅ | ์ต์ |
---|---|---|
autoescape | ์๋ escape (์ด์ค ์ธ์ฝ๋ฉํ์ง ์์) | |
autolang | ์๋ escapeํ๋, ์ธ์ด์ฝ๋์ธ ๊ฒฝ์ฐ escapeํ์ง ์์ | |
escape | ๊ฐ์ escape (์ด์ค ์ธ์ฝ๋ฉ) | |
noescape | escapeํ์ง ์์ | |
escapejs | JS ๋ฌธ์์ด์ ๋ฃ์ ์ ์๋ ํํ๋ก escape | |
json | JSON์ผ๋ก ์ธ์ฝ๋ฉ (JS ๋ฌธ๋งฅ์์๋ noescape์ ํจ๊ป ์ฌ์ฉ) | |
strip | strip_tags() | |
strip_tags | strip_tags() | |
trim | trim() | |
urlencode | rawurlencode() | |
lower | ์๋ฌธ์๋ก ๋ณํ | |
upper | ๋๋ฌธ์๋ก ๋ณํ | |
nl2br | ๊ฐํ ๋ฌธ์๋ฅผ <br> ๋ก ๋ณํ (noescape ์๋ ์ ์ฉ) |
|
join | ๋ฐฐ์ด์ ๋ฌธ์์ด๋ก ํฉ์นจ | ๊ตฌ๋ถ์, ๊ธฐ๋ณธ๊ฐ์ , |
date | ํ์์คํฌํ ํฌ๋งท | ์ฌ์ฉํ ํฌ๋งท, ๊ธฐ๋ณธ๊ฐ์ Y-m-d H:i:s |
format | ์ซ์์ ์ฒ ๋จ์ ์ผํ ํ์ | ์์์ ์ดํ ์๋ฆฟ์, ๊ธฐ๋ณธ๊ฐ์ 0 |
number_format | ์์ ๊ฐ์ | |
shorten | ์ซ์๋ฅผ 123.4K ์ ๊ฐ์ ํํ๋ก ํ์ |
์์ซ์ ์ดํ ์๋ฆฟ์, ๊ธฐ๋ณธ๊ฐ์ 2 |
number_shorten | ์์ ๊ฐ์ | |
link | ๋ฌธ์์ด์ ๋งํฌ๋ก ํ์ (noescape ์๋ ์ ์ฉ) | ๋งํฌ ํ ์คํธ, ๊ธฐ๋ณธ๊ฐ์ ์๋ณธ ๋ฌธ์์ด |
์กฐ๊ฑด๋ฌธ ๋ฐ ๋ฃจํ๋ฌธ¶
HTML ์ฃผ์ ์์ @
๊ธฐํธ๋ฅผ ๋ถ์ฌ if
, for
, foreach
, while
๋ฑ์ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฃจํ๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
[v1 ๊ถ์ฅ ๋ฌธ๋ฒ]
<!--@if($foo)-->
<div class="bar"></div>
<!--@else-->
<div class="baz"></div>
<!--@end-->
์กฐ๊ฑด๋ฌธ์ด๋ ๋ฃจํ๋ฌธ์ด ๋๋ ๋๋ ์ผ๋ฐ์ ์ผ๋ก <!--@end-->
๋ฅผ ์ฌ์ฉํ๋, <!--@endif-->
๋๋ <!--@endforeach-->
๋ฑ
๋ฃจํ์ ์ข
๋ฅ์ ๋ง๋ ํํ์ ์ฌ์ฉํ๋ค๋ฉด ๊ฐ๋
์ฑ์ด ๊ฐ์ ๋ฉ๋๋ค. ๋จ, ์๋ชป ์ฌ์ฉํ๋๋ผ๋ ์ค๋ฅ๊ฐ ๋์ง ์์ต๋๋ค.
[v1 ๊ถ์ฅ ๋ฌธ๋ฒ]
<!--@foreach($comments as $comment)-->
<div class="item">{$comment->getContent()}</div>
<!--@endforeach-->
ํ๋ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฃจํ๋ฌธ์ HTML ํ๊ทธ๋ก ํํํ๋ ค๋ ์๋๊ฐ ์์๋๋ฐ, ์ปค๋ฎค๋ํฐ์์ ํํ "์ (ๆฐ)๋ฌธ๋ฒ"์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
์ ๊ท์์ ์ฌ์ฉํ์ฌ ์ ๋ฌธ๋ฒ์ ํด์ํ๋ ๊ณผ์ ์์ ๋ฒ๊ทธ๊ฐ ์ฆ์ผ๋ฏ๋ก, ๋ผ์ด๋ฏน์ค์์๋ ์ฌ์ฉ์ ๊ถ์ฅํ์ง ์์ต๋๋ค.
์ฝ๋๊ฐ ๋ค์ ๊ธธ์ด์ง๋๋ผ๋ ์ผ๋ฐ์ ์ธ if๋ฌธ, foreach๋ฌธ ๋ฑ์ ์ฌ์ฉํ์๊ธฐ ๋ฐ๋๋๋ค.
[v1 ๋ณํ ๋ฌธ๋ฒ (๊ถ์ฅํ์ง ์์)]
<block loop="$comments => $comment">
<div cond="$foo" class="bar"></div>
</block>
๋จ, ํ๊ทธ ์ ์ฒด๊ฐ ์๋ ํ๋์ ์์ฑ์ ํ์ํ ์ง ์จ๊ธธ์ง ์ ํํ๋ |cond=""
๋ฌธ๋ฒ์ ํด์ ์ค๋ฅ๊ฐ ๊ฑฐ์ ์๊ณ ,
HTML ์ฝ๋ ์ค๊ฐ์ ๊ฑฐ์ถ์ฅ์ค๋ฌ์ด if๋ฌธ์ ๋ผ์๋ฃ๋ ๋ถํธ์ ํฌ๊ฒ ๋์ด ์ค๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
์๋์ ์์ ์์๋ $val === 'foo'
๋ผ๋ ์กฐ๊ฑด์ด ์ฐธ์ธ ๊ฒฝ์ฐ selected="selected"
์์ฑ์ด ํ์๋ฉ๋๋ค.
[v1 ๋ณํ ๋ฌธ๋ฒ (์ฌ์ฉํด๋ ๋ฌด๋ฐฉ)]
<ul>
<li value="foo" selected="selected"|cond="$val === 'foo'">FOO</li>
</ul>
ํ ํ๋ฆฟ ์ธํด๋ฃจ๋¶
๋ค๋ฅธ ํ
ํ๋ฆฟ ํ์ผ์ ์ธํด๋ฃจ๋ํ๋ ค๋ฉด ์๋์ ๊ฐ์ ๋ฌธ๋ฒ์ ์ฌ์ฉํฉ๋๋ค.
ํ์ฌ ํ์ผ์ ๊ธฐ์ค์ผ๋ก ํ ์๋๊ฒฝ๋ก๋ฅผ ์
๋ ฅํด์ผ ํ๊ณ , ํ์ฅ์ .html
์ ์๋ตํ ์ ์์ต๋๋ค.
[v1 ๊ถ์ฅ ๋ฌธ๋ฒ]
<include target="dir/filename.html" />
๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ์ผ ํ๋ ๊ฒฝ๋ก๊ฐ ๋ง์ ๊ฒฝ์ฐ, "์ฒ์"์ ์๋ฏธํ๋ ^
๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ
๋ผ์ด๋ฏน์ค๊ฐ ์ค์น๋ ๋ฃจํธ ๊ฒฝ๋ก๋ฅผ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
../../../../
๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ๋ณด๋ค ๊ฐ๊ฒฐํ๊ณ , ํ์ฌ ํ
ํ๋ฆฟ์ ๊ฒฝ๋ก์ ๋ฌด๊ดํ๋ฏ๋ก
ํ์ผ ์ด๋ ๋ฑ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํฉ๋๋ค.
[v1 ๊ถ์ฅ ๋ฌธ๋ฒ]
<include target="^/common/tpl/refresh.html" />
์ธํด๋ฃจ๋ํ ๋ cond
์์ฑ์ ์ฌ์ฉํ์ฌ, ์กฐ๊ฑด์ด ์ฐธ์ผ ๋๋ง ์ธํด๋ฃจ๋ํ๋๋ก ํ ์ ์์ต๋๋ค.
[v1 ๊ถ์ฅ ๋ฌธ๋ฒ]
<include target="../filename" cond="$foo" />
XE 1.4.4 ๋ฏธ๋ง ๋ฒ์ ์์๋ ์๋์ ๊ฐ์ HTML ์ฃผ์ ํํ์ ์ธํด๋ฃจ๋ ๋ฌธ๋ฒ์ ์ฌ์ฉํ ์ ๋ ์์ผ๋, ๋์ด์ ๊ถ์ฅํ์ง ์์ต๋๋ค.
[v1 ์ด๊ธฐ ๋ฌธ๋ฒ (๊ถ์ฅํ์ง ์์)]
<!--#include("header.html")-->
๋ฆฌ์์ค ๋ก๋ฉ¶
ํ ํ๋ฆฟ ๋ฌธ๋ฒ์ ํตํด ๋ค์ํ ๋ฆฌ์์ค(์ ์ )์ ๋ก๋ฉ์ ์ง์ํฉ๋๋ค.
<script>
๋๋ <link>
ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ JS ๋ฐ CSS ํ์ผ์ ์ง์ ๋ถ๋ฌ์ฌ ์๋ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ฌ๋ฌ ๋ชจ๋๊ณผ ์คํจ ๋ฑ์ ์กฐํฉํ์ฌ ์ฌ์ฉํ๋ ๋ผ์ด๋ฏน์ค์ ํน์ฑ์,
ํ
ํ๋ฆฟ ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ฌ ์ฝ์ด์์ ๋ฆฌ์์ค๋ฅผ ํตํฉ ๊ด๋ฆฌํ๋๋ก ํ๋ฉด ์ฌ๋ฌ ๊ฐ์ง ์ฅ์ ์ด ์์ต๋๋ค.
- ์ฝ์ด์ CSS/JS ์์ถ ๋ฐ ํฉ์น๊ธฐ ๊ธฐ๋ฅ๊ณผ ์๋์ผ๋ก ์ฐ๋๋ฉ๋๋ค.
- SCSS, LESS ํ์ผ์ ๋ก๋ฉํ๋ฉด ์๋์ผ๋ก ์ปดํ์ผ๋๊ณ , ๋ณ์๋ฅผ ์ ๋ฌํ ์๋ ์์ต๋๋ค.
index
์์ฑ์ผ๋ก ๋ก๋ฉ ์์๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค.- ์ด๋ฏธ ๋ก๋ฉํ ํ์ผ์ ์ธ๋ก๋ฉํ ์ ์์ต๋๋ค.
CSS, SCSS, LESS¶
์๋์ ๊ฐ์ด <load>
ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๊ณ , ์ฌ๋ฌ ๋ถ๊ฐ์ ์ธ ์์ฑ์ ์ ์ธํ ์ ์์ต๋๋ค.
target
: ๋ก๋ฉํ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค. ์ธํด๋ฃจ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ฌ ํ์ผ์ ๊ธฐ์ค์ผ๋ก ํ
์๋๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์์น์ด์ง๋ง, ํ์์^
๋ฌธ์๋ก ๋ผ์ด๋ฏน์ค๊ฐ ์ค์น๋ ๋ฃจํธ ๊ฒฝ๋ก๋ฅผ ์ฐธ์กฐํ ์ ์์ต๋๋ค.media
: ์ด ์คํ์ผ์ํธ๋ฅผ ์ฌ์ฉํ ๊ธฐ๊ธฐ์ ์ข ๋ฅ๋ฅผ ์ง์ ํฉ๋๋ค. screen, print, braille ๋ฑindex
: ๋ก๋ฉ ์์๋ฅผ ์ง์ ํฉ๋๋ค.vars
: SCSS๋ LESS์์ ์ฌ์ฉํ ๋ณ์ ๋ชฉ๋ก (์ฐ๊ด๋ฐฐ์ด ๋๋ ์ค๋ธ์ ํธ)
[v1 ๊ถ์ฅ ๋ฌธ๋ฒ]
<load target="styles.css" />
<load target="../styles.css" media="print" index="20" />
SCSS๋ LESS๋ ๋์ผํ ๋ฌธ๋ฒ์ผ๋ก ๋ก๋ฉํฉ๋๋ค. ์ฝ์ด์์ ์๋์ผ๋ก ์ปดํ์ผํฉ๋๋ค.
[v1 ๊ถ์ฅ ๋ฌธ๋ฒ]
<load target="../styles.less" />
<load target="css/styles.scss" vars="$vars" />
XE 1.4.4 ๋ฏธ๋ง ๋ฒ์ ์์๋ ์๋์ ๊ฐ์ ๋ฌธ๋ฒ๋ ์ฌ์ฉํ์์ผ๋, ๋์ด์ ๊ถ์ฅํ์ง ์์ต๋๋ค.
[v1 ์ด๊ธฐ ๋ฌธ๋ฒ (๊ถ์ฅํ์ง ์์)]
<!--%import("dir1/dir2/styles.css")-->
JS¶
CSS์ ๋์ผํ ๋ฌธ๋ฒ์ผ๋ก ๋ก๋ฉํฉ๋๋ค.
target
: ๋ก๋ฉํ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค.type
: ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์์น๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์head
์ ๋๋ค.head
: HTML ์์ค์<head>
๋ถ๋ถ์ ์ฝ์ ๋์ด, ๋ณธ๋ฌธ ๋ก๋ฉ ์ ์คํ๋ฉ๋๋ค.body
: HTML ์์ค์<body>
ํ๋จ์ ์ฝ์ ๋์ด, ๋ณธ๋ฌธ ๋ก๋ฉ ํ ์คํ๋ฉ๋๋ค.index
: ๋ก๋ฉ ์์๋ฅผ ์ง์ ํฉ๋๋ค.
[v1 ๊ถ์ฅ ๋ฌธ๋ฒ]
<load target="script.js" />
<load target="dir/script.js" type="head" />
<load target="^/common/js/script.js" type="body" index="10" />
XE 1.4.4 ๋ฏธ๋ง ๋ฒ์ ์์๋ ์๋์ ๊ฐ์ ๋ฌธ๋ฒ๋ ์ฌ์ฉํ์์ผ๋, ๋์ด์ ๊ถ์ฅํ์ง ์์ต๋๋ค.
[v1 ์ด๊ธฐ ๋ฌธ๋ฒ (๊ถ์ฅํ์ง ์์)]
<!--%import("../script.js")-->
JS ํ๋ฌ๊ทธ์ธ¶
CKEditor, jQuery File Upload ๋ฑ common/js/plugins/
ํด๋์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ก๋ฉํฉ๋๋ค.
ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ์ด ์กด์ฌํ์ง ์์, XE ์ด์ฐฝ๊ธฐ์ ์ฃผ์ ๋ฌธ๋ฒ์ ๊ทธ๋๋ก ์ฌ์ฉํด์ผ ํฉ๋๋ค.
<!--%load_js_plugin("ckeditor")-->
XML JS ํํฐ¶
ํ๋ก ํธ์๋์์ ์คํ๋๋ XML JS ํํฐ๋ฅผ ๋ก๋ฉํฉ๋๋ค.
๋ ๊ฐ์ง ๋ฌธ๋ฒ์ด ์กด์ฌํ๋ฉฐ, ๋ฐฑ์๋์์ ์คํ๋๋ ๋ฃฐ์
(ruleset)๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก
XML JS ํํฐ ์ฌ์ฉ์ ๋ผ์ด๋ฏน์ค์์ ๊ถ์ฅํ์ง ์์ต๋๋ค.
[๊ถ์ฅํ์ง ์์]
<load target="filters/insert.xml" />
<!--%import("filters/insert.xml")-->
์ธ์ด ํ์ผ¶
ํน์ ๋ชจ๋, ๋๋ ํน์ ํ ํด๋์ ์ ์ฅ๋์ด ์๋ ์ธ์ด ํ์ผ์ ๋ก๋ฉํฉ๋๋ค.
ํ์ผ๋ช
๊น์ง ์ง์ ํ ์ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ค์ ๋ก๋ ํด๋๋ช
๊น์ง๋ง ์ธ์ํฉ๋๋ค.
๋ผ์ด๋ฏน์ค์์๋ lang.xml
๋์ ์ธ์ด๋ณ .php
ํ์ผ์ ์ฌ์ฉํ๋ฏ๋ก,
์๋์ ๋ ๋ฒ์งธ ๋ฌธ๋ฒ์ ์ค์ ๋ก ์๋ฏธ๊ฐ ์์ต๋๋ค.
[v1 ๊ถ์ฅ ๋ฌธ๋ฒ]
<load target="./lang" />
[๋ฌด์๋ฏธํ ๋ฌธ๋ฒ]
<load target="./lang/lang.xml" />
์ธ๋ก๋ฉ¶
CSS ๋๋ JS ํ์ผ ๋ก๋ฉ์ ์ทจ์ํฉ๋๋ค. ๋ก๋ฉํ ๋ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค.
[v1 ๊ถ์ฅ ๋ฌธ๋ฒ]
<unload target="file.js" />
XE 1.4.4 ๋ฏธ๋ง ๋ฒ์ ์์๋ ์๋์ ๊ฐ์ ๋ฌธ๋ฒ๋ ์ฌ์ฉํ์์ผ๋, ๋์ด์ ๊ถ์ฅํ์ง ์์ต๋๋ค.
[v1 ์ด๊ธฐ ๋ฌธ๋ฒ (๊ถ์ฅํ์ง ์์)]
<!--%unload("file.js")-->
PHP ์ฝ๋ ์ฌ์ฉ¶
์๋์ ๊ฐ์ด {@ ... }
๋ฌธ๋ฒ์ ์ฌ์ฉํ์ฌ ์์์ PHP ์ฝ๋๋ฅผ ์ฝ์
ํ ์ ์์ต๋๋ค.
{@ $foo = 'bar'}
์ค๊ดํธ๋ฅผ ์ฌ์ฉํ์ง๋ง ์๋๋ค๋ฉด ์ฌ๋ฌ ์ค์ ์ฝ๋๋ฅผ ํ ๋ฒ์ ์ ๋ ฅํด๋ ๋ฌด๋ฐฉํฉ๋๋ค.
{@
$foo = 'bar';
if ($baz):
$rhymix = true;
endif;
}
์์ ๊ฐ์ PHP ์ฝ๋์์ ์ฌ์ฉํ๋ ๋ณ์๋ค๋ ๋ชจ๋ Context
๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
๋ง์ฝ Context
๋ฅผ ์ฐธ์กฐํ์ง ์๋ PHP ์ฝ๋๊ฐ ํ์ํ๋ค๋ฉด ์ผ๋ฐ <?php ... ?>
ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ญ์์ค.
๋จ, ํ
ํ๋ฆฟ ๋ฌธ๋ฒ v1 ํน์ฑ์ ์ค๊ดํธ ์ฌ์ฉ์ ํญ์ ์ฃผ์ํ์ฌ์ผ ํฉ๋๋ค.
์ฃผ์¶
์ผ๋ฐ์ ์ธ HTML ์ฃผ์์ ๊ฒฐ๊ณผ๋ฌผ์ ๊ทธ๋๋ก ์ถ๋ ฅ๋ฉ๋๋ค.
๊ฒฐ๊ณผ๋ฌผ์ ํฌํจ๋์ง ์๋ ์ฃผ์์ ์์ฑํ๋ ค๋ฉด ์๋์ ๊ฐ์ด <!--//
๋ก ์์ํ๋๋ก ํ๋ฉด ๋ฉ๋๋ค.
์ด๋ฌํ ์ฃผ์์ ํ
ํ๋ฆฟ ํด์ ๊ณผ์ ์์ ์ญ์ ๋ฉ๋๋ค.
<!--// ์ด ์ฃผ์์ ์ถ๋ ฅ๋์ง ์์ต๋๋ค -->
๋ถ๊ฐ ๊ธฐ๋ฅ¶
์๋ escape ์ค์ ¶
<config>
ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ดํ์ ๋ฑ์ฅํ๋ ๋ชจ๋ ๋ฐ์ดํฐ ์ถ๋ ฅ ์ฝ๋(์ค๊ดํธ)์
htmlspecialchars()
ํจ์๋ฅผ ์๋ ์ ์ฉํ๋๋ก ์ค์ ํ ์ ์์ต๋๋ค.
<config autoescape="on" />
ํ์ผ ์ต์๋จ์ ์ด ํ๊ทธ๋ฅผ ์ฐ๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ ์ถ๋ ฅ ์ฝ๋์ ์ผ๊ด ์ ์ฉ๋๋ฏ๋ก,
์ผ์ผ์ด autoescape
ํํฐ๋ฅผ ๋ถ์ฌ์ฃผ์ด์ผ ํ๋ ๋ถํธ์ ๋ ์ ์์ต๋๋ค.
๋จ, ์ด ๋ ์ ์ฉ๋๋ ํํฐ๋ ์ด์ค ์ธ์ฝ๋ฉ์ ํ์ง ์๋ ์ ์ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
์ด์ค ์ธ์ฝ๋ฉ์ด ํ์ํ ๊ฒฝ์ฐ, ๊ฐ๋ณ์ ์ผ๋ก escape
ํํฐ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ฆฌ์์ค ๊ฒฝ๋ก ์๋ ์กฐ์ ¶
ํ
ํ๋ฆฟ ์์ค์ ํฌํจ๋ ์ด๋ฏธ์ง, ๋์์ ๋ฑ์ ์๋๊ฒฝ๋ก๋ ํด์ ๊ณผ์ ์์ ์ ๋๊ฒฝ๋ก๋ก ๋ณํ๋์ด,
์ค์ ํ์ด์ง๊ฐ ํ์๋๋ ๋ค์ํ URL์์ ํญ์ ์ ํํ ๊ฒฝ๋ก๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด modules/board/skins/example/list.html
์์ ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์๋ค๋ฉด
<img src="img/icon.png" alt="์์ด์ฝ" />
ํด์ ๋ฐ ์ถ๋ ฅ ๊ณผ์ ์์ ์๋์ ๊ฐ์ด ๋ณํ๋ฉ๋๋ค.
<img src="/modules/board/skins/example/img/icon.png" alt="์์ด์ฝ" />
๋ฐ๋ผ์ ๋ ์ด์์์ด๋ ์คํจ ์ ์์๋ ์ฌ์ฉ์๊ฐ ๊ทธ ์๋ฃ๋ฅผ ์ ํํ ์ด๋ค ๊ฒฝ๋ก์ ์ค์นํ ์ง ์ ๊ฒฝ์ฐ์ง ์๊ณ ,
์๋ฃ ๋ด๋ถ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ง ๊ฐ์ํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ฉ๋๋ค.
์ด ๊ธฐ๋ฅ์ ๋๋ถ๋ถ์ src
์์ฑ์ ์ ์ฉ๋๋ฉฐ, ๋ผ์ด๋ฏน์ค 2.0.3 ์ดํ์๋ srcset
์์ฑ์๋ ์ ์ฉ๋ฉ๋๋ค.
ํผ ํ๋ ์๋ ์ฃผ์ ¶
ํ
ํ๋ฆฟ ์์ค์ <form>
ํ๊ทธ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ, ํํ ์ฌ์ฉํ๋ ํ๋๋ค์ ์๋์ผ๋ก ์ถ๊ฐํด ์ฃผ๋ ๊ธฐ๋ฅ์
๋๋ค.
XE 1.x ์์ ๋ถํฐ ์ ๊ณต๋์ด ์จ ๊ธฐ๋ฅ์ด๋ฏ๋ก ๊ณ์ ์ ๊ณตํ๊ณ ์์ผ๋, ์ฌ๊ธฐ์ ์์กดํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์์ต๋๋ค.
ํผ ์ ์ถ์ ํ์ํ ํ๋๊ฐ ๋๋ฝ๋์ง ์์๋์ง ์ฒดํฌํ๋ ๊ฒ์ ์ ์์์ ๋ชซ์
๋๋ค.
ํผ์ ruleset
์์ฑ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ, ์ด๋ฅผ ํด์ํ์ฌ ํด๋น ๋ฃฐ์
์ ๋ก๋ฉํฉ๋๋ค.
[BEFORE]
<form method="post" ruleset="insertFoo">
...
</form>
[AFTER]
<form method="post">
<input type="hidden" name="ruleset" value="insertFoo" />
....
</form>
ํผ์ mid
์ act
ํ๋๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ, ํ์ฌ ํ๋ฉด์ mid์ act๋ฅผ ๊ธฐ์ค์ผ๋ก hidden input์ ์๋ ์ถ๊ฐํฉ๋๋ค.
[BEFORE]
<form method="post">
...
</form>
[AFTER]
<form method="post">
<input type="hidden" name="mid" value="{$mid}" />
<input type="hidden" name="act" value="{$act}" />
...
</form>
ํผ์ error_return_url
ํ๋๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ, ํ์ฌ ํ๋ฉด์ ์ฃผ์๋ฅผ ๊ธฐ์ค์ผ๋ก hidden input์ ์๋ ์ถ๊ฐํฉ๋๋ค.
[BEFORE]
<form method="post">
...
</form>
[AFTER]
<form method="post">
<input type="hidden" name="error_return_url" value="{getRequestUriByServerEnviroment()}" />
...
</form>
GET ์์ฒญ์ธ ๊ฒฝ์ฐ์๋ ์ด๊ฒ ๋๋ฌธ์ ์ํ์ง ์๋ ํ๋ผ๋ฏธํฐ๊ฐ ๋์ง๋์ง ๋ถ์ด์ URL์ด ๋๋ฌ์์ง๋ ๊ฒฝํฅ์ด ์๊ธฐ ๋๋ฌธ์,
ํน์ ํ ์์ฑ์ ์ถ๊ฐํ์ฌ ์ด ๊ธฐ๋ฅ์ ๋๋ ๊ฒ์ ์ง์ํฉ๋๋ค.
no-error-return-url="true"
:error_return_url
ํ๋๋ฅผ ์ฃผ์ ํ์ง ์์ต๋๋ค.rx-autoform="false"
: ํผ ํ๋๋ฅผ ์๋์ผ๋ก ์ฃผ์ ํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋๋๋ค. (๋ผ์ด๋ฏน์ค 2.0.15 ์ด์)
์๋ฅผ ๋ค์ด ์๋์ ๊ฐ์ ํผ์ ์ผ์ฒด์ ์ถ๊ฐ ํ๋๋ฅผ ์ฃผ์
ํ์ง ์๊ณ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก,
ํผ ์ ์ถ์ /search?q=๊ฒ์์ด
๋ผ๋ ๊น๋ํ URL๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
<form action="/search" method="get" rx-autoform="false">
<input type="search" name="q" value="" />
<button type="submit">{$lang->cmd_search}</button>
</form>