[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Постраничный вывод
Ramzil_Nixon
Помогите создать постраничный вывод.

Вот я начал писать:

	$in_page = $news_stat_page; // Количество новостей на одной странице
print ("<div align='center'>".draw_bar($page, $amount, $in_page,"news.php?page=")."</div>\n<table>");


Правильно ли я иду? :)



Спустя 11 минут, 29 секунд (24.10.2011 - 14:15) Core_2_Duo написал(а):
Когда-то сам задавался таким вопросом, в итоге написал такое:

$link=mysql_connect($mysql_host,$mysql_user,$mysql_pass); //Подключение к бд с новостями
mysql_select_db($mysql_db); //Подключение к бд с новостями
$query='SELECT * FROM `news`'; //Выбираем из таблицы все
$res=mysql_query($query);
$pages=ceil(mysql_num_rows($res)/$count); //делим нацело с округлением в большую сторону общее количество новостей на количество на одной странице
if ($GET['rem']<=$pages) { //если запрошеная пользователем страница существует
$toplimit=($GET['rem']-1)*$count; //вычисляем "верхний" лимит новости, допустим пользователь ищет 2 страницу, тогда $toplimit=(2-1)*10=10, начинаем 2ую страницу с 10ой новости (почему не с 11? потому что отсчет идет с 0)
$query='SELECT * FROM `news` ORDER BY `id` DESC LIMIT '.$toplimit.' , '.$count; //выдаем 10 новостей начиная с 10.
$res=mysql_query($query);
$content.='<div id="info">';
while ($row=mysql_fetch_array($res)) {
$content.='<h3>'.sk($row['title']).'</h3><p>'.sk($row ['contall']).'</p>';
}
$content.='</div> //в принципе, этот вывод уже зависит от вас)
mysql_close($link);

Спустя 1 минута, 7 секунд (24.10.2011 - 14:16) Ramzil_Nixon написал(а):
Core_2_Duo
спасибо, щас попробую написать, похожее

Спустя 1 минута, 39 секунд (24.10.2011 - 14:18) Core_2_Duo написал(а):
Если понадобится переход между страницами (а он понадобится) пишите, скину функцию, которую сам писал

Спустя 15 минут, 41 секунда (24.10.2011 - 14:33) m4a1fox написал(а):
Core_2_Duo
Проверка на число - отсутствует!
Зачем так
Цитата
$row=mysql_fetch_array($res)

А не так
Цитата

$row=mysql_fetch_assoc($res)

Спустя 1 минута, 12 секунд (24.10.2011 - 14:35) Winston написал(а):
Цитата (Ramzil_Nixon @ 24.10.2011 - 14:04)
$in_page = $news_stat_page; // Количество новостей на одной странице
print ("<div align='center'>".draw_bar($page, $amount, $in_page,"news.php?page=")."</div>\n<table>");

Пагинатор из 2 строк? blink.gif Ну ты монстр !

Спустя 30 секунд (24.10.2011 - 14:35) Ramzil_Nixon написал(а):
а что это?

$GET['rem']


откуда оно береться

Спустя 43 секунды (24.10.2011 - 14:36) Ramzil_Nixon написал(а):
Winston
Цитата
Пагинатор из 2 строк?  Ну ты монстр !

Это начало скрипта

Спустя 42 секунды (24.10.2011 - 14:37) m4a1fox написал(а):
Ramzil_Nixon
Оооооо! Это древняя легенда...... у автора "пагинатора" спроси! biggrin.gif

Спустя (24.10.2011 - 14:37) Ramzil_Nixon написал(а):
m4a1fox
Цитата
$row=mysql_fetch_array($res)

у меня так читает количество строк из таблицы. Нормально работает

Спустя 1 минута, 39 секунд (24.10.2011 - 14:38) Core_2_Duo написал(а):
Я скопировал кусок своего кода с сайта. У меня выведет 404 ошибку сайт, если ввести не число.
Касательно второго замечания - Функция mysql_fetch_assoc() аналогична вызову функции mysql_fetch_array() со вторым необязательным параметром, равным MYSQL_ASSOC. Функция возвращает только ассоциативный массив.


$GET['rem']=Номер страницы с новостями, типа- http://test.com/news/2
$GET['rem'] будет равнятся 2 в этом случае

Спустя 1 минута, 15 секунд (24.10.2011 - 14:39) m4a1fox написал(а):
А я и не говорил что она будет плохо работать! Поясню тебе как однажды где не помню, но написал twin. Зачем тебе в правой руке вилка а в левой ложка если ты суп собрался есть? Аналогия ясна?

Спустя 1 минута, 15 секунд (24.10.2011 - 14:41) Ramzil_Nixon написал(а):
Цитата
$GET['rem']=Номер страницы с новостями, типа- http://test.com/news/2
$GET['rem'] будет равнятся 2 в этом случае

а понял

m4a1fox
Нет ничего не понял

Спустя 39 секунд (24.10.2011 - 14:41) m4a1fox написал(а):
Core_2_Duo
Цитата
$GET['rem']=Номер страницы с новостями, типа- http://test.com/news/2
$GET['rem'] будет равнятся 2 в этом случае

Мдя..... вот как вы считаете, ТС знает откуда это

$GET[]

?
Как так можно вырвали кусок из кода, давайте уже и функцию сюда, кот. преобразует все что приходит в $_GET в $GET. Я то например знаю откуда она, а вот ТС навряд!

Спустя 15 секунд (24.10.2011 - 14:42) Winston написал(а):
Цитата (Ramzil_Nixon @ 24.10.2011 - 14:36)
Это начало скрипта

Вообще-то код выкладывается после того как уже написан, а не наоборот, еще и просишь совета в правильном направлении blink.gif

Спустя 57 секунд (24.10.2011 - 14:43) m4a1fox написал(а):
Ramzil_Nixon
Цитата

Нет ничего не понял

Почитай про разницу assoc от array.... может так яснее станет!

Спустя 1 минута, 29 секунд (24.10.2011 - 14:44) Winston написал(а):
А лучше напиши и посмотри
echo '<pre>' . print_r(mysql_fetch_array($result, 1)) . '</pre>';
echo '<pre>' . print_r(mysql_fetch_assoc($result, 1)) . '</pre>';

Спустя 12 секунд (24.10.2011 - 14:44) Core_2_Duo написал(а):
Свернутый текст
$GET = array(
'page' => 'main',
'rem' => '1',
'id' => 0,
'num' => 0,
);

if(c2d_rewrite == 'on' && !empty($_GET['route']))
{
$param = explode('/', trim($_GET['route'], '/'));
$i = 0;
foreach($GET as $var => $val)
{
if(!empty($param[$i]))
$GET[$var] = $param[$i];
++
$i;
}
}

elseif(count($_GET))
{
foreach($GET as $var => $val)
if(!empty($_GET[$var]))
$GET[$var] = $_GET[$var];
}


 ! 

М
Выделяйте код тегами !
Winston

Спустя 59 секунд (24.10.2011 - 14:45) m4a1fox написал(а):
Свернутый текст

$GET = array(
'page' => 'main',
'rem' => '1',
'id' => 0,
'num' => 0,
);

if(c2d_rewrite == 'on' && !empty($_GET['route']))
{
$param = explode('/', trim($_GET['route'], '/'));
$i = 0;
foreach($GET as $var => $val)
{
if(!empty($param[$i]))
$GET[$var] = $param[$i];
++
$i;
}
}

elseif(count($_GET))
{
foreach($GET as $var => $val)
if(!empty($_GET[$var]))
$GET[$var] = $_GET[$var];
}

Пойду что ль модером на треть ставки! :)



