Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель 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($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");
}


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

  Ответить  
 
 автор: 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 Яндекс.Метрика Яндекс цитирования