[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод записей в шаблон
lightstar
Доброго время суток!
Такая проблемка: нужен вывод из бд при помощи шаблона несколько записей, но получается что вывод идет только последней записи. Нужна помощь.

parse.class.php
<?php
class
parse_class{
var $vars = array();
var $template;

function get_tpl($tpl_name){
if(empty($tpl_name) || !file_exists($tpl_name)){
return false;
}else{
$this->template = file_get_contents($tpl_name);
}
}

function set_tpl($key,$var){
$this->vars[$key] = $var;
}
function tpl_parse(){
foreach($this->vars as $find => $replace){
$this->template = str_replace($find, $replace, $this->template);
}
}
}

$parse = new parse_class;
?>


test.php
<?php
include 'db.php'; //Подключаемся к БД
require 'classes/parse.class.php'; // Подключаем файл с классом

$parse->get_tpl('templates/test.tpl'); //Файл который мы будем парсить

$query = "SELECT `name`
FROM `table`"
;
$sql = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_assoc( $sql )){

$parse->set_tpl('{name}',$row['name']); //Установка переменной

}
$parse->tpl_parse(); //Парсим
print $parse->template; //Выводим нашу страничку
?>


test.tpl
{name}<br />




Спустя 2 часа, 33 минуты, 30 секунд (25.10.2011 - 23:15) imbalance_hero написал(а):
$text .= $parse->tpl_parse(); //внутри цикла,
Выводим переменную text.

Спустя 25 минут, 45 секунд (25.10.2011 - 23:41) lightstar написал(а):
Цитата (imbalance_hero @ 25.10.2011 - 20:15)
$text .= $parse->tpl_parse(); //внутри цикла,
Выводим переменную text.

не выводиться вообще ничего

Спустя 2 минуты, 37 секунд (25.10.2011 - 23:43) Winston написал(а):
Цитата (lightstar @ 25.10.2011 - 23:41)

Цитата (imbalance_hero @ 25.10.2011 - 20:15)
$text .= $parse->tpl_parse(); //внутри цикла,
Выводим переменную text.

не выводиться вообще ничего

Допиши
$text = '';
$text .= $parse->tpl_parse(); //Парсим

Спустя 11 минут, 53 секунды (25.10.2011 - 23:55) lightstar написал(а):
ни так
$parse->set_tpl('{name}',$row['comm_name']); //Установка переменной

$text .= $parse->tpl_parse(); //Парсим
}

print $text->template; //Выводим нашу страничку

ни так
$parse->set_tpl('{name}',$row['comm_name']); //Установка переменной

$text .= $parse->tpl_parse(); //Парсим
}


print $text;


ни так
$parse->set_tpl('{name}',$row['comm_name']); //Установка переменной
$text = '';

$text .= $parse->tpl_parse(); //Парсим
}


print $text;


ничего не выводит


Спустя 1 час, 31 минута, 14 секунд (26.10.2011 - 01:27) imbalance_hero написал(а):
lightstar
В конце функции tpl_parse верни $this->template, тогда значение попадёт в переменную (через return).

Спустя 14 часов, 21 минута, 29 секунд (26.10.2011 - 15:48) lightstar написал(а):
так?не идет
function tpl_parse(){
foreach($this->vars as $find => $replace){
$this->template = str_replace($find, $replace, $this->template);
}
$this->template;
return $template;
}

Спустя 3 дня, 4 часа, 31 минута, 28 секунд (29.10.2011 - 20:20) lightstar написал(а):
Неужели никто не поможет?

Вот сделал так:
parse.class.php
<?php
class
parse_class{
var $vars = array();
var $template;

function get_tpl($tpl_name){
if(empty($tpl_name) || !file_exists($tpl_name)){
return false;
}else{
$this->template = file_get_contents($tpl_name);
}
}

function set_tpl($key,$var){
$this->vars[][$key] = $var;
}
function tpl_parse(){
$x=0; //номер в массиве
foreach($this->vars[$x] as $find => $replace){
$this->template = str_replace($find, $replace, $this->template);
}
}
}

$parse = new parse_class;
?>

test.php оставил без изменения.
Выводит из Бд в зависимости от $x. Но как вывести все записи?

Спустя 1 час, 19 минут, 10 секунд (29.10.2011 - 21:39) bodja написал(а):
Покажите что здесь
print_r($row);
print_r ($this->vars);

Спустя 16 минут, 5 секунд (29.10.2011 - 21:55) lightstar написал(а):
print_r($row);
Array ( [comm_name] => номер 1 ) Array ( [comm_name] => номер 2 ) Array ( [comm_name] => номер 3 )


print_r ($this->vars);
Array ( [0] => Array ( [{name}] => номер 1 ) [1] => Array ( [{name}] => номер 2 ) [2] => Array ( [{name}] => номер 3 ) )

Спустя 9 минут, 26 секунд (29.10.2011 - 22:04) bodja написал(а):
Хорошо ,и где у вас тогда $row с ключем 'name', если у вас везде ключ 'comm_name' rolleyes.gif

