Странициране на MySQL данни чрез php 5 и jQuery
09-11-2009
Информация за урока: Чрез този урок, Вие бързо и безболезнено можете да създадете странициране(подреждане по страници) на всеки един Ваш код. Ето и няколко предимства на този урок:
- Лесна употреба
- Динамично презареждане(без рефреш)
- Красив ефект на презареждане
- Модерен код(php 5 + oop, jQuery, ajax)

ДЕМО -> под кодовете
Архив с кодовете -> свали
Архивът съдържа:
- class_pagination.php - класът със страницирането.
- conf.php - конфигурационен файл.
- example.sql - SQL файл с примерни данни за провеждане на тестове.
- getRows.php - Файлът, от който идват данните(извеждане от MySQL и проверки)
- jQuery.js - jQuery библиотеката + функциите за динамично и ефектно извеждане на резултати
- style.css - стиловете на div "pagination", показващ се под резултатите

Кодове

pagination_class.php
<?php
/* class pagination
author -> devent
date -> 02/11/09 */
class pagination {
private $d,$q,$page,$totalrows,$pagination;
public $p;

function __construct($rpp,$sql) {
$this->rpp = $rpp; $this->sql = $sql;
}

private function getTotalRows() {
$this->d = mysql_fetch_assoc(mysql_query($this->sql));
$this->totalrows = $this->d['allz'];
return $this->d['allz'];
}

public function page($page) {
$this->page = (!isset($page) || $page < 0) ? $this->page = 1 : $this->page = $page;
}

private function lastPage() {
return ceil($this->getTotalRows() / $this->rpp);
}

public function limit() {
return ($this->page - 1) * $this->rpp;
}

public function showPages() {
if($this->lastPage() != "1") {
$this->pagination = '<div id="pagination">';
$this->d = ceil($this->getTotalRows() / $this->rpp);
$prev = ($this->page <= 1) ? '<div class="disabled button">Предишна</div>' : '<div class="enabled button"><a href="javascript:pagination('.($this->page - 1).')">Предишна</a></div>';
$next = ($this->page >= $this->lastPage()) ? '<div class="disabled button">Следваща</div>' : '<div class="enabled button"><a href="javascript:pagination('.($this->page + 1).')">Следваща</a></div>';
$this->pagination .= $prev;
if($this->lastPage() > 7) {
if($this->page > 3) { $this->pagination .= '<a class="button" href="javascript:pagination(1)">1</a> ...'; }
if($this->page <= 3) {
for($x = 1;$x<=4;$x++) { $this->pagination .= '<a class="button" href="javascript:pagination('.$x.')">'.$x.'</a>'; }
$this->pagination .= '<div class="marg">...</div><a class="button" href="javascript:pagination('.$this->lastPage().')">'.$this->lastPage().'</a>';
} else {
if($this->page >= ($this->lastPage() - 4)) {
for($x = ($this->lastPage() - 3);$x<=($this->lastPage() - 1);$x++) { $this->pagination .= '<a class="button" href="javascript:pagination('.$x.')">'.$x.'</a>'; }
$this->pagination .= '<a class="button" href="javascript:pagination('.$this->lastPage().')">'.$this->lastPage().'</a>';
}
else {
for($x = $this->page;$x<=($this->page + 4);$x++) { $this->pagination .= '<a class="button" href="javascript:pagination('.($x - 1).')">'.($x - 1).'</a>'; }
$this->pagination .= '<div class="marg">...</div><a class="button" href="javascript:pagination('.$this->lastPage().')">'.$this->lastPage().'</a>';
}
}
} else {
for($x = 1;$x<=$this->lastPage();$x++) { $this->pagination .= '<a class="button" href="javascript:pagination('.$x.')">'.$x.'</a>'; }
}
$this->pagination .= $next.'</div>';
return $this->pagination;
}
}
}
?>


conf.php
<?php
define("dbhost", "localhost");
define("dbuser", "root");
define("dbpass", "password");
define("dbtable", "dev");
$c = mysql_connect(dbhost,dbuser,dbpass) or die("Не мога да се свържа с базата данни!");
$conn = mysql_select_db(dbtable,$c) or die("Не мога да избера таблица!");
?>


getRows.php
<table border="1">
<tr><td>ID</td><td>Име</td><td>Емайл</td><td>Телефон</td><td>Град</td></tr>
<?php
header('Content-Type: text/html; charset=utf-8');
include("conf.php");
include("class_pagination.php");
$rpp = 10;
$sql = "SELECT count(id) as `allz` FROM test";
$pagination = new pagination($rpp,$sql);
$pagination->page($_GET['page']);
$query = mysql_query("SELECT * from test LIMIT ".$pagination->limit().",".$pagination->rpp."");
while($d = mysql_fetch_assoc($query)) {
echo '<tr><td>'.$d['id'].'</td><td>'.$d['name'].'</td><td>'.$d['email'].'</td><td>'.$d['phone'].'</td><td>'.$d['city'].'</td></tr>';
}
?>
</table>
<?php echo $pagination->showPages(); ?>


