Такая проблемка: нужен вывод из бд при помощи шаблона несколько записей, но получается что вывод идет только последней записи. Нужна помощь.
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).
В конце функции 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
test.php оставил без изменения.
Выводит из Бд в зависимости от $x. Но как вывести все записи?
Вот сделал так:
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);
print_r ($this->vars);
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'
Цитата |
$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
test.php
test.tpl
Неужели что-то поменялось?
Проблема ведь в классе. Но "не понимает" массив с несколькими записями и выводит только одну запись.
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 три отдельных массива вкупе с одинаковыми ключами,
я даже подзадумался как его разрулить
а если быть точнее то у $row три отдельных массива вкупе с одинаковыми ключами,
я даже подзадумался как его разрулить
Спустя 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,
хотя я чесно не могу представить, зачем нужна такая вложеность и одинаковые ключи.
ну только вложеными foreach,
хотя я чесно не могу представить, зачем нужна такая вложеность и одинаковые ключи.
Спустя 37 минут, 43 секунды (29.10.2011 - 23:17) lightstar написал(а):
Вот как я решил:
parse_class.class.php
test.php
Покритикуйте,если не трудно.
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 написал(а):
Не ,ну такую красоту испортили ,этим
Цитата |
global $max; //это mysql_num_rows |
делаем так
Цитата |
$parse->tpl_parse($max); |
и так
Цитата |
function tpl_parse($max){ |
а неподобство убираем
Ну ,а если решена задача в целом ,ну отлично,удачи в коде
Спустя 4 минуты, 15 секунд (29.10.2011 - 23:41) imbalance_hero написал(а):
lightstar
Критика? ГДЕ СТИЛИ? Хотя бы вложенности сделай...
Критика? ГДЕ СТИЛИ? Хотя бы вложенности сделай...