download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

PHP странициране - paging. Прост урок за страницирането на масиви.

Автор
Съобщение
phrozencrew
Съб, 06.12.08, 14:32
Реших да напиша този простичък урок за странициране с помощта на PHP, защото исках да покажа на един човек как се прави и да може да го разбере, но в мрежата е пълно с простотии и копи-пейст камари от код.
Страницирането е много популярна техника при изграждането на web-сайтове, но за младите програмисти понякога е трудно за схващане. Важно е да се знае, че се страницират основно масиви! Всичко, което може да се трансформира до масив може да се страницира. Това важи с пълна сила и за базите данни, чийто заявки обикновено връщат масив като резултат.
В този урок ще използвам една стара функция на PHP - array_slice(). Тази функция за рязане на масиви има следното описание:
array_slice($масив, режи_от_n-тия_елемент, броя_на_елементите_в_отрязъка);

Това рязане се използва по същия начин и във вградените функции на базите данни. Например в MySQL вместо array_slice() се нарича LIMIT, но принципа е абсолютно същият. Затова специално за малки MySQL (или SQLite) бази данни избора си е лично ваш дали ще използвате LIMIT-а или array_slice, защото и двете ще ви свършат една и съща работа.
Друга интересна функция, която ще използвам във скрипта е ceil(). Тази функция закръгля число с плаваща запетая на горе. Например, ако сложим 3.2 в ceil(), то ще получим 4. Това ни е необходимо, защото трябва да можем да определим колко страници общо ще имаме, ако показваме по 5 елемента на страница. Формулата за броя на страниците можем да я представим образно така:
Брой на страниците = закръгляне_нагоре(Общ брой на елементите / Колко елемента да се показват на страница)
Друго нещо, което ще ни е необходимо е номера на текущата страница, за да можем да покажем съответният отрязък от елементите. Например ако искаме да показваме по 5 елемента на страница:
Страница 1: Отрязък елементи (от 1 до 5)
Страница 2: Отрязък елементи (от 6 до 10)
Страница 3: Отрязък елементи (от 11 до 15)

.... и т.н.
Взимането на страницата го правим с $_GET заявка, като трябва да се предвиди, че може да няма подаден $_GET и тогава ще се наложи да сложим страница 1 по подразбиране. Ето как ще изглежда това:
if(isset($_GET['page'])) $page = $_GET['page'];
else $page = 1;

Мисля, че идеята е ясна. Сега нека видим как ще изглежда целия скрипт:
<?php
$ar = array("element1","element2","element3","element4","element5","element6","element7");
$el_na_stranica = 3;
 
if(isset($_GET['page'])) $page = $_GET['page'];
else $page = 1;
 
$reji_ot_elem = ($el_na_stranica*$page)-$el_na_stranica;
$sm = array_slice($ar, $reji_ot_elem, $el_na_stranica);
foreach($sm as $l) echo $l."<br />";
 
// -- STRANICIRANETO --
for($x=1; $x<=ceil(count($ar)/$el_na_stranica);$x++){
	if ($x==$page) { echo "$x "; continue; }
	echo ("<a href=\"index.php?page=$x\">$x</a> ");
}
?>

В скрипта съм добавил и лек тунинг активната страница да не стои като линк.
Демо на урочето + сорс кода.

Този скрипт спокойно може да се интегрира в един друг мой урок - системата за новини. За да се добие реална представа как ще изглежда страницирана тази система ето и още едно демо:
PHP проста система за новини + странициране

Надявам се това да ви убеди, че няма нужда от една каруца код за нещо толкова простичко, а можем да минем и без MySQL.

anonymous
Пон, 08.12.08, 02:16
Phrozen, бравоо, още един страхотен урок! Поздрави, прави ги, но по честичко..
anonymous
Пон, 08.12.08, 08:07
Браво приятелю доста полезно и интересно.
anonymous
Пон, 08.12.08, 08:14
За влизащите да се учат е това , останалите 99 % обаче не биха го разбрали и като мене влизат за kopy paste и други простоти , както се изказахте.
Но щом и другите казват , има нужда и от това.
То и рубрика такава си има , но няма там много уроци.
anonymous
Пон, 08.12.08, 09:25

RE: PHP странициране - paging. Прост урок за страницирането на масиви.

” За влизащите да се учат е това , останалите 99 % обаче не биха го разбрали и като мене влизат за kopy paste и други простоти , както се изказахте.
Но щом и другите казват , има нужда и от това.
То и рубрика такава си има , но няма там много уроци. „

==========================================

Сега , като чета това много се учудвам на този увод като встъпление , насочен към останалите.
Kато елегантен и възпитан специалист с универсална подготовка и Авторитетно Мнение , какъвто съм Аз и то в много области искрено се учудвам за насоката която се дава тука :