Спустя 32 секунды m4a1fox написал(а):
Winston
Красавчик!

А вот и функция подвалила! Я думаю, у ТС теперь больше вопросов чем ответов!

Core_2_Duo
А про внешний вид ссылок забыли? Это тоже не мало важно! И еще пояснить, что сие функция таки делает?

Свернутый текст
Ага! Пасиб!

Спустя 5 минут, 34 секунды (24.10.2011 - 14:51) Core_2_Duo написал(а):
Мой вид ссылок на сайте будет такой же, как я привел в примере:
http://test.ru/news/2
По поводу функции, тут мало объяснить че она делает, тут еще нужны правила реврайта из htaccess'a. К топику это имеет крайне маленькое отношение

Спустя 1 минута, 46 секунд (24.10.2011 - 14:53) Winston написал(а):
В htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

Спустя 1 минута, 33 секунды (24.10.2011 - 14:54) Core_2_Duo написал(а):
Цитата (Winston @ 24.10.2011 - 11:53)
В htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route= [L,QSA]

Именно

Спустя 8 секунд (24.10.2011 - 14:54) m4a1fox написал(а):
Core_2_Duo
Цитата
По поводу функции, тут мало объяснить че она делает, тут еще нужны правила реврайта из htaccess'a. К топику это имеет крайне маленькое отношение

