на сайте нужно реализовать постраничный вывод данных как на http://bash.org.ru/, т.е нужно чтобы был счет в обратном порядке, т.е. не 1 2 3 4, а 4 3 2 1, и чтобы номера страниц скрывались (т.е не 10 9 8 7 6 5 4 3 2 1, а 10 9 8 . . . 1)
Я вывожу данные по страницам следующим способом:
код на странице, где происходит вывод данныхPHP код:
<?php
include("config.php");
//подключаем класс Paging
require('paging.inc.php');
$host = "localhost";
$user = "root";
$passwd = "";
$db_name= "bd_name";
//соединяемся с базой данных
$_DB = new mysqli($host,$user,$passwd,$db_name);
//создаем экземпляр класса Paging
//в качестве параметра передаем ему указатель на соединение с MySQL
$_PAGING = new Paging($_DB);
//выполняем обычный запрос данных не заботясь
//о разбивке на страницы через метод get_page объекта класса Paging
$r = $_PAGING->get_page( 'SELECT * FROM bd_name ORDER BY ID desc');
?>
<?
echo '<br>Страницы: '.$_PAGING->get_page_links();
while($row = $r->fetch_assoc())
{
print '<div class="q">'.$row***91;'table_name'***93;.' </div>';
}
?>
кот, отвечающий за постраничный вывод данных
PHP код:
<?
class Paging {
private $page_size = 4;
private $link_padding = 10;
private $page_link_separator = ' ';
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***91;$this->page_var***93;) && (int)$_GET***91;$this->page_var***93; > 0 ? (int)$_GET***91;$this->page_var***93; : 1;
}
public function set_query($q)
{
$this->q = $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);
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 < 1 ) $start = 1;
$end = $this->cur_page + $this->link_padding-1;
if ( $end > $this->total_pages ) $end = $this->total_pages;
if ( $start > 1 ) $page_link_list***91;***93; = $this->get_page_link( $start-1, $start - 2 > 0 ? '...' : '' );
for ($i=$start; $i <= $end; $i++) $page_link_list***91;***93; = $this->get_page_link( $i );
if ( $end + 1 < $this->total_pages ) $page_link_list***91;***93; = $this->get_page_link( $end +1, $end + 2 == $this->total_pages ? '' : '...' );
if ( $end + 1 <= $this->total_pages ) $page_link_list***91;***93; = $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 > 1 ? $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.'=)***91;^&#***93;*/';
$url = '?'.( preg_match( $reg, $_SERVER***91;'QUERY_STRING'***93; ) ? preg_replace($reg, '${1}'.$page, $_SERVER***91;'QUERY_STRING'***93;) : ( $_SERVER***91;'QUERY_STRING'***93; ? $_SERVER***91;'QUERY_STRING'***93;.'&' : '' ).$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;
}
}
?>
может что заесь изменить можно, или есть готовые скрипты с функциями, которые требуются?