Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > КАК написать пагинацию?


Автор: savmp 9.9.2010, 21:39
ПОМОГИТЕ написать пагинацию...

Есть БД - BASE_A
с таблицей TABLE_B

которая состоит из столбцов:

CALL_B_A
CALL_B_B
CALL_B_C
CALL_B_D
CALL_B_E
CALL_B_F
CALL_B_G
CALL_B_H
CALL_B_I
CALL_B_G


ПОМОГИТЕ написать пагинацию... вывода в цыкле FOR всех полей из БД по 7 цыклов на 1 страницу

в виде:

<< < ... 10 11 12 13 14 15 16 ... > >>

Автор: savmp 9.9.2010, 22:09
КАК ПРИВЯЗАТЬ К ЭТОМУ СКРИПТУ МОЮ БАЗУ ДАННЫХ



$itemscount = 55;
$itemsperpage = 2;





if (isset ($_REQUEST['page'])) {$cpage = $_REQUEST['page'];} else {$cpage = 1;}// если странца не задана, то будем на 1й



$pagedisprange = 2; // соклько страниц до и после текущей выводить

$pagescount = ceil ($itemscount / $itemsperpage); // кол-во страниц

$stpage = $cpage - $pagedisprange; // определим начиная с какого номера будем выводить страницы

if ($stpage < 1) {$stpage = 1;} // если наше "начало" вылазит на отрицательные номера, то стави м в 1

$endpage = $cpage + $pagedisprange; // аналогично с номером, по который будем выводить

if ($endpage > $pagescount) {$endpage = $pagescount;} // если больше чем страниц, то последняя выводимая страницы - самая последняя наша

if ($cpage > 1) {echo '<a href="?page=1"><<</a>'; echo '<a href="?page='.($cpage-1).'"><</a>';}// first prev

if ($stpage > 1) echo '... '; // если начало вывода не 1, то напечатаем три точки

for ($i = $stpage; $i <= $endpage; $i++)

{ 
if ($i == $cpage) {echo '<strong>'.$i.'</strong> ';} else {echo '<a href="?page='.$i.'">'.$i.'</a> ';}
}

if ($endpage < $pagescount) echo '...'; // если начало конец вывода не последняя страница, то напечатаем три точки

if ($cpage < $pagescount) {echo '<a href="?page='.($cpage+1).'">></a>'; echo '<a href="?page='.$pagescount.'">>></a>';}// last

Автор: bars80080 9.9.2010, 22:10
а в чём проблема?
запрос заканчивается на ... LIMIT $start, 7
где 

Код

$start = (empty($_GET['start'])) ? 0 : intval($_GET['start']);


а в ссылке на страницу этот старт и передаём:

Код

echo '...<a href="?start='.($page*7).'">'.$page.'</a>...';

остаётся только набрать количество страниц.
узнать полное количество записей: SELECT count(*) FROM ...
а затем цикл, сравнение с текущей позицией и показ соседних страниц

Добавлено через 2 минуты и 42 секунды
Код

$sql = 'SELECT count(*) FROM `TABLE_B`';
$q = mysql_query($sql);
$f = mysql_fetch_assoc($q);
$itemscount = $f['count(*)'];
$itemsperpage = 7;


всё

Автор: savmp 9.9.2010, 22:24
???

Автор: bars80080 9.9.2010, 22:26
!!!

Автор: savmp 9.9.2010, 22:28
Не получаеться. :(

Помоги написать скрипт... уже 4 день голову ломаю :(

Автор: Muerto 9.9.2010, 22:32
Напугал его тернаркой  smile 
вот готовый и рабочий пример, только свои данные впиши
http://php.about.com/od/phpwithmysql/ss/php_pagination.htm

по русски http://tmbu.info/create-pages-navigation-menu-in-two-ways/

Автор: bars80080 9.9.2010, 22:33
что значит написать? вот он уже готовый, сам привёл. осталось вначале заменить 

$itemscount = 55;
$itemsperpage = 2;

на 

$sql = 'SELECT count(*) FROM `TABLE_B`';
$q = mysql_query($sql);
$f = mysql_fetch_assoc($q);
$itemscount = $f['count(*)'];
$itemsperpage = 7;

всё. остальное копипаст. 

Автор: savmp 9.9.2010, 22:50
Не понимаю... :(

Автор: Muerto 10.9.2010, 00:11
savmp, Если тебе совершенно не ясно, то или укажи именно строку которую не ясно...
И так пока не станет ясно...
Или почитай в интернете с основ...

Разбей задачу на более легкую...

За место того что бы показать все страницы снизу в списке,
попробуй для начала решить вот такие задачки:


1. Выведите с базы первых 10 записей
2. Выведите с базы при условии что в ней 50+ записей, записи 20-30 (при условии что у вас id идет по увиличению и начинается с 1)
3. Подсчитайте количество записей в вашей базе.
4. Выберите все записи с базы, но покажите на странице только 10!


Вот после того как вы это все решите, можно будет двигаться дальше...
Если вы себе даже и не представляйте как решить мои задачки 1-4 , то вам до пагинации ещё далеко...
Берите готовые решения и используйте...


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)