Собственно к чему я и подводил 2 страницы! К тому, что надо писать по таким примерам, где уже все сделано - а не отрывками. Это как книгу читать, первые 2 страницы, в центре страницы 4 и в конце 1 - вы поймете про что книга?

Спустя 2 минуты, 12 секунд (24.10.2011 - 14:56) Core_2_Duo написал(а):
Я объяснил, что хранится в переменной $GET['rem'] и ТС отлично это понял. Не понимаю претензий.

Спустя 1 минута, 42 секунды (24.10.2011 - 14:58) m4a1fox написал(а):
ТС, теперь понятнее стало? :) Ну что за люди, я ж говорю, объясните человеку правильно - а не бросайтесь кодами....

RewriteEngine On - что это значит [b]RewriteEngine[/b]
RewriteCond %{REQUEST_FILENAME} !-f - что это значит [b]RewriteCond[/b], что такое [b]%[/b] R_F - это понятно более и менее, что такое [b]!-f[/b]
RewriteCond %{REQUEST_FILENAME} !-d что такое [b]!-d[/b]
RewriteRule ^(.*)$ index.php?route= [L,QSA] !-d что такое [b][L,QSA][/b], и почему запятая после [b]L[/b]

Спустя 54 секунды (24.10.2011 - 14:59) m4a1fox написал(а):
Core_2_Duo
Цитата
Не понимаю претензий.

Да не. Претензий нет совершенно! Если ТС понял, то безмерно рад за него! Честно...

Спустя 6 минут, 5 секунд (24.10.2011 - 15:05) Winston написал(а):
Цитата (m4a1fox @ 24.10.2011 - 14:58)
Ну что за люди, я ж говорю, объясните человеку правильно - а не бросайтесь кодами..
Та, блин, уже все давно написано/описано, только гугл открыть и вбить нужную строчку, и просто почитать, что написано про ее mad.gif

Спустя 24 секунды (24.10.2011 - 15:06) Core_2_Duo написал(а):
Флаги [L,QSA]
'last|L' (последнее правило)
Остановить процесс преобразования на этом месте и не применять больше никаких правил преобразований. Это соответствует оператору last в Perl или оператору break в языке C. Используйте этот флаг для того, чтобы не преобразовывать текущий URL другими, следующими за этим, правилами преобразований.

'qsappend|QSA' (query string append - добавлять строку запроса)
Приплюсовать то, что идет после знака вопроса. Например, если урла была такая, http://mysite.com/node/1?size=_original, то в броузере останется такой-же, но скрипту пойдет в таком виде: http://mysite.com/index.php?q=/node/1?size=_original

А вообще, гугл в руки, если вопросы были именно с целью узнать.

Спустя 36 секунд (24.10.2011 - 15:06) Ramzil_Nixon написал(а):
SELECT * FROM table LIMIT $number_page



Могу ли я так записать если $number_page является количеством записей выводимых на одной странице?

Спустя 6 секунд (24.10.2011 - 15:06) Winston написал(а):
Core_2_Duo
Ага, ТС тебя понял laugh.gif

Спустя 2 минуты, 3 секунды (24.10.2011 - 15:08) m4a1fox написал(а):
Winston
Цитата
Та, блин, уже все давно написано/описано, только гугл открыть и вбить нужную строчку, и просто почитать, что написано про ее

А претензии, дорогие знатоки и не к вам, а, уж прости меня, к ТС!

Спустя 4 минуты, 44 секунды (24.10.2011 - 15:13) Core_2_Duo написал(а):
Цитата (Ramzil_Nixon @ 24.10.2011 - 12:06)
SELECT * FROM table LIMIT $number_page



