Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   ? по выводу страниц (https://forum.antichat.xyz/showthread.php?t=96872)

Ridikh 18.12.2008 00:48

? по выводу страниц
 
Как сделать так, чтобы в галерее фоток, на каждой странице отображались не все ссылки с номерами страниц, а только несколько ссылок на страницы с фотками, например: 1, 2, 3, 4, 5... 11... 51... 101... Последняя »?

На данный момент вывод ссылок осуществляется с помощью while, но так получается что выводится очень много ссылок, а это лишний трафф пользователя и время ожидания загрузки страниц(((

optimazer 18.12.2008 02:37

инфо о фотках забиваешь в БД
потом
ловишь гет-параметры, к примеру first_view и last_view
mysql_query("SELECT * FROM foto LIMIT ".$_GET['first_view']." ,".$_GET['last_view'].";");
проверяешь если фотки еще остались
генеришь ссылку на эту же страницу с новыми гет-параметрами

.:EnoT:. 18.12.2008 03:30

Цитата:

Сообщение от optimazer
mysql_query("SELECT * FROM foto LIMIT ".$_GET['first_view']." ,".$_GET['last_view'].";");

у тебя большое будущее с такой "обработкой" гет-запросов :) intval бы хоть поставил))

ТС, тебе нужен только пример вывода страниц или всё вместе в запросами к БД ?

optimazer 18.12.2008 10:28

дык это ж для примера =)

Ridikh 18.12.2008 12:32

Цитата:

Сообщение от .:EnoT:.
ТС, тебе нужен только пример вывода страниц или всё вместе в запросами к БД ?

всё вместе нужно

optimazer 18.12.2008 17:07

допустим таблица foto в БД и она имеет структуру

Цитата:

f_id int(50) PK not null autoincriment
foto_url varchar(255) not null
Цитата:

$link = mysql_connect('твой_сервер_БД','пол ьзователь','пароль');
mysql_select_db('имя_БД');

if ($_GET['first_view'] == "" or $_GET['last_view'] == "") {
$_GET['first_view'] == 0;
$_GET['last_view'] == 10;
}

$res = mysql_query("SELECT * FROM foto LIMIT ".intval($_GET['first_view'])." ,".intval($_GET['last_view']).";");
while($row = mysql_fetch_assoc($res)){
echo "<img src='".$row['foto']."'><br>";
}

$q = mysql_query("SELECT COUNT(*) FROM foto ");
$temp[0] = mysql_fetch_array($q);

if ($temp[0] > $_GET['last_view']) {
echo "<a href="этот_файл.php?first_view=10&last_vie w=20">next</a>";
}
примерно так

