? по выводу страниц

Discussion in 'PHP' started by Ridikh, 17 Dec 2008.

  1. Ridikh

    Ridikh Member

    Joined:
    11 Nov 2007
    Messages:
    69
    Likes Received:
    7
    Reputations:
    0
    Как сделать так, чтобы в галерее фоток, на каждой странице отображались не все ссылки с номерами страниц, а только несколько ссылок на страницы с фотками, например: 1, 2, 3, 4, 5... 11... 51... 101... Последняя »?

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

    optimazer Member

    Joined:
    4 Dec 2008
    Messages:
    46
    Likes Received:
    11
    Reputations:
    0
    инфо о фотках забиваешь в БД
    потом
    ловишь гет-параметры, к примеру first_view и last_view
    mysql_query("SELECT * FROM foto LIMIT ".$_GET['first_view']." ,".$_GET['last_view'].";");
    проверяешь если фотки еще остались
    генеришь ссылку на эту же страницу с новыми гет-параметрами
     
  3. .:EnoT:.

    .:EnoT:. Сексуальное чудовище

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    у тебя большое будущее с такой "обработкой" гет-запросов :) intval бы хоть поставил))

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

    optimazer Member

    Joined:
    4 Dec 2008
    Messages:
    46
    Likes Received:
    11
    Reputations:
    0
    дык это ж для примера =)
     
    1 person likes this.
  5. Ridikh

    Ridikh Member

    Joined:
    11 Nov 2007
    Messages:
    69
    Likes Received:
    7
    Reputations:
    0
    всё вместе нужно
     
  6. optimazer

    optimazer Member

    Joined:
    4 Dec 2008
    Messages:
    46
    Likes Received:
    11
    Reputations:
    0
    допустим таблица foto в БД и она имеет структуру

    примерно так
     
    1 person likes this.
  7. Ru}{eeZ

    Ru}{eeZ Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    454
    Likes Received:
    73
    Reputations:
    -5
    Эм, я для своей гостевухи писал так:
    $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>";
      }
     
    1 person likes this.
  8. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    Писал такую функцию для себя:
    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;
    }
    ?>
    Этот пример выведет следующие ссылки:
    Думаю, прикрутить это к тому, что есть, труда не составит.
     
    #8 d_x, 18 Dec 2008
    Last edited: 18 Dec 2008
    3 people like this.
  9. .:EnoT:.

    .:EnoT:. Сексуальное чудовище

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    угу)

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

    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;
            }                                


       }

    }


    ?>
     
    2 people like this.
  10. Ridikh

    Ridikh Member

    Joined:
    11 Nov 2007
    Messages:
    69
    Likes Received:
    7
    Reputations:
    0
    спасибо! теперь прикрутить несложно будет :)