jQuery.js
$(document).ready(function(){
$.get("getRows.php", { page: 1},
function(data){
$("#content").html(data);
});
});
function pagination(page) {
$.get("getRows.php", { page: page},
function(data){
$("#content").slideUp("slow",function() {
$(this).html(data);
$(this).slideDown("slow");
});
});
}


style.css
#pagination { margin-top: 25px; text-align: center; }
#pagination .button { margin-left: 2px; border: 1px solid #808080; padding: 3px; }
#pagination .disabled { display: inline; color: #5F5F5F; }
#pagination .enabled { display: inline; }
#pagination a { color: #000; }
#pagination a:hover { color: #b90000; }
#pagination .marg { display: inline; margin-left: 2px; }


Ето и един примерен index.html/php ->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Template</title>
<style type="text/css">
@import url(style.css);
</style>
<script type="text/javascript" src="jQuery.js"></script>
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
</head>

<body>
<div id="wrapper">
<div id="content">

</div>
</div>
</body>
</html>


>>> Внимание :: Задължително трябва да имате jQuery библиотека към сайта, иначе скрипта няма да проработи!!

Автор: devent / Всички права запазени. Категорично забранявам преписването по други сайтове или продажбата на този скрипт!!!

Урокът е тестван и работи на 100%. Извинявам се за обясненията във видеото, но не ме бива много по разясняването :). И за тихичкият микрофон също (oops)

>> Пуснете видеото на full screen за да виждате всичко нормално Smile






/ Трябва да сте регистриран за да напишете коментар /
От: webdeveloper
0:39 10-11-2009
Хубав урок, но едвали ще го ползвам защото ми се вижда доста сложна работата по вграждането му в системата ми.
От: admin
1:54 10-11-2009
То въпроса е да пробваш урока да се запознаеш с jQuery.
Може на следващата система да го ползваш.
От: kWo
2:52 10-11-2009
Евала на пича едно че урока е много добър, и добре обяснено!

много се кефя на видео уроците..
иска ти се направо да ги гледаш по 2 3 пъти за да схванеш по-лесно.

дано има взе повече видео уроци!!!
От: kWo
3:08 10-11-2009
проблема е само с този utf-8

:Ь прецаквам и целия код на страницата ако го направя на утф
а иначе коментарите излизат на квадрати
От: devent
3:14 10-11-2009
@webdeveloper, интегрирането е максимално елементарно. Изгледай урока и ще видиш, че не се изискват академични знания ;)
@kWo, добави header('Content-Type: text/html; charset=utf-8'); в getRows.php :)
От: appmaster
21:33 10-11-2009
Eвала за урока колега. Точно такова нещо ми трябваше.
Само си промених ефекта да е FadeIn и FadeOut.
Мерси много!
От: debian
6:49 11-11-2009
Няма спор , урока е много добър и лесен :)
От: crazy_pi4
20:53 14-11-2009
Много ти благодаря за урока! Страхотен е и ще го използвам. Така ще въведа малко стил в сайта ми. :)
От: Aleksey
19:26 25-08-2010
излиза ми тази грешка Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given на 5 места... трябва ли нещо допълнително да се тегли/настройва/пипа по сървъра, за да може да се подкара цялата работа?
От: Aleksey
22:51 25-08-2010
излиза ми тази грешка Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given на 5 места... трябва ли нещо допълнително да се тегли/настройва/пипа по сървъра, за да може да се подкара цялата работа?
От: nedko
11:04 30-08-2010
Урока е много хубав и практичен, но имам един въпрос - Гугъл ще индексира ли всичките записи или само първите изведени?
От: bogdan4o
14:59 09-09-2010
http://sensebox.net/music.php демо на урока :)
От: lub4o
16:56 03-11-2010
Аз правя ефекта, но ми се размества дизайна ;ссс, някой идеи ?
От: lub4o
17:44 03-11-2010
Напраих го, но като направя рефреш на страницата и за 1 стотна ми излиза тази грешка
Fatal error: Cannot redeclare class pagination in class+pagination.php on line 6

иначе си работи, все пак как мога да я отстраня ?
От: Kazinski
12:49 13-08-2011
Здравейте!
Нов съм относно PHP и SQL-а, искам да помоля някой ако маже да ми хелпне. Като сваля готовите файлове, с файла example.sql какво трябва да направя за да проработи страницата? Тоест, как да създам DB от този файл?
От: peter_ml
12:08 30-08-2011
Много е хубав урока, но как ще стане ако изкарвам информация като селектирам чрез гет променлива.
Пример:
SELECT * FROM category_product WHERE id_category = '$_GET['id']'
1