Цитата
$parse->set_tpl('{name}',$row['name']);

Спустя 3 минуты, 3 секунды (29.10.2011 - 22:07) lightstar написал(а):
опечатка в первом посте
$parse->set_tpl('{name}',$row['name']); 

должно быть
$parse->set_tpl('{name}',$row['comm_name']); 


Проблема не в этом.
$query = "SELECT `comm_name`
FROM `table`"
;

естественно

Спустя 8 минут, 23 секунды (29.10.2011 - 22:16) lightstar написал(а):
Вот без опечатки

parse.class.php
<?php
class
parse_class{
var $vars = array();
var $template;

function get_tpl($tpl_name){
if(empty($tpl_name) || !file_exists($tpl_name)){
return false;
}else{
$this->template = file_get_contents($tpl_name);
}
}

function set_tpl($key,$var){
$this->vars[$key] = $var;
}
function tpl_parse(){
foreach($this->vars as $find => $replace){
$this->template = str_replace($find, $replace, $this->template);
}
}
}

$parse = new parse_class;
?>



test.php
<?php
include 'db.php'; //Подключаемся к БД
require 'classes/parse.class.php'; // Подключаем файл с классом

$parse->get_tpl('templates/test.tpl'); //Файл который мы будем парсить

$query = "SELECT `comm_name`
FROM `table`"
;
$sql = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_assoc( $sql )){

$parse->set_tpl('{name}',$row['comm_name']); //Установка переменной

}
$parse->tpl_parse(); //Парсим
print $parse->template; //Выводим нашу страничку
?>



test.tpl
{name}<br />


Неужели что-то поменялось?
Проблема ведь в классе. Но "не понимает" массив с несколькими записями и выводит только одну запись.

Спустя 11 минут, 46 секунд (29.10.2011 - 22:27) bodja написал(а):
Хорошо,а как у вас так получилось,что у массива $row одинаковые ключи,
а если быть точнее то у $row три отдельных массива вкупе с одинаковыми ключами,
я даже подзадумался как его разрулить rolleyes.gif

Спустя 7 минут, 41 секунда (29.10.2011 - 22:35) lightstar написал(а):
echo "<pre>$this->vars[$key] = $var;</pre>";

Выдает
Array[{name}] = номер 1;
Array[{name}] = номер 2;
Array[{name}] = номер 3;


Вот как бы его разделить вот тут вот
foreach($this->vars as $find => $replace){
$this->template = str_replace($find, $replace, $this->template);
}
}

Ибо тут
$this->template =str_replace({name}, номер 3, $this->template);

По этому последнюю запись и выводит

Спустя 3 минуты, 47 секунд (29.10.2011 - 22:39) bodja написал(а):
Ну как вы его разделите ,если каждый массив имеет только одну запись?
ну только вложеными foreach,
хотя я чесно не могу представить, зачем нужна такая вложеность и одинаковые ключи.

Спустя 37 минут, 43 секунды (29.10.2011 - 23:17) lightstar написал(а):
Вот как я решил:
parse_class.class.php
<?php
class
parse_class{
var $vars = array();
var $template;

function get_tpl($tpl_name){
if(empty($tpl_name) || !file_exists($tpl_name)){
return false;
}else{
$this->template = file_get_contents($tpl_name);
}
}

function set_tpl($key,$var){
$this->vars[][$key] = $var;
}
function tpl_parse(){
global $max; //это mysql_num_rows
for ($x=0; $x<$max; $x++){
foreach($this->vars[$x] as $find => $replace){
$result .= str_replace($find, $replace, $this->template);
}
}

$this->template=$result;
}
}

$parse = new parse_class;
?>


test.php
<?php
include 'db.php'; //Подключаемся к БД
require 'classes/parse.class.php'; // Подключаем файл с классом

$parse->get_tpl('templates/test.tpl'); //Файл который мы будем парсить

$query = "SELECT `comm_name`
FROM `table`"
;
$sql = mysql_query($query) or die(mysql_error());

$max = mysql_num_rows($sql);

while($row = mysql_fetch_assoc( $sql )){
$parse->set_tpl('{name}',$row['comm_name']); //Установка переменной
}
$parse->tpl_parse(); //Парсим
print $parse->template; //Выводим нашу страничку
?>

Покритикуйте,если не трудно.

Спустя 20 минут, 9 секунд (29.10.2011 - 23:37) bodja написал(а):
Не ,ну такую красоту испортили ,этим wink.gif
Цитата
global $max; //это mysql_num_rows


делаем так

Цитата
$parse->tpl_parse($max);


и так

Цитата
function tpl_parse($max){


а неподобство убираем smile.gif

Ну ,а если решена задача в целом ,ну отлично,удачи в коде biggrin.gif

Спустя 4 минуты, 15 секунд (29.10.2011 - 23:41) imbalance_hero написал(а):
lightstar
Критика? ГДЕ СТИЛИ? Хотя бы вложенности сделай...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.