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

Форум PHP

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

 

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

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

тема: Подключение шаблона
 
 автор: Лена   (12.05.2008 в 10:18)   письмо автору
 
 

Не могу понять, в чем дело. При подключении шаблона к модулю не происходит замены значений шаблона на значения, которые подставляются функцией 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;
?>

   
 
 автор: Trianon   (12.05.2008 в 12:21)   письмо автору
 
   для: Лена   (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).

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

Как исправлять код - сильно зависит от того, что у Вас лежит в шаблонном файле и в столбцах таблицы.

   
 
 автор: Лена   (12.05.2008 в 14:42)   письмо автору
 
   для: Trianon   (12.05.2008 в 12:21)
 

Вы меня прямо-таки озадачили. Действительно, при замене кода выбирается только одна строка, последняя. Мне же на разных страницах нужно вставлять разные данные...
Может, мне при выборке из таблицы указывать id текста? И тогда в зависимости от id выводить определенный массив значений(=определенную строку в таблице) на определенную страницу?

   
 
 автор: Trianon   (12.05.2008 в 15:15)   письмо автору
 
   для: Лена   (12.05.2008 в 14:42)
 

>Может, мне при выборке из таблицы указывать id текста?

Если Вам известно, какую строку нужно брать - именно так и следует строить запрос.

в этом случае
а) Вам не понадобится цикл
б) лучше воспользоваться функцией mysql_fetch_assoc()

   
 
 автор: Лена   (12.05.2008 в 15:32)   письмо автору
 
   для: Trianon   (12.05.2008 в 15:15)
 

Понятно. Все получилось. Спасибо.

   
Rambler's Top100
вверх

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