|
|
|
| дан шаблон:
<html>
<body>
{(menu_tpl)|INC}<br>
{(copyright_tpl)|INC}
</body>
</html>
|
я использую рег. выр чтобы подключать выражения в скобках вот так:
...
$ptr='|{\((.*)\)\|INC}|';
$file=preg_replace_callback($ptr,'ss',$file);
function ss ($regs)
{
return file_get_contents('templates/classic/'.$regs[1].'.tpl');
}
...
|
все заменяет, но возникла потребность сделать так чтоб можно было заменять выражения вида {(file_tpl)|INC} не только на странице но и в самих выражениях....т.е искать например
в menu_tpl ({(menu_tpl)|INC}) такие же выражения и заменить их тоже...применил рекурсию, вот так:
....
$ptr='|{\((.*)\)\|INC}|';
preg_match_all ($ptr,$file,$out, PREG_PATTERN_ORDER);
$file=preg_replace_callback($ptr,'ss',$file);
if (sizeof($out)>0)
{
foreach ($out[1] as $skey)
{
templates_page($skey,$templates,$val);
}
}
....
return $file;
|
но не работает..т.е заменяет только первые выражения ( {(menu_tpl)|INC} и {(copyright_tpl)|INC} на содержимое файлов menu_tpl и copyright_tpl) а остальные, которые содержаться в этих файлах игнорирует...тоесть получим например на выходе такой шаблон:
<html>
<body>
Здесь меню{(submenu_tpl)|INC}<br>
здесь авторские права{(subcopyright_tpl)|INC}
</body>
</html>
|
помогите дописать... | |
|
|
|
|
|
|
|
для: Alph[p]a
(31.01.2008 в 19:07)
| | рекурсия это наверное так:
<?
$text="<html>
<body>
{(menu_tpl)|INC}<br>
{(copyright_tpl)|INC}
</body>
</html>";
function xx($txt)
{
$ptr='#\{\((\w+)\)\|INC\}#';
return $file=preg_replace_callback($ptr,'ss',$txt);
}
function ss($regs)
{
return xx(file_get_contents('templates/classic/'.$regs[1].'.tpl'));
}
echo xx($text);
?>
|
| |
|
|
|