работа с блоками шаблонов

Stalkerok

Новичок
работа с блоками шаблонов

есть файл:

++++++файл++++++
_________________________________
|<cont_start> |<block_start> |
|_______________|________________|
|<news_start> |<photo_start> |
|_______________|________________|

<cont_end>
<news_end>
<block_end>
<photo_end>
+++++++++++++++

причём самих блоков может быть больше или меньше.
надо извлеч блочную информацию из этого файла.

вот что у меня получилось:

PHP:
function load_tpl($file_name){
 global $file_contents;
 $file_name="templates/$file_name.html";
 $fh = fopen($file_name, "r");
 $file_contents = fread($fh, filesize($file_name));
 fclose($fh);
}
PHP:
function parse_tpl($variables_name,$change_variables_name) {
 global $file_contents,$contents_blok;
 $separator="/*/";

 $variables=explode($separator, $variables_name);
 $change_variables=explode($separator, $change_variables_name);
 
 
 $contents_blok=explode("<--block-->", $file_contents);
 $x=0;
 while ($x < count($variables)):
         $contents_blok[1]=str_replace("{".$variables[$x]."}",$change_variables[$x],$contents_blok[1]);
         $x++;
 endwhile;
 return $contents_blok[1];
}
PHP:
function print_tpl($content) {
global $contents_blok;
echo eval($contents_blok[0].$content.$contents_blok[2]);	
}
пример работы


PHP:
function ShowNews() {
 $result = mysql_query("SELECT * FROM news ORDER BY id DESC");
 $num_row = mysql_num_rows($result);
 while ($row = mysql_fetch_array($result)) {
         $text[]       = $row["text"];
         $link[]       = $row["link"];
 }
 mysql_free_result($result);
 load_tpl("news");
 $content_tpl=null;
 for ($i = 0; $i < ($num_row); $i++) {
  $content_tpl.=parse_tpl("text","$text[$i]");  
 }
print_tpl($content_tpl);
}

а мне надо как то сделать чтобы просто прописать:
PHP:
load_tpl("tpl");
$i.=parse_tpl("cont","text","$text");
$i.=parse_tpl("news","date","$date");

echo eval $i;
но я не как не пойму как разделить и записать отдельные куски файлов в массив или динамические переменные?
 

Фанат

oncle terrible
Команда форума
тут совсем недавно один чувак точно такую же тему поднимал
и ему там даже что-то такое ответили, что ему понравилось
 

Stalkerok

Новичок
Фанат, всё проискал прежде чем написать вопрос. ссылочку можно?
 

Stalkerok

Новичок
насколько я понял вопрос решается preg_match_all только как воспользоваться этой функции чтобы скомпановать название блока и его вывод?
 

Stalkerok

Новичок
практически сделал )
preg_match("!<start_block>(.*?)<end_block>!si",$string,$ok) нахлдит текс между block

а как сделать если имена будут меняться например banner или news

и как присвоить в массиве данных что у blok один текст а у news другой.

-~{}~ 22.08.06 16:13:

спасибо за помощ!!!!!!!!!!!!!!!!!!!! так держать ребята ПХП Клуба

-~{}~ 22.08.06 16:20:

куму интересно можно отталкиваться от этого.

<?php
// Запись \\2 является примером использования ссылок на подмаски.
// Она означает необходимость соответствия подстроки строке, зафиксированной
// второй подмаской, в нашем примере это ([\w]+).
// Дополнительный слеш необходим, так как используются двойные кавычки.

$html = "<b>bold text</b><a href=howdy.html>click me</a>";

preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches);

for ($i=0; $i< count($matches[0]); $i++) {
echo "matched: " . $matches[0][$i] . "\n";
echo "part 1: " . $matches[1][$i] . "\n";
echo "part 2: " . $matches[3][$i] . "\n";
echo "part 3: " . $matches[4][$i] . "\n\n";
}
?>
 
Сверху