안녕하세요... 여전히 Template_ 를 잘~~ 사용하고 있습니다.
오랜만에 업데이트 확인하러 들렸는데 마땅히 할말도 없고 해서
제가 사용하는 팁. 하나 올립니다. (사실 대충 쓰다가, 금방 막 급조했습니다. -_-;;)
템플릿에서 사용가능한 변수 목록을 뿌려주는건데요...
로직 + 템플릿 으로 작업한 후에,
나중에는 로직은 그대로 둔채 주로 템플릿만을 수정하게 되는데...(특히 머, 스킨의 추가 라던가... 디스플레이 방법의 변경이라던가..)
이럴때 로직에서 어떤 변수들을 템플릿에 assign 했는지 찾아봐야죠..
그리고 어떤때는 실제 어떤 값이 들어가는지 봐야 할때도 있고요..
그런데, 이 로직이 하나의 파일이면 상관없지만... 로직또한 모듈화 한다고...여러 파일에 나눠놓고... 각 파일에서 각각 assign 할때... 아.. include 와 require 따라 ~~~~
머 하여튼...
특히, 다른 작업자(디자이너라던가, 코더 라던가)에게 템플릿 작업만을 줄때,
템플릿에서 어떤 변수가 사용가능한지 설명해줘야 하는데 이때, 그 목록을 표시하기 위해서 사용합니다.
뭐, 템플릿에 assign 시의 문제에 대한 디버그용으로도 사용합니다.
지금까지 제가 쓰면서 불편한점은 없었고요...
* 단지, 스코프를 사용안해서... 그에 대한 변수 목록은 출력을 안했습니다.
자~~~ 팁 갑니다.
그냥, Template_ 클래스의 print_ 메소드에서 print_r($this); 하시면 됩니다. -_-;;; 하.하...
물론 그렇게 해도 됩니다만...
저의 경우 Template_ 클래스를 상속받아서 커스터마이즈한 Template 클래스를 사용하는데... 최종적으로 템플릿을 출력하는 메소드에서 아래와 같은 코드를 넣습니다.
아니면, Template_ 클래스의 print_ 메소드에 넣어도 상관없을것 같습니다..... (만....)
if ($_GET['print_tpl_var']==='yes')
{
//print_r($this->var_);
$var_list = array();
foreach ($this->var_[''] as $name=>$var)
{
if (is_object($var)) $var_list['class'][] = $name;
if (is_array($var)) $var_list['array'][] = $name;
else $var_list['normal'][] = $name;
}
foreach (array_keys($this->obj_) as $name) $var_list['class'][] = 'p.'.substr($name, strlen('tpl_object_'));
foreach (array_keys($GLOBALS) as $name) $var_list['global'][] = (ereg("^_", $name)?'':'_').$name;
echo('<hr><h2>Usable Varible List</h2>');
foreach ($var_list as $var_type=>$vars)
{
echo('<h4>'.$var_type.'</h4><ul>');
foreach ($vars as $var_name)
{
if (ereg("^p\.([a-zA-Z0-9_]+)$", $var_name, $tmp)) echo('<li> <a href='.$_SERVER['SCRIPT_NAME'].'?print_tpl_var=yes&print_obj_var_detail=tpl_object_'.$tmp[1].'>'.$var_name.'</a>');
if (ereg("^_([a-zA-Z0-9_]+)$", $var_name, $tmp)) echo('<li> <a href='.$_SERVER['SCRIPT_NAME'].'?print_tpl_var=yes&print_global_var_detail='.$tmp[1].'>'.$var_name.'</a>');
else echo('<li> <a href='.$_SERVER['SCRIPT_NAME'].'?print_tpl_var=yes&print_tpl_var_detail='.$var_name.'>'.$var_name.'</a>');
}
echo('</ul>');
}
echo('<hr>');
if ($_GET['print_tpl_var_detail'] != '')
{
echo('<hr><h2>Varible Detail :: '.$_GET['print_tpl_var_detail'].'</h2><xmp>');
$print_var = &$this->var_[''][$_GET['print_tpl_var_detail']];
print_r($print_var);
echo('</xmp><hr>');
}
if ($_GET['print_obj_var_detail'] != '')
{
echo('<hr><h2>Varible Detail :: '.$_GET['print_obj_var_detail'].'</h2><xmp>');
$print_var = &$this->obj_[$_GET['print_obj_var_detail']];
print_r($print_var);
echo('</xmp><hr>');
}
if ($_GET['print_global_var_detail'] != '')
{
$var_name = $_GET['print_global_var_detail'];
global ${$var_name},${'_'.$var_name};
echo('<hr><h2>Gobal Variable Detail :: '.$var_name.'</h2><xmp>');
if (isset(${$var_name})) print_r(${$var_name});
else if (isset(${'_'.$var_name})) print_r(${'_'.$var_name});
else 'not defined';
echo('</xmp><hr>');
}
exit;
}
그리고 실행 스크립트 URL 에 .. print_tpl_var=yes 를 다음과 같이 붙이면
http://some_url/script.php?print_tpl_var=yes
템플릿에서 사용가능한 변수가..
normal / array / class / global 로 구분되어 리스트업되고..
각각의 변수 이름을 클릭하면 해당 변수에 할당된 값이 나오게 됩니다.