class Template
{
public static function replace_cycle($tpl_name, $tag_name, $replacement)
{
$tpl_path = self::$tpl_dir . $tpl_name;
if(file_exists($tpl_path))
{
$result = "";
$tpl_ctn = file_get_contents($tpl_path);
$preg_pattern = "#\[".$tag_name."\](.*)\[/".$tag_name."\]#isU";
preg_match($preg_pattern, $tpl_ctn, $rep);
if(count($rep) > 0)
{
$tpl_rep = $rep[0];
$tpl_action = $rep[1];
$complate = "";
foreach($replacement as $v)
{
foreach($v as $original=>$repOrig)
{
$result = str_replace($original, $repOrig, $tpl_action);
}
$complate .= $result;
$result = "";
}
$result = str_replace($tpl_rep, $complate, $tpl_ctn);
}
else
{
$result = null;
}
}
else
{
$result = null;
}
return $result;
}
}
На одной странице делаю вот так:
$array = array();
$array[] = array(
'{theme}' => 'ggg'
);
$array[] = array(
'{theme}' => 'fff',
'{date}' => date("y-m-d h-i-s")
);
$result = Template::replace_cycle("pm.tpl", "working_area", $array);
parent::$content = $result;
Мне заменяет все нужные теги в шаблоне, между [working_area][/working_area]
на то, что я прописал в массиве. НА второй же странице эта конструкция не работает:
$messages = Database::query("SELECT `id`, `theme`, `author`, `date`, `view` FROM `pm` WHERE `folder`='vh' and `success` = 'all' or `success` = 'to'");
$array = array();
if($messages->num_rows > 0)
{
while($pm = $messages->fetch_assoc())
{
$new_pm = $pm['view'] == 1 ? "":"<img src='/template/images/new_pm.jpg' />";
$array[] = array(
'{views}' => $new_pm,
'{theme}' => $pm['theme'],
'{author}' => $pm['author'],
'{date}' => $pm['date'],
'{checked}' => "<input type='checkbox' value='".$pm['id']."'>",
);
}
$result = Template::replace_cycle("pm.tpl", "working_area", $array);
}
else
{
$result = "<p>У вас нет новых сообщений</p>";
}
Дамп массива $array таков:
<pre>Array
(
[0] => Array
(
[{views}] => <img src="/template/images/new_pm.jpg">
[{theme}] => Test theme
[{author}] => Shiper
[{date}] => 2012-12-29
[{checked}] => <input type="checkbox" value="1">
)
)
</pre>
То есть массив не пуст.
А при выводе ничего не заменилось, кроме последнего элемента в массиве, то есть чекбокс. В чем проблема?