Могу ли я так записать если $number_page является количеством записей выводимых на одной странице?

Ну смотрите же, что вы делаете сами:
SELECT * FROM table LIMIT $number_page

Данный запрос выберет из таблицы первые 20 (в вашем случае) рядов. Если вы собираетесь все время показывать первые 20 новостей, то да, можете.

Спустя 1 минута, 47 секунд (24.10.2011 - 15:15) m4a1fox написал(а):
ТС - лови

Спустя 1 минута, 34 секунды (24.10.2011 - 15:16) Ramzil_Nixon написал(а):
Core_2_Duo
Не мне надо по 20 на каждой странице.

Спустя 4 минуты, 28 секунд (24.10.2011 - 15:21) Core_2_Duo написал(а):
Цитата (m4a1fox @ 24.10.2011 - 12:15)
ТС - лови

Да, много я часов на ирбисе в свое время провел.. Но пагинатор решил свой написать сам)

Спустя 2 минуты, 30 секунд (24.10.2011 - 15:23) m4a1fox написал(а):
Core_2_Duo
ага.... я вижу! smile.gif

Спустя 7 минут, 9 секунд (24.10.2011 - 15:30) Core_2_Duo написал(а):
Давайте я еще раз подробно объясню:

$link=mysql_connect($mysql_host,$mysql_user,$mysql_pass);
mysql_select_db($mysql_db);
$query='SELECT * FROM `news`'; //Выбираем из таблицы все что там есть, все ряды
$res=mysql_query($query);
$pages=ceil(mysql_num_rows($res)/$count); //делим нацело с округлением в большую сторону, mysql_num_rows($res) - общее количество новостей, $сount - новости на одну страницу, получаем количество страниц.
if ($GET['rem']<=$pages) { //как я объяснял уже $GET['rem'] номер страницы, которую пользователь хочет прочитать. Если она меньше или равна количеству страниц, то значит она существует и надо выдать новости этой страницы.
$toplimit=($GET['rem']-1)*$count; //вычисляем "верхний" лимит новости, допустим пользователь ищет 2 страницу, тогда $toplimit=(2-1)*10=10, начинаем 2ую страницу с 10ой новости (почему не с 11? потому что отсчет идет с 0)
$query='SELECT * FROM `news` ORDER BY `id` DESC LIMIT '.$toplimit.' , '.$count; //выдаем 10 новостей начиная с 10. Причем выдаем в обратном порядке (DESC).
$res=mysql_query($query);


Осталось только вывести, например:


$content='';
while ($row=mysql_fetch_array($res))
$content.='<h3>'.$row['title'].'</h3><p>'.$row['body'].'</p>'; //где $row['title'] и $row['body'] - заголовок и тело новости соответственно
echo $content;
mysql_close($link);

Спустя 1 минута, 28 секунд (24.10.2011 - 15:32) Core_2_Duo написал(а):
Цитата (m4a1fox @ 24.10.2011 - 12:23)
Core_2_Duo
ага.... я вижу! smile.gif

Ну мой пагинатор получился проще (для меня офк) и быстрее, а в их коде я бы ковырялся долго) Потому что не люблю просто копировать, люблю понимать че происходит в коде

Спустя 10 минут, 2 секунды (24.10.2011 - 15:42) Ramzil_Nixon написал(а):
Core_2_Duo
Спасибо за помощь конечно, но я ничего в этом коде не понял.
Как нибудь сам по тихоньку напишу

Спустя 6 минут, 12 секунд (24.10.2011 - 15:48) m4a1fox написал(а):
Core_2_Duo
Цитата
Спасибо за помощь конечно, но я ничего в этом коде не понял.

Так что утверждение
Цитата

Я объяснил, что хранится в переменной $GET['rem'] и ТС отлично это понял. Не понимаю претензий.

fasle!

Спустя 3 минуты, 36 секунд (24.10.2011 - 15:52) Core_2_Duo написал(а):
sad, but true ©

Спустя 2 минуты, 53 секунды (24.10.2011 - 15:55) m4a1fox написал(а):
No doubt


_____________
Миллионы приходят, уходят, не в них счастье. Самым важным на свете всегда будут люди в этой комнате, вот здесь, сейчас...

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.