постраничный вывод помогите

Discussion in 'PHP' started by dailik, 26 Aug 2010.

  1. dailik

    dailik New Member

    Joined:
    27 Oct 2008
    Messages:
    94
    Likes Received:
    2
    Reputations:
    0
    нужна постраничная навигация + вывод в две колонки
    вот скрипт он выводит то очень много то по 1 на стр. нужно чтоб например: в две колонки по 4 новости были.


    PHP:
    <?php 
    // Устанавливаем соединение с базой данных 
    include "connect.php"
    // Переменная хранит число сообщений выводимых на станице 
    $num 2
    // Извлекаем из URL текущую страницу 
    $page $_GET['page']; 
    // Определяем общее число сообщений в базе данных 
    $result mysql_query("SELECT COUNT(*) FROM options"); 
    $posts mysql_result($result0); 
    // Находим общее число страниц 
    $total intval(($posts 1) / $num) + 1
    // Определяем начало сообщений для текущей страницы 
    $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 options LIMIT $start$num"); 
    // В цикле переносим результаты запроса в массив $postrow 
    while ( $postrow[] = mysql_fetch_array($result)) 
    ?> 




    <?php 
    echo "<table><tr>"
    for(
    $i 0$i $num$i++) 

     echo 
    "
             <td>"
    .$postrow[$i]['img']."</td>
             <td>"
    .$postrow[$i]['adress']."</td>"
           if (
    $i == '2')
                        {
                        
    $i '0';
                        echo 
    "</tr><tr>";
                        }

    echo 
    "</table>"
    ?> 

     
     
    <?php 
    // Проверяем нужны ли стрелки назад 
    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>';

    // Вывод меню 
    echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage

    ?>  
     
  2. dailik

    dailik New Member

    Joined:
    27 Oct 2008
    Messages:
    94
    Likes Received:
    2
    Reputations:
    0
    блин никто не знает : ( ?
     
  3. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    Класс для постраничного вывода из БД
    PHP:
    <?php
    class Paging {

    private 
    $page_size 10;
    private 
    $link_padding 10;
    private 
    $page_link_separator ' ';
    private 
    $next_page_text 'следующая >';
    private 
    $prev_page_text '< предыдущая';
    private 
    $result_text_pattern 'Показано с %s по %s из %s';
    private 
    $page_var 'p';

    private 
    $db;
    private 
    $q;
    private 
    $total_rows;
    private 
    $total_pages;
    private 
    $cur_page;

    public function 
    __construct($db$q=''$page_var='p')
    {
        
    $this->db $db;
        if (
    $q$this->set_query($q);
        
    $this->page_var $page_var;
        
    $this->cur_page = isset($_GET[$this->page_var]) && (int)$_GET[$this->page_var] > ? (int)$_GET[$this->page_var] : 1;
    }

    public function 
    set_query($q)
    {
        
    $this->$q;
    }

    public function 
    set_page_size($page_size)
    {
        
    $this->page_size abs((int)$page_size);
    }

    public function 
    set_link_padding($padding)
    {
        
    $this->link_padding abs((int)$padding);
    }

    public function 
    get_page($q='')
    {
        if (
    $q$this->set_query($q);

        
    $r $this->db->query$this->query_paging($this->q) );
        
    $this->total_rows array_pop($this->db->query('SELECT FOUND_ROWS()')->fetch_row());

        if (
    $this->page_size !== 0$this->total_pages ceil($this->total_rows/$this->page_size);
        
        if (
    $this->cur_page $this->total_pages)
        {
            
    $this->cur_page $this->total_pages;
            if ( 
    $this->total_pages $r $this->db->query$this->query_paging($this->q) );
        }
        
        return 
    $r;
    }

    public function 
    get_result_text()
    {
        
    $start = (($this->cur_page-1) * $this->page_size)+1;
        
    $end = (($start-1+$this->page_size) >= $this->total_rows)? $this->total_rows:($start-1+$this->page_size);

        return 
    sprintf($this->result_text_pattern$start$end$this->total_rows);
    }

    public function 
    get_page_links()
    {
        if ( !isset(
    $this->total_pages) ) return '';

        
    $page_link_list = array();

        
    $start $this->cur_page $this->link_padding;
        if ( 
    $start $start 1;
        
    $end $this->cur_page $this->link_padding-1;
        if ( 
    $end $this->total_pages $end $this->total_pages;

        if ( 
    $start )  $page_link_list[] = $this->get_page_link$start-1$start '...' '' );
        for (
    $i=$start$i <= $end$i++)  $page_link_list[] = $this->get_page_link$i );
        if ( 
    $end $this->total_pages $page_link_list[] = $this->get_page_link$end +1$end == $this->total_pages '' '...' );
        if ( 
    $end <= $this->total_pages $page_link_list[] = $this->get_page_link$this->total_pages );

        return 
    implode($this->page_link_separator$page_link_list);
    }

    public function 
    get_next_page_link()
    {
        return isset(
    $this->total_pages) && $this->cur_page $this->total_pages $this->get_page_link$this->cur_page 1$this->next_page_text ) : '';
    }

    public function 
    get_prev_page_link()
    {
        return isset(
    $this->total_pages) && $this->cur_page $this->get_page_link$this->cur_page 1$this->prev_page_text ) : '';
    }

    private function 
    get_page_link($page$text='')
    {
        if (!
    $text)    $text $page;

        if (
    $page != $this->cur_page)
        {
            
    $reg '/((&|^)'.$this->page_var.'=)[^&#]*/';
            
    $url '?'.( preg_match$reg$_SERVER['QUERY_STRING'] ) ? preg_replace($reg'${1}'.$page$_SERVER['QUERY_STRING']) : ( $_SERVER['QUERY_STRING'] ? $_SERVER['QUERY_STRING'].'&' '' ).$this->page_var.'='.$page);
            return 
    '<a href="'.$url.'">'.$text.'</a>';
        }
        return 
    '<span>'.$text.'</span>';
    }

    private function 
    query_paging()
    {
        
    $q $this->q;

        if (
    $this->page_size != 0)
        {
            
    //calculate the starting row
            
    $start = ($this->cur_page-1) * $this->page_size;
            
    //insert SQL_CALC_FOUND_ROWS and add the LIMIT
            
    $q preg_replace('/^SELECT\s+/i''SELECT SQL_CALC_FOUND_ROWS '$this->q)." LIMIT {$start},{$this->page_size}";
        }

        return 
    $q;
    }
    }
    ?>
     
  4. dailik

    dailik New Member

    Joined:
    27 Oct 2008
    Messages:
    94
    Likes Received:
    2
    Reputations:
    0
    никак не получаеться