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

Форум PHP

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

 

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

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

тема: Вывод новостей
 
 автор: skydemon   (24.11.2012 в 17:04)   письмо автору
 
 

Суть проблемы в том что шаблонизатор выводит только одну новость не смотря на выборку 10 новостей из базы. Шаблонизатор Smarty. Вот код:

<?
else
{
     
$num 10
     
$page $_GET['page']; 
     
$result mysql_query("SELECT COUNT(*) FROM news"); 
     
$posts mysql_result($result0); 
     
$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 0$page2left ' <a href=.?page='. ($page 2) .'>'. ($page 2) .'</a> | '
            if(
$page 0$page1left '<a href=.?page='. ($page 1) .'>'. ($page 1) .'</a> | '
            if(
$page <= $total$page2right ' | <a href=.?page='. ($page 2) .'>'. ($page 2) .'</a>'
            if(
$page <= $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");
}


Что я сделал не так?

  Ответить  
 
 автор: Mookapek   (24.11.2012 в 18:35)   письмо автору
 
   для: skydemon   (24.11.2012 в 17:04)
 

Надо новости в цикле выводить, а не в if'е.
if($myrow_index != "") - вот тут проблема.

Можно так сделать:
while($myrow_index = mysql_fetch_array($result_index))
{
...
}

  Ответить  
 
 автор: skydemon   (24.11.2012 в 19:10)   письмо автору
 
   для: Mookapek   (24.11.2012 в 18:35)
 

Попробовал теперь только последняя новость выводится

  Ответить  
 
 автор: skydemon   (24.11.2012 в 19:25)   письмо автору
 
   для: skydemon   (24.11.2012 в 19:10)
 

По всей видимости дело в шаблонизаторе

  Ответить  
 
 автор: Mookapek   (24.11.2012 в 20:26)   письмо автору
 
   для: skydemon   (24.11.2012 в 19:25)
 

По всей видимости - да.
В шаблоне как результат выводится? Я в Smarty не силен, но думаю в этом случае надо использовать foreach в шаблоне.

  Ответить  
 
 автор: confirm   (24.11.2012 в 20:34)   письмо автору
 
   для: Mookapek   (24.11.2012 в 20:26)
 

.

  Ответить  
 
 автор: Mookapek   (24.11.2012 в 20:35)   письмо автору
 
   для: 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}



Как-то так.

  Ответить  
 
 автор: confirm   (24.11.2012 в 20:38)   письмо автору
 
   для: Mookapek   (24.11.2012 в 20:35)
 

Только не mysql_fetch_array(), не надо гонять лишнее между скриптом и шаблоном, и передачу переменных (массив) в шаблон производить после цикла.

  Ответить  
 
 автор: Mookapek   (24.11.2012 в 20:42)   письмо автору
 
   для: 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} 

  Ответить  
 
 автор: skydemon   (26.11.2012 в 17:46)   письмо автору
 
   для: 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],
                 ); 
     }
?> 


минус в том что при появлении новых полей нужно указывать их здесь. Теперь буду использовать ваш пример

  Ответить  
Rambler's Top100
вверх

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