Форум → Программирование → PHP для идиотов → Постраничный вывод из базы( Pagination)
Постраничный вывод из базы( Pagination)
-
-
21 августа 2010 г. 0:39, спустя 33 секунды
на аватарке)https://smappi.org/ - платформа по созданию API на все случаи жизни -
21 августа 2010 г. 0:44, спустя 5 минут 19 секунд
а де слоника купить мона?С возвращением, Пiха! hyperoff.ru - качественный хостинг php -
21 августа 2010 г. 0:49, спустя 4 минуты 21 секунду
<?php
include_once ('mysql.class.php');
class MyclassPage extends MyBD
{
public $tabl_pages, //Таблица с которой работает класс
$count_block, //По Сколько выводить елементов с базы на страницы
$query_sel_page, //query запрос с базы даных
$both_number = 2, // Количество страниц справа и слева
$link_left = "", //Что выводить с лева от параметоров вывода класса в URI
$link_right = "", //Что выводить с права от параметоров вывода класса в URI
$conect_page = "", //Паременная соединения с базой
$set_podlist, //Переменая которая получает даную страницу
$link = "", //"Это ссылка впреди ссылки на страницы"
$id_get = 'get', //"Это параметр указывает в каком формате выводить ссылки настраницы если get(по умолчанию то вид силки ?name=value…… если не get то вид name/value)) // ""
$view_get = ""; //возвращает вид формата вывода
//Запрос к базе данных вида WHERE id = 1; и сортировка
protected $where, $order, $one = 1;
//——————————————————————————
// Это метод определения вида URI
function viwsget()
{
if ($this->id_get != 'get')
{
$this->set_podlist = "";
$this->view_get = "/$this->set_podlist";
} else
{
$this->view_get = "$this->set_podlist=";
$this->set_podlist = $_GET[$this->set_podlist];
}
}
//——————————————————————————
function all_page()
{
$this->viwsget();
//Запрос который определяет количество записей в базе;
$sql = "SELECT count(*)FROM $this->tabl_pages{$this->where}{$this->order}";
$query_pages = $this->query($sql, $this->conect_page);
$all_pages = $this->get($query_pages);
$all_pages = $all_pages[0];
//
//Вычесляет полное количество на которых будут розмещаться блоки с БД
$blockpage = ceil($all_pages / $this->count_block);
//
//Проверяет был ли передан параметр set_podlist(страница)
if (($this->set_podlist != 0) and ($this->set_podlist <= $blockpage))
{
$podlist = intval($this->set_podlist);
} elseif (empty($set_podlist))
{
$podlist = 1;
} else
$podlist = 1;
//
//Вычисляем с какой записе выводить страинцу
$first = ($podlist - 1) * ($this->count_block);
//
//Даёт query запрос в БД по заданым параметрам
//Обработчик пишется отдельно уже в контролере
$sql1 = "SELECT * FROM $this->tabl_pages{$this->where}{$this->order} LIMIT $first,{$this->count_block}";
$this->query_sel_page = $this->query($sql1, $this->conect_page);
//
// Готовит к выводу $pages
$pages = "";
//
//$both_number равна количеству элементов с права и лева
$both_number = $this->both_number;
//
//Выводим первую страинцу если это не первая
if ($podlist != 1)
{
$pages .= "<a href='$this->link$this->view_get$this->one$this->link_right'>1</a> ";
}
//
//Выводим … если страинца больше на 1 от количества элементов по бокам
if ($podlist > $this->both_number + 2)
{
$pages .= "…";
}
//
//Выводим боковые элементы с лева от выводимлй записи
if ($podlist > $this->both_number + 1)
{
for ($i = $podlist - $both_number; $i < $podlist; $i++)
{
$pages .= "<a href='$this->link$this->link_left$this->view_get$i$this->link_right'>$i</a> ";
}
} else
{
for ($i = 2; $i < $podlist; $i++)
{
$pages .= "<a href='$this->link$this->link_left$this->view_get$i$this->link_right'>$i</a> ";
}
}
//
//Выводим текущую страницу
if ($podlist >= 1)
{
$pages .= "<a href='$this->link$this->link_left$this->view_get$podlist$this->link_right ' class = 'link_page_activ'>$podlist</a> ";
}
//
//Выводим боковые элементы с права от выводимой записи
if ($podlist + $this->both_number < $blockpage)
{
for ($i = $podlist + 1; $i <= $podlist + $this->both_number; $i++)
{
$pages .= "<a href='$this->link$this->link_left$this->view_get$i$this->link_right'>$i</a> ";
}
} else
{
for ($i = $podlist + 1; $i < $blockpage; $i++)
{
$pages .= "<a href='$this->link$this->link_left$this->view_get$i$this->link_right'>$i</a> ";
}
}
//Выводим … если общее количество страниц больше текущей страницы + элементы с права +1
if ($blockpage > $podlist + $both_number + 1)
{
$pages .= "…";
}
//
//Выводим последнюю страницу
if ($podlist != $blockpage)
{
$pages .= "<a href='$this->link$this->link_left$this->view_get$blockpage$this->link_right'>$blockpage</a> ";
}
return $pages;
//
}
}
?>Спустя 120 сек.А Вот упрощённый вариант класса работы с БД(От моего товарища Ильи )
<p>
<?php
class MyBD
{
public $host="";
public $login = "";
public $password = "";
public $db="";
function connect()
{
mysql_connect($this->host, $this->login, $this->password);
mysql_select_db($this->db);
mysql_query("set names utf8") or die("set names utf8 failed");
//mysql_query("SET NAMES CP1251");
}
function query($sql)
{
$this->connect();
if (!$result = mysql_query($sql)) {
echo mysql_error() . "<br>";
echo ("ERROR BASE");
}
return $result;
}
function get($sql)
{
return mysql_fetch_array($sql);
}
function checkpass()
{
$this->connect();
}
function query_num_rows($sql)
{
return mysql_num_rows($this->query($sql));
}
function is_num_rows($sql)
{
return mysql_num_rows($sql);
}
function close()
{
@mysql_close();
}
}
?></p> -
-
21 августа 2010 г. 1:05, спустя 15 минут 3 секунды
ukroficer, не буду много объяснять, но по сути, уже глядя на стиль написания понятно что класс говененький. И если он таки будет работать, то я рад. Но в целом он ппц как мне не нравится.
Ну и это: нужно чтоб методы отдавали на вьюшку либо массив с параметрами для построения списка страниц либо же уже готовый, но СПИСОК, а не простое перечисление ссылок. Со списком легче визуальные фишки CSS'кой намутить. Но это ИМХО. -
21 августа 2010 г. 1:09, спустя 3 минуты 49 секунд
ukroficer, не буду много объяснять, но по сути, уже глядя на стиль написания понятно что класс говененький. И если он таки будет работать, то я рад. Но в целом он ппц как мне не нравится.
Ну и это: нужно чтоб методы отдавали на вьюшку либо массив с параметрами для построения списка страниц либо же уже готовый, но СПИСОК, а не простое перечисление ссылок. Со списком легче визуальные фишки CSS'кой намутить. Но это ИМХО.
Пока жи что бы ты поменял..?Пример?Спустя 20 сек.А работает он нормально… -
21 августа 2010 г. 1:15, спустя 5 минут 49 секунд
ukroficer, http://zendframework.com/manual/ru/zend.paginator.html сравни со своим и поймешь, что Givi имел ввиду -
21 августа 2010 г. 1:18, спустя 3 минуты 31 секунду
помню таких рахдавали на phpconf 2008
а де слоника купить мона?Спустя 64 сек.http://blgo.ru/blog/2009/07/14/gopaginator/ этим мы всегда пользуемся….
а для джанги свой юзается - http://code.google.com/p/django-pagination/https://smappi.org/ - платформа по созданию API на все случаи жизни -
-
21 августа 2010 г. 1:41, спустя 12 минут 49 секунд
ды мне что в прошлое идти что ли?С возвращением, Пiха! hyperoff.ru - качественный хостинг php -
21 августа 2010 г. 2:06, спустя 24 минуты 15 секунд
а накой хрен? Может еще учимся делать ленту новостей?
Пожалуйста, авторизуйтесь, чтобы написать комментарий!