글쓴사람 양요한
글쓴시간2004년 7월 1일 오후 5시 4분 27초
    제목[팁] 템플릿에서 사용가능한 변수 목록
안녕하세요... 여전히 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 로 구분되어 리스트업되고..
각각의 변수 이름을 클릭하면 해당 변수에 할당된 값이 나오게 됩니다.

실행되는 화면입니다. :: http://yangkun.artpq.com/images/snap1.jpg

소스에 보면... $this->var_[''] 라고 사용했는데...
이 배열에 기본 스코프 변수들이 할당되는것 같습니다....
scp_ 에 스코프 이름 목록이 들어가는것 같구요... 맞나요 ?
그걸 알면 스코프 변수도 함께 뿌릴수 있겠는데요~

설명이 조금...거시기 한데...  온라인 상에서 쓰는거라 이해해 주시길..
소스를 보면 아실거라고 봅니다. 그럼 즐거운 프로그래밍 하세요~~~

아, 관리자님..잘 지내시죠 ?
( 매번 부를때마다 머라 불러야할지 고민스럽습니다. --;; )
건강하세요~~~ 틈틈이 Templat_ 작업하고 계실거라 믿고요 ^^
다음 버전도 기대하겠습니다.... ^^

※ 아, 위의 기능을 관리자님게서 Templae_ 에 나이스하게 넣어주셔도 좋을거 같은데요.. ^^;;
관리자 멋진데요^^

객체까지 꼼꼼히 신경쓰셨네요

잘 보면 볼거리가 한 두 가지가 아닌데..

YangKun Factory 도 알찬 내용들이고..

스크린샷 인터페이스가 라이트스텝이 아닐까 했는데

맞는 거 같네요ㅎㅎ

종종 들러서 좋은 정보 얻어 가겠습니다.^^
04-07-02 00:31
Jay 햐~  정말 멋지네요~ ^^ 감사히 쓸께요~
04-07-05 08:11
    이름
비밀번호
 
Since 2003-03-03 hosted on vultr.com