PHP и с чем его едят....

Тагрим

Поняшка
Подскажите, как реализовать постраничный вывод новостей. Необходимо выводить n новостей на страницу, внизу выводить нумерацию такого плана: [1]...[12],[13]...[m], то есть не просто набор страниц, а n-ное колличество, в зависимости от позиции. мануалов не нашел
 

dreamer

Member
Подскажите, как реализовать постраничный вывод новостей. Необходимо выводить n новостей на страницу, внизу выводить нумерацию такого плана: [1]...[12],[13]...[m], то есть не просто набор страниц, а n-ное колличество, в зависимости от позиции. мануалов не нашел
При составлении блока навигационных ссылок никаких мануалов и не надо – тут чистая логика в зависимости от того, как ты хочешь видеть свой список.
Можешь попробовать нечто вроди
PHP:
$list = range(
    max($current - $side, $first),
    min($current + $side, $last)
);
if ($list[0] != $first) 
    show_link($first);

show_links($list, $current);

if ($list[sizeof($list)-1] != $last) 
    show_link($last);
Ну и тому подобное.
 

Cris

Member
поиши по этому разделу, я такой вопрос уже ставил
 

Тагрим

Поняшка
При составлении блока навигационных ссылок никаких мануалов и не надо – тут чистая логика в зависимости от того, как ты хочешь видеть свой список.
Можешь попробовать нечто вроди
PHP:
$list = range(
    max($current - $side, $first),
    min($current + $side, $last)
);
if ($list[0] != $first) 
    show_link($first);

show_links($list, $current);

if ($list[sizeof($list)-1] != $last) 
    show_link($last);
Ну и тому подобное.
спс, но мне надо вывод новостей
 

Le Edelweiss

Няяяяя.... ^_^
На главной вначале пишеш:
PHP:
$result77 = mysql_query("SELECT str FROM options", $db);
if ($result77)$myrow77 = mysql_fetch_array($result77);//из базы достаем количество новостей на страницу
$num = $myrow77["str"];
// Извлекаем из URL текущую страницу
@$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result00 = mysql_query("SELECT COUNT(*) FROM posts ");
if ($result00) $temp = mysql_fetch_array($result00);
$posts = $temp[0];
// Находим общее число страниц
$total = (($posts - 1) / $num) + 1;
$total =  intval($total);
// Определяем начало сообщений для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
  if($page > $total) $page = $total;
// Вычисляем начиная с какого номера
// следует выводить сообщения
$start = $page * $num - $num;
// Выбираем $num сообщений начиная с номера $start	
$result = mysql_query("SELECT * FROM posts ORDER date DESC,id DESC LIMIT $start, $num ",$db);
if ($result) $myrow = mysql_fetch_array($result);
Дальше, где тебе нужны оте "Далее, номера и т.п." пишеш:
PHP:
// Проверяем нужны ли стрелки назад
if ($page != 1) {if ($category==1){$pervpage = '<a href=index.php?page=1>Первая</a> | <a href=index.php?page='. ($page - 1) .'>Предыдущая</a> | ';}else{$pervpage = '<a href=index.php?category='.$category.'&page=1>Первая</a> | <a href=index.php?category='.$category.'&page='. ($page - 1) .'>Предыдущая</a> | ';}}
// Проверяем нужны ли стрелки вперед
if ($page != $total) {if ($category==1){$nextpage = ' | <a href=index.php?page='. ($page + 1) .'>Следующая</a> | <a href=index.php?page=' .$total. '>Последняя</a>';}else{$nextpage = ' | <a href=index.php?category='.$category.'&page='. ($page + 1) .'>Следующая</a> | <a href=index.php?category='.$category.'&page=' .$total. '>Последняя</a>';}}

// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 5 > 0) {if ($category==1){$page5left = ' <a href=index.php?page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';} else 
  {$page5left = ' <a href=index.php?category='.$category.'&page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';}}
if($page - 4 > 0) {if ($category==1){$page4left = ' <a href=index.php?page='. ($page - 4) .'>'. ($page - 4) .'</a> | ';}else 
  {$page5left = ' <a href=index.php?category='.$category.'&page='. ($page - 4) .'>'. ($page - 4) .'</a> | ';}}
if($page - 3 > 0) {if ($category==1){$page3left = ' <a href=index.php?page='. ($page - 3) .'>'. ($page - 3) .'</a> | ';}else 
  {$page5left = ' <a href=index.php?category='.$category.'&page='. ($page - 3) .'>'. ($page - 3) .'</a> | ';}}
if($page - 2 > 0) {if ($category==1){$page2left = ' <a href=index.php?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';}else 
  {$page5left = ' <a href=index.php?category='.$category.'&page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';}}
if($page - 1 > 0) {if ($category==1){$page1left = ' <a href=index.php?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';}else 
  {$page5left = ' <a href=index.php?category='.$category.'&page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';}}

if($page + 5 <= $total) {if ($category==1){$page5right = ' | <a href=index.php?page='. ($page + 5) .'>'. ($page + 5) .'</a>';}else
  {$page5right = ' | <a href=index.php?category='.$category.'&page='. ($page + 5) .'>'. ($page + 5) .'</a>';}}
if($page + 4 <= $total) {if ($category==1){$page4right = ' | <a href=index.php?page='. ($page + 4) .'>'. ($page + 4) .'</a>';}else
  {$page5right = ' | <a href=index.php?category='.$category.'&page='. ($page + 4) .'>'. ($page + 4) .'</a>';}}