Ru}{eeZ 18.12.2008 17:57

Эм, я для своей гостевухи писал так:
$maxNews - количество комментириев на страницу
count($name) - количество комментариев
ceil() - чтобы отображались все страницы, содержащие новости
PHP код:

  for($i 1$i <= ceil(count($name)/$maxNews); $i++) {
    if(
$_GET['page'] == $i) echo '<font color = "gray">'."$i".'</font> ';
    else echo 
"<a href = \"?page=$i\">$i </a>";
  } 


d_x 18.12.2008 18:47

Писал такую функцию для себя:
PHP код:

<?php
print pagstxt(10,100);
print 
'<br>';
print 
pagstxt(2,100);
print 
'<br>';
print 
pagstxt(97,100);

function 
pagstxt($page,$maxp//$page - какая сейчас страница, $maxp - сколько всего страниц
{
  
$ptxt='';

  if(
$maxp<=7)
  {
    for(
$i=1;$i<=$maxp;$i++)
    {
      if(
$i==$page)
        
$adds="[ $i ]";
      else
        
$adds=$i;

      
$k=$i-1;

      
$ptxt.="<a href='?page=$k'>$adds</a> ";
    }

    return 
$ptxt;
  }
  else
  {
    if(
$page>3)
      
$c1=2;
    else
      
$c1=$page-1;



    if(
$page>$maxp-3)
      
$c2=$maxp-$page;
    else
      
$c2=2;



    for(
$i=$page-$c1;$i<=$page+$c2;$i++)
    {
      if(
$i==$page)
        
$adds="[ $i ]";
      else
        
$adds=$i;

      
$k=$i-1;

      
$ptxt.="<a href='?page=$k'>$adds</a> ";
    }

    if(
$page>4)
      
$ptxt="<a href='?page=0'>1</a> ... ".$ptxt;
    else if(
$page==4)
      
$ptxt="<a href='?page=0'>1</a> ".$ptxt;

    
$tmp=$maxp-1;

    if(
$page<$maxp-3)
      
$ptxt.="... <a href='?page=$tmp'>$maxp</a> ";
    else if(
$page==$maxp-3)
      
$ptxt.="<a href='?page=$tmp'>$maxp</a> ";
  }

  return 
$ptxt;
}
?>

Этот пример выведет следующие ссылки:
Цитата:

1 ... 8 9 [ 10 ] 11 12 ... 100
1 [ 2 ] 3 4 ... 100
1 ... 95 96 [ 97 ] 98 99 100
Думаю, прикрутить это к тому, что есть, труда не составит.

.:EnoT:. 18.12.2008 18:48

Цитата:

всё вместе нужно
угу)

Код откоментировал, надеюсь разберёшься. Выдирал из своего класса, поэтому может переменные какие-то забыл, хотя вроде всё норм.

PHP код:

<?php

// Берём текущую страницу
$page = !empty($_GET['page']) && is_numeric($_GET['page']) ? intval($_GET['page']) : 1;
// Глубина вывода страниц
$pages_deep 4;
// Сколько фоток выводить на одной странице
$onpage 10;

// Запрашиваем общее кол-во фоток в БД  
$sql mysql_query('SELECT COUNT(*) AS `total`
                    FROM `photos`
                    ORDER BY id ASC'
);

if(
$sql){
    
    
$result mysql_fetch_assoc($sql);
    
// Определяем на сколько страниц поместится весь контент 
    
$pages_all intval(($result['total'] - 1) / $onpage) + 1;  
    
    if(!
$page || $page <= 0$page 1;
    elseif(
$page $pages_all$page $pages_all;
    
    
$start intval($page $onpage $onpage);
    
    
// Запрашиваем контект в соответствии с указанной страницей
    
$explode_sql mysql_query("SELECT * FROM `photos`
                                ORDER BY id ASC
                                LIMIT "
.$start.", ".$onpage);
                                
    if(
$explode_sql && mysql_num_rows($explode_sql)){
        
        while(
$res mysql_fetch_assoc($explode_sql)){
            
            
// Выводим
            
        
}
        
        
// Выводим навигацию по страницам
        
        // Страницы влево
        
for($i $pages_deep * -1$i 0$i++){  

            if((
$page $i) <= 0) continue;
            elseif(
$page == $i) continue;
            else{
                
$pages_left[] = '<span class="pages"><a href="?page='.($page $i).'">'.($page $i).'</a></span>';
            }

        }

        
// Страницы вправо
        
for($i 1$i <= $pages_deep$i++){ 

            if((
$page $i) > $pages_all)  continue;
            elseif(
$page == $i) continue;
            else{
                
$pages_right[] = '<span class="pages"><a href="?page='.($page $i).'">'.($page $i).'</a></span>';
            }

        } 
        
        
// Вывод ссылок на первую и предыдущую страницы
        
if(!$page || $page == 1){
            
$minus '';
            
$first '';
        }else{
            
$minus '<span class="pages"><a href="?page='.($page 1).'" title="Предыдущая">&laquo;</a></span>';
            
$first '<span class="pages"><a href="?page=1" title="Первая страница">&laquo;&laquo;</a></span>';
        } 
        
        
// Вывод ссылок на последнюю и следующею страницу
        
if($page == $pages_all){
            
$plus '';
            
$last '';
        }else{
            
$plus '<span class="pages"><a href="?page='.($page 1).'" title="Следующая">&raquo;</a></span>';
            
$last '<span class="pages"><a href="?page='.$pages_all.'" title="Последняя страница">&raquo;&raquo;</a></span>';
        }  
        
        
// Если страницы не сгенерировались
        
if(join(''array_merge($pages_left$pages_right)) == ''){
            
            echo 
'';
        
        }else{    
            
// Выводим
            
echo '<span class="pages">Страница '.$page.' из '.$total.'</span>';
            echo 
$first.$minus.join(''$pages_left);
            echo 
'<span class="pages"><b>'.$page.'</b></span>';
            echo 
join(''$pages_right).$plus.$last;
        }                                


   }

}


?>


Ridikh 18.12.2008 20:05

спасибо! теперь прикрутить несложно будет :)


Время: 20:32