Реших да напиша този простичък урок за странициране с помощта на PHP, защото исках да покажа на един човек как се прави и да може да го разбере, но в мрежата е пълно с простотии и копи-пейст камари от код.

За мен ли става дума тука ?

phrozencrew
Пон, 08.12.08, 09:53

RE: RE: PHP странициране - paging. Прост урок за страницирането на масиви.

” ==========================================

Сега , като чета това много се учудвам на този увод като встъпление , насочен към останалите.
Kато елегантен и възпитан специалист с универсална подготовка и Авторитетно Мнение , какъвто съм Аз и то в много области искрено се учудвам за насоката която се дава тука :

Реших да напиша този простичък урок за странициране с помощта на PHP, защото исках да покажа на един човек как се прави и да може да го разбере, но в мрежата е пълно с простотии и копи-пейст камари от код.

За мен ли става дума тука ? „

Не, за друг пичага става въпрос. Не претендирам, че поста е на висок стил, но това не е официална статия и за това терминологията ми е на ниво "чакай да прочета нещо докато си пия кафенцето".
Ако входящия пасаж по някакъв начин засяга личността Ви или ви кара да се чувствате посочен бих могъл да го преработя. Целта е да се създаде интерес към качествения код и бих желал да се коментира самото кодиране, но няма проблем да има критика и към стила на амбалажния текст.
Бъдете здрав!
insecteater
Пон, 08.12.08, 10:36
Положителна критика много сладко написано даже го и разбрах , но наистина е полезно, на място и разбираемо.

Все пак това е обяснение за хора, които вече имат някаква елементарна основа на PHP, а не за такива които искат с два клика на мишката да направят нещо без да разбират върху какво щракат и после да се бият в гърдите че са създали нещо.

boy4o
Пон, 08.12.08, 12:41
Май разбрах само наполовина, но съм доста бос с PHP. Това, което разбрах е твърде, смея да кажа, евристично. Предполагам, че половината, която не разбрах е също толкова полезна.

Браво, Фрозен! И пак пусни нещо подобно.

anonymous
Пон, 08.12.08, 14:31
Благодарим! Знаеш ли кое ще е още по-яко от този урок - няколко такива урока Ще бъде хубаво (естествено ако имаш времето) да ги събереш на едно място с ескалиращо ниво на трудност - от по-лесните неща до по-трудните. Така няма да се налага да чета тъпотията For Dummies
anonymous
Вто, 09.12.08, 20:46
Phrozencrew, искам да те питам нещо не по темата, нали може?
Относно тоя твой сайт, преди малко го видях и да те питам за "Към английската версия на сайта", разгледах кода но не намерих това как си го направил, ако може да разясниш?
Предполагам че не си превеждал страницата?
phrozencrew
Вто, 09.12.08, 21:07

RE: PHP странициране - paging. Прост урок за страницирането на масиви.

” Phrozencrew, искам да те питам нещо не по темата, нали може?
Относно тоя твой сайт, преди малко го видях и да те питам за "Към английската версия на сайта", разгледах кода но не намерих това как си го направил, ако може да разясниш?
Предполагам че не си превеждал страницата? „
dj_parimo, това е крайния десен слой на сайта, който съм го маркирал като линк с прозрачен гиф от 1px, разтеглен до размерите на текста, за да мога да го вържа с дизайна от долу. Семпла, но много лека техника за да запазиш дизайна без сложнотии и да правиш излишни таблици (таблиците в дизайна са кофти за потребители със зрителни увреждания).
Иначе клиента пожела да има линк към официалния сайт, като постави и условие сайта му максимално да се доближава до оригиналния, като (ако е възможно) да се подобри дизайна. Та това е.
редактиран от phrozencrew на 09.12.08 21:08
anonymous
Вто, 09.12.08, 21:49

RE: RE: PHP странициране - paging. Прост урок за страницирането на масиви.

dj_parimo, това е крайния десен слой на сайта, който съм го маркирал като линк с прозрачен гиф от 1px, разтеглен до размерите на текста, за да мога да го вържа с дизайна от долу. Семпла, но много лека техника за да запазиш дизайна без сложнотии и да правиш излишни таблици (таблиците в дизайна са кофти за потребители със зрителни увреждания).
Иначе клиента пожела да има линк към официалния сайт, като постави и условие сайта му максимално да се доближава до оригиналния, като (ако е възможно) да се подобри дизайна. Та това е. „

Хаха, видя ли какво стана забравих сайта да посоча, но ти се сети.
Ето го и него ако на някои му е интересно: http://www.alfaheat.net/
Аз помислих че има някакъв начин да се превежда сайtа на няколко езика, за това питах.
То май имаше няква такава тема?!
А иначе ефектно е направено това със слоя!

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.