if($page + 3 <= $total) {if ($category==1){$page3right = ' | <a href=index.php?page='. ($page + 3) .'>'. ($page + 3) .'</a>';}else
  {$page5right = ' | <a href=index.php?category='.$category.'&page='. ($page + 3) .'>'. ($page + 3) .'</a>';}}
if($page + 2 <= $total) {if ($category==1){$page2right = ' | <a href=index.php?page='. ($page + 2) .'>'. ($page + 2) .'</a>';}else
  {$page5right = ' | <a href=index.php?category='.$category.'&page='. ($page + 2) .'>'. ($page + 2) .'</a>';}}
if($page + 1 <= $total) {if ($category==1){$page1right = ' | <a href=index.php?page='. ($page + 1) .'>'. ($page + 1) .'</a>';}else
  {$page5right = ' | <a href=index.php?category='.$category.'&page='. ($page + 1) .'>'. ($page + 1) .'</a>';}}

// Вывод меню если страниц больше одной

if ($total > 1)
{
Error_Reporting(E_ALL & ~E_NOTICE);
echo "<div class=\"pstrnav\" align='center'>";
echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
echo "</div>";
}
ЗЫ:
PHP:
($category==1)
- это у меня главная
 

Wodan

Всем клева!
PHP:
$pict_on_page = 5;
if(!$cur_page)$cur_page=1;
$offset = $pict_on_page*($cur_page-1);
    $query = "select count(id) as cid from articles where category_id='$subcategory_id'  order by publish_date desc";
    $rs = dbexec($conn, $query);
    if( dbfetch($rs) ) $cid = dbgetdata($rs, "cid");         
    dbfree($rs);

//вывод содержимого
$query = "select id from articles where category_id='$subcategory_id'  order by publish_date desc limit $pict_on_page offset $offset";
// и т.д. и т.п.

$count_pages = intval(round($cid/$pict_on_page));
if($cur_page<=1){
  $at_start = $cur_page;
  $at_finish = $cur_page+2;
  }
elseif($cur_page>=$count_pages){
  $at_start = $cur_page-2;
  $at_finish = $cur_page;
  }
else{
  $at_start = $cur_page-1;
  $at_finish = $cur_page+1;
  }

if($cid > $pict_on_page){
   $previos = $cur_page-1;
   $next = $cur_page+1;
   if($cur_page>1)echo '<a href="?subcategory_id='.$subcategory_id.'&cur_page='.$previos.'" class="link6">Предыдущая <<</a> ';
   if($at_start > 1){
      if($pict_on_page==4){
        if($cur_page>2 and $cur_page<>3 and $cur_page<>4)echo '<a href="?subcategory_id='.$subcategory_id.'&cur_page=1" class="link6">1 ...</a> ';
        elseif($cur_page==3)echo '<a href="?subcategory_id='.$subcategory_id.'&cur_page=1" class="link6">1</a> ';
        elseif($cur_page==4)echo '<a href="?subcategory_id='.$subcategory_id.'&cur_page=1" class="link6">1</a> ';
      }
      else{
       if($cur_page>2 and $cur_page<>3)echo '<a href="?subcategory_id='.$subcategory_id.'&cur_page=1" class="link6">1 ...</a> ';
       elseif($cur_page==3)echo '<a href="?subcategory_id='.$subcategory_id.'&cur_page=1" class="link6">1</a> ';
      }
    }  
   for ($i = $at_start; $i <= $at_finish; $i++) {
      if($i < 1)echo '';
      elseif($cur_page == $i)echo '<a href="?subcategory_id='.$subcategory_id.'&cur_page='.$i.'" class="link5">'.$i.'</a> ';
      elseif($i <= $count_pages) echo '<a href="?subcategory_id='.$subcategory_id.'&cur_page='.$i.'" class="link6">'.$i.'</a> ';
   }
   
   if($count_pages > $at_finish){   
     if($pict_on_page==4){
       if($cur_page+1 < $count_pages and $cur_page+2 <> $count_pages and $cur_page+3 <> $count_pages)echo '<a href="?subcategory_id='.$subcategory_id.'&cur_page='.$count_pages.'" class="link6">... '.$count_pages.'</a> ';
       elseif($cur_page+2 == $count_pages)echo '<a href="?subcategory_id='.$subcategory_id.'&cur_page='.$count_pages.'" class="link6">'.$count_pages.'</a> ';
       elseif($cur_page+3 == $count_pages)echo '<a href="?subcategory_id='.$subcategory_id.'&cur_page='.$count_pages.'" class="link6">'.$count_pages.'</a> ';
     }
     else{
       if($cur_page+1 < $count_pages and $cur_page+2 <> $count_pages)echo '<a href="?subcategory_id='.$subcategory_id.'&cur_page='.$count_pages.'" class="link6">... '.$count_pages.'</a> ';
       elseif($cur_page+2 == $count_pages)echo '<a href="?subcategory_id='.$subcategory_id.'&cur_page='.$count_pages.'" class="link6">'.$count_pages.'</a> ';
     }
   }
   if($cur_page<$count_pages)echo '<a href="?subcategory_id='.$subcategory_id.'&cur_page='.$next.'" class="link6">>> Следующая</a> ';
}
У меня так ...
 

akick

letter to god
а у меня никак, но принцип состоит в том, что из базы забираем общее количество делим его с округлением в большую сторону на количество новостей на странице и запрашиваем из базы с соответствующим смещением записи..
 
Зверху