 |
 |
 |
 |
 |
|
|
|
 |
 |
 |
 |
 |
 |
글쓴사람 | 이상철 |
글쓴시간 | 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 |
 |
|
 |
 |
 |
 |
|
|
|
|