|
|
|
| Не могу понять, в чем дело. При подключении шаблона к модулю не происходит замены значений шаблона на значения, которые подставляются функцией change_tpl(). В броузер выводится неизмененный код шаблона: <%page_title%>
<%date%>
<%announce%>
Код шаблона:
<html>
<h3><%page_title%></h3>
<%date%><br>
<div class="announce"><%announce%></div>
</html>
|
Код функции, которая заменяет пары имя-значение в шаблоне:
<?php
function change_tpl($file, $macros){
$info = file_get_contents($file);
foreach($macros as $key=>$value)
{
$info = str_replace("<%$key%>", $value, $info);
}
return $info;
}
?>
|
И код поключения шаблона к модулю:
<?php
require_once ("../../../dbopen.php"); //соединение с базой
include ("change_template.php");
$result = mysql_query("SELECT * FROM `news`");
if(!$result) exit(mysql_error());
while ($row = mysql_fetch_array($result)) {
$title = $row['page_title'];
$date = $row['date'];
$announce = $row['announce'];
}
$path = "../../../admin/html/news/news.html";
$values = array($title, $date, $announce);
$new_tpl = change_tpl($path, $values);
echo $new_tpl;
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(12.05.2008 в 10:18)
| | Строкой $values = array($title, $date, $announce); Вы формируете массив с числовыми индексами, в то время как в функции применяется ассоциативный массив (с ключами 'page_title','date','announce').
Можно было бы написать $values = array('page_title' => $title, 'date' => $date, ,'announce' => $announce);
Но если взглянуть на код выше, окажется, что такой массив у Вас уже был. Массив $row cсодержал все эти данные (и еще кучу лишних) сразу после выполнения $row = mysql_fetch_array($result).
Между прочим, этот оператор у Вас выполняется в цикле столько раз, сколько строк имеется в таблице. В конце концов данные остаются взятыми из последней строки таблицы, информация из остальных строк теряется. И это, видимо, не совсем то, чего Вы хотели достичь.
Как исправлять код - сильно зависит от того, что у Вас лежит в шаблонном файле и в столбцах таблицы. | |
|
|
|
|
|
|
|
для: Trianon
(12.05.2008 в 12:21)
| | Вы меня прямо-таки озадачили. Действительно, при замене кода выбирается только одна строка, последняя. Мне же на разных страницах нужно вставлять разные данные...
Может, мне при выборке из таблицы указывать id текста? И тогда в зависимости от id выводить определенный массив значений(=определенную строку в таблице) на определенную страницу? | |
|
|
|
|
|
|
|
для: Лена
(12.05.2008 в 14:42)
| | >Может, мне при выборке из таблицы указывать id текста?
Если Вам известно, какую строку нужно брать - именно так и следует строить запрос.
в этом случае
а) Вам не понадобится цикл
б) лучше воспользоваться функцией mysql_fetch_assoc() | |
|
|
|
|
|
|
|
для: Trianon
(12.05.2008 в 15:15)
| | Понятно. Все получилось. Спасибо. | |
|
|
|