setScope() ´ë½Å ¸ðµâ³»¿¡¼ º°µµÀÇ ÅÛÇø´ ¿ÀºêÁ§Æ®¸¦ »ý¼ºÇϰí fetch() ¸Þ¼µå¿¡ ÀÇÇÑ °á°ú¸¦ ¸®ÅÏÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇÒ ¼öµµ ÀÖÀ¸³ª ¸Þ¸ð¸®¸¦ ºñÈ¿À²ÀûÀ¸·Î »ç¿ëÇÏ°Ô µË´Ï´Ù.
| ¸Þ¼µå | ÀÇ¹Ì | »ç¿ë¹ý |
| setScope() | ÅÛÇø´º¯¼ö¸¦ ĸ½¶È | $tpl->setScope('file_id'); |
¡Ø ½ºÄÚÇÁ¿Í ÅÛÇø´º¯¼ö
$tpl->setScope("file_id"); ÀÌÈÄ ÇÒ´çµÈ ÅÛÇø´º¯¼ö´Â ÇØ´çÅÛÇø´("file_id")°ú ±× ÇÏÀ§ÅÛÇø´³»¿¡¼¸¸ À¯È¿ÇÕ´Ï´Ù. setScope()¿¡ ÀÎÀÚ¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ±âº»½ºÄÚÇÁ·Î º¹±ÍÇÕ´Ï´Ù.
| index.php |
|
<?php
... $tpl->define(array( 'layout'=>'layout.tpl', 'mod_a' =>'sub.tpl', 'mod_b' =>'sub.tpl', 'mod_c' =>'sub.tpl', )); $tpl->assign('var', 'hello'); $gvar='This is global value.'; $tpl->setScope('mod_a'); $tpl->assign('var', 'This is mod_a value.'); $tpl->setScope('mod_b'); $tpl->print_('layout'); ?> |
| layout.tpl |
|
<body>
<div> mod_a : {# mod_a}</div> <div> mod_b : {# mod_b}</div> <div> mod_c : {# mod_c}</div> <div> layout: {_gvar} - {var}</div> </body> |
| sub.tpl |
| {_gvar} - {var} |
| >>output |
|
<body>
<div> mod_a : This is global value. - This is mod_a value.</div> <div> mod_b : This is global value. - </div> <div> mod_c : This is global value. - hello</div> <div> layout: This is global value. - hello</div> </body> |
¾ð´õ¹Ù(_)·Î ½ÃÀÛÇÏ´Â Àü¿ªº¯¼ö´Â ½ºÄÚÇÁ¿¡ °ü°è¾øÀÌ ¾îµð¼³ª À¯È¿Çϰí, 'mod_b' ´Â ½ºÄÚÇÁ»ç¿ëÀ» ÁöÁ¤ÇßÀ¸³ª ÇØ´ç ½ºÄÚÇÁÀÇ ÅÛÇø´º¯¼ö°¡ °ªÀ» ÇÒ´ç¹ÞÁö ¸øÇ߱⠶§¹®¿¡ Ãâ·Â³»¿ëÀÌ ¾ø½À´Ï´Ù.
¡Ø ½ºÄÚÇÁ¸¦ ÀÌ¿ëÇÑ ¸ðµâÀÛ¼º ¿¹Á¦
| mod.listing.php |
|
function listing(&$tpl, $scope) {
$tpl->define($scope, 'mod.listing.tpl'); $tpl->setScope($scope); $tpl->assign('title', $scope); $query = 'select name, date from '.$scope.' where ------'; $result= mysql_query($query); $loop = array(); while ($data = mysql_fetch_assoc($result)) $loop[] = $data; $tpl->assign('list', $loop); $tpl->setScope(); } ?> |
| mod.listing.tpl |
|
<table>
<tr><td colspan=2>{title}</td></tr> <!--{@ list}--> <tr><td>{list.name}</td><td>{list.date}</td></tr> <!--{/}--> </table> |
| index.php |
|
<?php
... include LIB_DIR.'/mod.listing.php'; $tpl = new Template_; listing($tpl, 'fruit'); listing($tpl, 'sport'); $tpl->define('layout', 'layout.tpl'); $tpl->assign('title', 'My Page'); $tpl->print_('layout'); ?> |
| layout.tpl |
|
<div>{title}</div>
{# fruit} {# sport} |
| >>output |
|
<div>My Page</div>
<table> <tr><td colspan=2>fruit</td></tr> <tr><td>apple</td><td>2003-09-26</td></tr> <tr><td>orange</td><td>2003-08-20</td></tr> <tr><td>melon</td><td>2003-05-05</td></tr> </table> <table> <tr><td colspan=2>sport</td></tr> <tr><td>running</td><td>2003-07-10</td></tr> <tr><td>pingpong</td><td>2002-01-01</td></tr> <tr><td>pushup</td><td>2000-03-06</td></tr> </table> |
¡Ø ½ºÄÚÇÁ¿Í ÆÄÀϾÆÀ̵ð
½ºÄÚÇÁ»ç¿ëÀÌ ÁöÁ¤µÈ ÅÛÇø´ ¿ª½Ã ÇÏÀ§ÅÛÇø´À» °¡Áú ¼ö Àִµ¥, ½ºÄÚÇÁ»ç¿ëÀÌ ÁöÁ¤µÈ ÅÛÇø´ÀÇ ÆÄÀϾÆÀ̵𰡠"scope_id" ¶ó¸é, ÇÏÀ§ÅÛÇø´Àº, "scope_id.file_id" ÀÇ Çü½ÄÀ¸·Î Á¤Àǵ˴ϴÙ.
| index.php |
|
<?php
... $tpl->define(array( 'layout' =>'layout.tpl', 'mod' =>'sub0.tpl', 'mod.sub1'=>'sub1.tpl', 'mod.sub2'=>'sub2.tpl', )); $tpl->setScope('mod'); $tpl->assign(array( 'var'=>'This is mod value 1.', 'abc'=>'This is mod value 2.', 'xyz'=>'This is mod value 3.', )); $tpl->print_('layout'); ?> |
| layout.tpl |
|
<body>
{# mod} </body> |
| sub0.tpl |
|
{var}
{# sub1} {# sub2} |
| sub1.tpl |
| {abc} |
| sub2.tpl |
| {xyz} |
| >>output |
|
<body>
This is mod value 1. This is mod value 2. This is mod value 3. </body> |
PHP ÆÄÀÏ¿¡¼´Â "mod.sub1" ÀÌÁö¸¸, ÅÛÇø´ÆÄÀÏ ³»¿¡¼´Â ½ºÄÚÇÁ¸¦ »ç¿ëÇÏÁö ¾ÊÀ» ¶§¿Í ¶È°°ÀÌ {# sub1} ÀÓ¿¡ À¯ÀÇÇÕ´Ï´Ù.
24. ij½³
ij½¬¸¦ »ç¿ëÇϸé, ÇÑ ¹ø Ãâ·ÂÇß´ø °á°ú¹°À» ÀúÀåÇÏ¿´´Ù°¡, °°Àº Ãâ·ÂÀÌ ÇÊ¿äÇÏ´Ù¸é ÇÁ·Î±×·¥½ÇÇàÀ» »ý·«Çϰí ÀúÀåµÈ °á°ú¹°À» Ãâ·ÂÇÏ°Ô µË´Ï´Ù.
Note:
ÅÛÇø´ ÆÄÀÏÀ» PHP ÆÄÀÏ·Î º¯È¯ÇÏ´Â °ÍÀº ij½¬°¡ ¾Æ´Õ´Ï´Ù. º¯È¯ÆÄÀÏÀº À־ ¾ø¾îµµ ÁÁÀº ÀÓ½ÃÀûÀÎ °ÍÀÌ ¾Æ´Ï¶ó, Ãâ·ÂÀ» À§Çؼ ¹Ýµå½Ã ÇÊ¿äÇϱ⠶§¹®ÀÔ´Ï´Ù. ÅÛÇø´¾ð´õ¹Ù¿Í °ü·ÃÇÏ¿© µÎ °¡Áö ij½¬°¡ ÀÖ½À´Ï´Ù.
Çϳª´Â, Zend Performance Suit, TurckMMCache, PHPA ¿Í °°ÀÌ ¼³Ä¡¸¸ ÇÏ¸é µ¿ÀÛÇϴ ij½¬¿£ÁøÀÔ´Ï´Ù. ÀÌµé ¿£ÁøÀº ÇÑ ¹ø ÆÄ½Ì/½ÇÇàµÈ PHP ÆÄÀÏÀÇ ¿ÉÄÚµå(opcode)¸¦ ÀúÀåÇÏ¿© ´ÙÀ½ ¹ø ½ÇÇàºÎÅÍ´Â ÆÄ½ÌÀ» »ý·«ÇÏ°í ¿ÉÄڵ带 ¹Ù·Î ½ÇÇàÇÏ°Ô ÇÕ´Ï´Ù. ÀÌ ¶§, ÅÛÇø´Å¬·¡½ºÆÄÀÏ »Ó ¾Æ´Ï¶ó ÅÛÇø´ º¯È¯ÆÄÀÏ ¿ª½Ã PHP ÆÄÀÏÀ̹ǷΠÀÌµé ¿£Áø¿¡ ÀÇÇØ ¸ðµÎ ij½³µË´Ï´Ù.
µÎ ¹øÂ°´Â ÀÌ ¼½¼Ç¿¡¼ ¼³¸íÇϴ ij½¬ÀÔ´Ï´Ù.
Çϳª´Â, Zend Performance Suit, TurckMMCache, PHPA ¿Í °°ÀÌ ¼³Ä¡¸¸ ÇÏ¸é µ¿ÀÛÇϴ ij½¬¿£ÁøÀÔ´Ï´Ù. ÀÌµé ¿£ÁøÀº ÇÑ ¹ø ÆÄ½Ì/½ÇÇàµÈ PHP ÆÄÀÏÀÇ ¿ÉÄÚµå(opcode)¸¦ ÀúÀåÇÏ¿© ´ÙÀ½ ¹ø ½ÇÇàºÎÅÍ´Â ÆÄ½ÌÀ» »ý·«ÇÏ°í ¿ÉÄڵ带 ¹Ù·Î ½ÇÇàÇÏ°Ô ÇÕ´Ï´Ù. ÀÌ ¶§, ÅÛÇø´Å¬·¡½ºÆÄÀÏ »Ó ¾Æ´Ï¶ó ÅÛÇø´ º¯È¯ÆÄÀÏ ¿ª½Ã PHP ÆÄÀÏÀ̹ǷΠÀÌµé ¿£Áø¿¡ ÀÇÇØ ¸ðµÎ ij½³µË´Ï´Ù.
µÎ ¹øÂ°´Â ÀÌ ¼½¼Ç¿¡¼ ¼³¸íÇϴ ij½¬ÀÔ´Ï´Ù.
ij½¬¸¦ »ç¿ëÇÏ·Á¸é $caching ¼Ó¼ºÀ» true·Î ÇÕ´Ï´Ù. $cache_dir ¼Ó¼º¿¡´Â ij½¬ÆÄÀÏÀÌ ÀúÀåµÉ µð·ºÅ丮¸¦ ÁöÁ¤(Àý´ë ¶Ç´Â »ó´ë°æ·Î)Çϰí À¥¼¹ö°¡ ÀÐ°í ¾µ ¼ö ÀÖµµ·Ï ±ÇÇÑ ¼³Á¤À» ÇÕ´Ï´Ù.
var $caching = true;
var $cache_dir = '/path/to/_cache';
var $cache_dir = '/path/to/_cache';
¡Ø ±âº» »ç¿ë¹ý, ¸¸·á½Ã°£¿¡ ÀÇÇÑ Ä³½¬ °»½Å
| ¸Þ¼µå | ÀÇ¹Ì | »ç¿ë¹ý |
| setCache() | ÅÛÇø´¿¡ ij½¬Á¤º¸ ¼³Á¤ | $tpl->setCache('file_id', expiration); |
| isCached() | ij½¬ÀÇ À¯È¿¿©ºÎ ÆÇº° | $tpl->isCached('file_id'); |
setCache() ¸Þ¼µåÀÇ Ã¹ ¹øÂ° ÀÎÀÚ·Î ÁöÁ¤µÈ ÆÄÀϾÆÀ̵𿡠´ëÇØ ij½¬¸¦ µ¿ÀÛ½ÃŰ°Ô µË´Ï´Ù. ij½¬°¡ ¸¸µé¾îÁö¸é, µÎ ¹øÂ° ÀÎÀÚ·Î ÁöÁ¤µÈ ½Ã°£µ¿¾È »ç¿ëµÈ ÈÄ °»½ÅµË´Ï´Ù.
| index.php |
|
<?php
... $tpl->define(array( 'layout'=>'layout.tpl', ..., ..., )); $tpl->setCache('layout', 3600); // update per 1 hour if (!$tpl->isCached('layout')) { // code for layout } $tpl->print_('layout'); ?> |
isCached() ¸Þ¼µå´Â ij½¬ÀÇ À¯È¿¿©ºÎ¸¦ ¸®ÅÏÇϹǷÎ, ij½¬°¡ À¯È¿ÇÒ ¶§´Â // code for layout ºí·°ÀÇ ½ÇÇàÀÌ »ý·«µË´Ï´Ù.
setCache() ÀÇ µÎ ¹øÂ°ÀÎÀÚ°¡ 0 À̸é ij½¬°¡ ¸¸µé¾îÁøÈÄ °»½ÅµÇÁö ¾Ê°í °è¼Ó »ç¿ëµË´Ï´Ù. 1 À̸é $cache_expire ¼Ó¼º¿¡ ¼³Á¤µÈ ±âº»°ªÀ» »ç¿ëÇÏ°Ô µË´Ï´Ù.
ÅÛÇø´ ÆÄÀϺ°·Î ij½¬¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ ">"À¸·Î Á¤ÀÇÇÑ ¿ÜºÎ PHP ÆÄÀÏ¿¡µµ ij½¬¸¦ ¼³Á¤ÇÒ ¼ö ÀÖÀ¸¸ç, À̰ÍÀ» ÅëÇØ ÅÛÇø´¾ð´õ¹Ù¸¦ ij½¬¿£ÁøÀ¸·Î¸¸ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
| index.php |
|
<?php
... $cache = new Template_; $cache->define('>source', '/path/to/other-php-source.php'); $cache->setCache('source', 3600); $cache->print_('source'); ?> |
¡Ø »èÁ¦¾ÆÀ̵𿡠ÀÇÇÑ Ä³½¬ °»½Å
setCache() ¸Þ¼µåÀÇ ¼¼ ¹øÂ° ÀÎÀÚ·Î »èÁ¦¾ÆÀ̵𸦠ÁöÁ¤ÇÒ ¼ö ÀÖÀ¸¸ç. ÀÌ ¾ÆÀ̵𸦠»ç¿ëÇÏ¿© ¾î¶² ÆäÀÌÁö¿¡¼µç $cache_dir ¼³Á¤ÀÌ °°´Ù¸é ¸¸·á½Ã°£¿¡ °ü°è¾øÀÌ °Á¦¸¸·á½Ãų ¼ö ÀÖ½À´Ï´Ù.
$tpl->setCache( 'file_id', 3600, 'clear_id' );
$tpl->clearCache( 'clear_id' );
| ¸Þ¼µå | ÀÇ¹Ì |
| clearCache() | ÀÎÀÚ·Î ÁöÁ¤µÈ »èÁ¦¾ÆÀ̵𸦠°®´Â ¸ðµç ij½¬¸¦ »èÁ¦ÇÔ |
¿£Áø ³»ºÎÀûÀ¸·Î´Â ij½¬Çì´õ¸¦ °Ë»öÇØ¼ ij½¬ÆÄÀÏÀ» ½ÇÁ¦·Î »èÁ¦ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, º°µµÀÇ µð·ºÅ丮¿¡¼ °ü¸®µÇ´Â »èÁ¦¾ÆÀ̵ðÁ¤º¸¸¸À» ¾ï¼¼½ºÇϹǷΠºü¸£°Ô 󸮵˴ϴÙ.
clearCache() ¿¡ ÀÎÀÚ¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ¸ðµç ij½¬ÆÄÀÏÀ» »èÁ¦ÇÕ´Ï´Ù.
| show-list.php |
|
<?php
... $tpl->define(array( 'layout'=>'layout.tpl', 'main' =>'shop/listing.tpl', ... )); $tpl->setCache('main', 0, 'book_list'); if (!$tpl->isCached('main')) { // code for listing } $tpl->print_('layout'); ?> |
| update-list.php |
|
<?php
... // code for updating list $tpl->clearCache('book_list'); ... ?> |
setCache() ÀÇ ¼¼ ¹øÂ° ÀÎÀÚ·Î ¹®ÀÚ¿ ´ë½Å ¿©·¯ °³ÀÇ »èÁ¦¾ÆÀ̵𸦠¹è¿·Î ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ Áß Çϳª¶óµµ clearCache() ·Î 󸮵Ǹé ij½¬´Â °»½ÅµË´Ï´Ù.
$tpl->setCache( 'file_id', 1800, array('book', 'magazine') );
¶ÇÇÑ ¿©·¯ ij½¬°¡ °°Àº »èÁ¦¾ÆÀ̵𸦠°¡Áú °æ¿ì »èÁ¦¾ÆÀ̵𰡠clearCache() ·Î 󸮵Ǹé ÇØ´çµÇ´Â ¸ðµç ij½¬°¡ °»½ÅµË´Ï´Ù.
¼¼ ¹øÂ° ÀÎÀÚ·Î ºó¹®ÀÚ¿('')À» ÁöÁ¤ÇÏ¸é »èÁ¦¾ÆÀ̵ð´Â ¼³Á¤µÇÁö ¾Ê½À´Ï´Ù.
¡Ø ij½¬¾ÆÀ̵𿡠ÀÇÇÑ ´ÙÁß Ä³½¬
¿¹¸¦ µé¾î º» ½ÎÀÌÆ®ÀÇ ·¹ÆÛ·±½º ÆäÀÌÁö´Â get À¸·Î Àü´ÞµÈ º¯¼öÀÇ °ª¿¡ µû¶ó ´Ù¸¥ ÆäÀÌÁö¸¦ Ãâ·ÂÇÕ´Ï´Ù. setCache() ¸Þ¼µåÀÇ ³× ¹øÂ° ÀÎÀÚ¸¦ ¼³Á¤ÇÔÀ¸·Î½á °¢°¢ÀÇ ÆäÀÌÁö¸¦ ij½³ÇÒ ¼ö ÀÖ½À´Ï´Ù.
$tpl->setCache( 'body', 0, '', $_GET );
³× ¹øÂ° ÀÎÀÚ´Â ¹®ÀÚ¿, º¯¼ö, ¹è¿(À妽º¹è¿, ¿¬°ü¹è¿, ´ÙÁß¹è¿) µîÀ¸·Î ÁöÁ¤µÉ ¼ö ÀÖ°í, ¿£Áø ³»ºÎÀûÀ¸·Î´Â serialize() ÇÔ¼ö¿¡ ÀÇÇØ ij½¬¾ÆÀ̵ð·Î ¼³Á¤µË´Ï´Ù. ¹è¿·Î ÁöÁ¤ÇÒ ¶§ ÇÊ¿äÇÑ º¯¼ö¸¸À» Æ÷ÇÔÇÏ¿© ºÒÇÊ¿äÇÏ°Ô ¸¹Àº ij½¬ÆÄÀÏÀÌ ¸¸µé¾îÁöÁö ¾Êµµ·Ï ÇÕ´Ï´Ù.
ij½¬´Â »ç¿ë¹üÀ§°¡ Á¦ÇÑÀûÀ̸ç Àû¿ë¹æ½ÄÀÌ ´Ù¾çÇÕ´Ï´Ù. »ç¿ë½Ã ¾î·Á¿îÁ¡ÀÌ ÀÖ´Ù¸é °Ô½ÃÆÇ¿¡ ¹®ÀÇÇϽñ⠹ٶø´Ï´Ù.


