글쓴사람 이상철
글쓴시간2021년 11월 28일 오후 5시 25분 57초
    제목템플릿태그 변경
템플릿 태그로 { } , <!--{ } , { }--> , <!--{ }-->을 사용하고 있는데, 템플릿 태그를 제가 저만의 방식으로 수정할수 있을까요?

그리고 php파일에서 파일이름이 tp인경우에서 치환이 언제 되는지 알고 싶습니다.
예를 들어
index.php
<?php
include 'Template_.class.php';
$tpl = new Template_;
$tpl->define('index', 'index.tpl');
$tpl->assign('title', 'power of 2');
$loop = array();
for ($i=1; $i<=3; $i++) {
   $loop[] = array(             // or
       'exponent'=>$i,          // $loop[$i]['exponent']=$i;
       'power'   =>pow(2, $i),  // $loop[$i]['power']   =pow(2, $i);
   );                           //
}
$tpl->assign('row', $loop);
$tpl->print_('index');
?>

index.tpl
<table>
<tr><td colspan=2> {title} </td></tr>
<tr><td> exponent </td><td> 2^exponent </td></tr>
<!--{@ row}-->
<tr><td> {row.exponent} </td><td> {row.power} </td></tr>
<!--{/}-->
</table>

이렇게 하면 아래처럼 나오는데
<table>
<tr><td colspan=2> power of 2 </td></tr>
<tr><td> exponent </td><td> 2^exponent </td></tr>
<tr><td> 1 </td><td> 2 </td></tr>
<tr><td> 2 </td><td> 4 </td></tr>
<tr><td> 3 </td><td> 8 </td></tr>
</table>

php 파일에서 $loop  파일에 저장이 된 내용이 tpl 파일로 치환이 되는데, assign 함수를 봐도  {row.exponent} 를 치환하라는 내용이 없는데
템플릿태그를 치환하는 파일을 알수 있을까요?
관리자 이상철님 안녕하세요

1.

간단하게 태그를 바꾸는 설정은 없습니다
프리필터를 이용하면 가능은 합니다

https://tpl.xtac.net/tutorial4/#prefilter
https://tpl.xtac.net/reference/?item=parsemysyntax



2.

템플릿언더바는 문자열 치환 방식이 아니고 컴파일 방식입니다



-- 2015년 이후 글은 일정시간 후 블라인드하고 있으니 참고하시기 바랍니다
21-11-29 09:47
이상철 템플릿 태그 { } , <!--{ } , { }--> , <!--{ }-->
것을 %% 로 사용하려면 어떻게 해야 할까요? Template_.compiler.php를 수정해야하나요?
즉 %% <!--%%, %%-->, <!--%%-->
21-11-29 16:46
이상철 그리고 class Template_ 에 var $prefilter  = 'parseMySyntax';
이렇게 하면 될까요?
21-11-29 16:48
관리자 $prefilter 를 그렇게 하시고 플러그인 디렉토리에 있는
prefilter.parseMySyntax.php 소스를 필요에 따라 고쳐보세요

예를 들어 템플릿 태그로 <!--%  %--> 를 사용하려면

$map = [ '<!--%' => '<!--{',  '%-->' => '}-->' ];
return strtr($source, $map);
21-11-29 18:26
이상철 function parseMySyntax 에 '{loop' => '{@' 로 되어있는 것은 {loop를 {@로 바꾼다는 거죠?
만약에 '{loop '    =>'BEGIN'
'{endloop '    =>'END',
'<!--%'              => '<!--{',
'%-->'               => '}-->

이렇게 하면 템플릿코드를 사용할때 loop부분은 <!--BEGIN row--> %name% <!--END-->이렇게 하면 되나요?
21-11-30 12:07
관리자 반대로 이해하셨는데요
프리필터는 컴파일 시작 전에 실행되는 필터입니다
원하는 코드가 기본 코드로 바뀌게끔 설정하는 것이구요

기본코드는 {@  {/  <!--{ 등이고
{loop  BEGIN  <!--%  이런 것은 기본코드가 아니구요
21-11-30 14:26
    이름
비밀번호
 
Since 2003-03-03 hosted on vultr.com