Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: неправильная работа рекурсии
 
 автор: Alph[p]a   (31.01.2008 в 19:07)   письмо автору
 
 

дан шаблон:

<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>

помогите дописать...

   
 
 автор: EXP   (01.02.2008 в 03:12)   письмо автору
 
   для: 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);

?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования