|
|
|
| Суть проблемы в том что шаблонизатор выводит только одну новость не смотря на выборку 10 новостей из базы. Шаблонизатор Smarty. Вот код:
<?
else
{
$num = 10;
$page = $_GET['page'];
$result = mysql_query("SELECT COUNT(*) FROM news");
$posts = mysql_result($result, 0);
$total = intval(($posts - 1) / $num) + 1;
$page = intval($page);
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
$start = $page * $num - $num;
$result_index = mysql_query("SELECT * FROM news LIMIT $start, $num");
$myrow_index = mysql_fetch_array($result_index);
if($myrow_index != "")
{
$smarty->assign('id',$myrow_index[id]); # {$id}
$smarty->assign('title',$myrow_index[title]); # {$title}
$smarty->assign('text',$myrow_index[text]); # {$text}
$smarty->assign('author',$myrow_index[author]); # {$author}
$smarty->assign('date_b',$myrow_index[date_b]); # {$date_b}
//$news_index=$smarty->display("news.tpl");
$news_index=$smarty->fetch("news.tpl");
//$news_index=$smarty->assign('blok_news',$news_tpl);
if($total > 0)
{
if ($page != 1) $pervpage = '<a href=.?page=1>Первая</a><a href= .?page='.($page - 1) .'>Предыдущая</a> ';
if ($page != $total) $nextpage = ' <a href=.?page='. ($page + 1) .'>Следующая</a><a href=.?page='.$total. '>Последня</a>';
if($page - 2 > 0) $page2left = ' <a href=.?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href=.?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
if($page + 2 <= $total) $page2right = ' | <a href=.?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href=.?page='. ($page + 1) .'>'. ($page + 1) .'</a>';
$page_index=$pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;
}
}
else $news_index="Не удалось обнаружить новости";
return $news_index.$page_index;
//return $smarty->display("news.tpl");
}
|
Что я сделал не так? | |
|
|
|
|
|
|
|
для: skydemon
(24.11.2012 в 17:04)
| | Надо новости в цикле выводить, а не в if'е.
if($myrow_index != "") - вот тут проблема.
Можно так сделать:
while($myrow_index = mysql_fetch_array($result_index))
{
...
} | |
|
|
|
|
|
|
|
для: Mookapek
(24.11.2012 в 18:35)
| | Попробовал теперь только последняя новость выводится | |
|
|
|
|
|
|
|
для: skydemon
(24.11.2012 в 19:10)
| | По всей видимости дело в шаблонизаторе | |
|
|
|
|
|
|
|
для: skydemon
(24.11.2012 в 19:25)
| | По всей видимости - да.
В шаблоне как результат выводится? Я в Smarty не силен, но думаю в этом случае надо использовать foreach в шаблоне. | |
|
|
|
|
|
|
|
для: Mookapek
(24.11.2012 в 20:26)
| | . | |
|
|
|
|
|
|
|
для: skydemon
(24.11.2012 в 19:25)
| |
<?php
$result = array();
while($myrow_index = mysql_fetch_array($result_index))
{
$result[] = $myrow_index;
$smarty->assign('result', $result);
...
}
?>
В шаблоне:
{foreach from=$result item=item}
<h1>{$item.title}</h1>
<p>{$item.text}</p>
...
{/foreach}
|
Как-то так. | |
|
|
|
|
|
|
|
для: Mookapek
(24.11.2012 в 20:35)
| | Только не mysql_fetch_array(), не надо гонять лишнее между скриптом и шаблоном, и передачу переменных (массив) в шаблон производить после цикла. | |
|
|
|
|
|
|
|
для: confirm
(24.11.2012 в 20:38)
| | Да, верные замечания.
<?php
$result = array();
while($myrow_index = mysql_fetch_assoc($result_index))
{
$result[] = $myrow_index;
...
}
$smarty->assign('result', $result);
?>
В шаблоне:
{foreach from=$result item=item}
<h1>{$item.title}</h1>
<p>{$item.text}</p>
...
{/foreach}
|
| |
|
|
|
|
|
|
|
для: Mookapek
(24.11.2012 в 20:42)
| | я вот так сделал:
<?php
$result_index = mysql_query("SELECT * FROM news WHERE cat='$cat' LIMIT $start,$num");
while($myrow_index = mysql_fetch_array($result_index))
{
$rows[]=array(
'id'=> $myrow_index[id],
'title'=> $myrow_index[title],
'text'=> $myrow_index[text],
'author'=> $myrow_index[author],
'date_b'=> $myrow_index[date_b],
);
}
?>
|
минус в том что при появлении новых полей нужно указывать их здесь. Теперь буду использовать ваш пример | |
|
|
|