ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|
Алгоритмы постраничного вывода сообщений |

19.04.2007, 15:07
|
|
Постоянный
Регистрация: 17.07.2005
Сообщений: 475
Провел на форуме: 1665310
Репутация:
488
|
|
Алгоритмы постраничного вывода сообщений
За неимением времени прошу поделиться сабжем, чем больше тем лучше. Хорошо, если свои, не выдернутые из порталов.
|
|
|

19.04.2007, 15:38
|
|
Green member - Level 3
Регистрация: 02.11.2004
Сообщений: 1,337
Провел на форуме: 2398258
Репутация:
648
|
|
А он всего один:
1. Определяешь общее количество сообщений.
2. Делишь на 10 (если надо 10 записей на странице) и округляешь в большую сторону - так определишь сколько всего страниц получится.
3. Делаешь запрос с лимитом (номер страницы умноженый на 10)
__________________
+ (это не крестик, это плюсик!)
__________________
•
•
•
|
|
|

19.04.2007, 15:47
|
|
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме: 16641028
Репутация:
2371
|
|
PHP код:
// Переменная хранит число пользователей выводимых на станице
$num = 20;
// Извлекаем из URL текущую страницу
$page = $_GET['page'];
// Определяем общее число пользователей в базе данных
$result = mysql_query("SELECT COUNT(*) as cnt FROM `users`");
$users = mysql_result($result, 0, "cnt");
// Находим общее число страниц
$total = intval(($users - 1) / $num) + 1;
// Определяем начало сообщений для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) || $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная к какого номера
// следует выводить сообщения
$start = $page * $num - $num;
$result = mysql_query("SELECT * FROM `users` ORDER by `id` ASC LIMIT $start, $num");
for ($i = 0; $i < mysql_num_rows($result); $i++) {
//Здесь пишешь то, что должно выводиться на странице N раз
}
//Вводим ссылки на др.страницы
$file = 'users.php';
if ($page != 1)
$pervpage = "<a href= ./$file?page=1><< </a>";
// <a href= ./$file?page=". ($page - 1) ."><</a> ";
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = #"<a href= ./$file?page=". ($page + 1) .">></a>
"<a href= ./$file?page=" .$total. "> >></a>";
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0)
$page2left = " <a href= ./$file?page=". ($page - 2) .">". ($page - 2) ."</a> | ";
if($page - 1 > 0)
$page1left = "<a href= ./$file?page=". ($page - 1) .">". ($page - 1) ."</a> | ";
if($page + 2 <= $total)
$page2right = " | <a href= ./$file?page=". ($page + 2) .">". ($page + 2) ."</a>";
if($page + 1 <= $total)
$page1right = " | <a href= ./$file?page=". ($page + 1) .">". ($page + 1) ."</a>";
// Вывод меню
echo $page2left.$page1left."<b>".$page."</b>".$page1right.$page2right;
}
|
|
|

19.04.2007, 15:49
|
|
наркоман с медалью
Регистрация: 07.05.2005
Сообщений: 3,704
Провел на форуме: 19975136
Репутация:
4536
|
|
у тебя лишний мускул запрос
|
|
|

19.04.2007, 15:59
|
|
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме: 16641028
Репутация:
2371
|
|
ну это из двига совего выдернул..забыл убрать
|
|
|

19.04.2007, 16:23
|
|
наркоман с медалью
Регистрация: 07.05.2005
Сообщений: 3,704
Провел на форуме: 19975136
Репутация:
4536
|
|
я про то что кол-во рядов и данные можно взять из одного запроса.
|
|
|

19.04.2007, 16:28
|
|
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме: 16641028
Репутация:
2371
|
|
GreenBear, не темни....напиши как плучше..у мну и так все работает 
|
|
|

19.04.2007, 16:31
|
|
наркоман с медалью
Регистрация: 07.05.2005
Сообщений: 3,704
Провел на форуме: 19975136
Репутация:
4536
|
|
а чего темнить то? http://mysql.ru/
ну работает у тебя, а можно сделать на один запрос меньше.
|
|
|

19.04.2007, 16:35
|
|
Постоянный
Регистрация: 23.03.2006
Сообщений: 977
Провел на форуме: 2976185
Репутация:
694
|
|
Вот мой вариант. Его писал не я и вообще не помню откуда он у меня, но работает хорошо. Итак:
$index = номер страницы;
$count = общее число элементов;
$delimiter = количество элементов на странице;
$href_link = шаблон ссылки где (%) - подстановка номера страницы;
$count_list= количество ссылок на другии листы помимо активного;
В запросе использовать:
Код:
LIMIT ( $index - 1 ) * $delimiter, $delimiter
Сама функция:
Код:
<?php
function string_spliter($index, $count, $delimiter, $href_link, $count_list = 10)
{
$max_c = intval($count_list / 2) - 1;
//$text .= '<center>';
if ($count <= $delimiter)
{
return ;
}
else
{
$max_int = intval($count / $delimiter);
$max = $count / $delimiter;
$c_max = $max > $max_int ? $max_int + 1 : $max_int;
if ($max_int > ($max_c * 2 + 1))
{
$r_min = ($index - $max_c >= 1) ? $index - $max_c : 1 ;
$r_max = ($index + $max_c <= $c_max) ? $index + $max_c : $c_max;
if ($r_min < $max_c + 1)
{
$r_max = $r_min + $max_c + $max_c;
}
if ($r_max - $r_min < $max_c * 2 )
{
$r_min = $r_max - $max_c - $max_c ;
}
}
else
{
$r_min = 1;
$r_max = $c_max;
}
$r_min = $r_min < 1 ? 1 : $r_min;
$r_max = $r_max > $c_max ? $c_max : $r_max;
if ($index > 1)
{
$link = str_replace('(%)', $index - 1 , $href_link);
$array[] = '<a href="' . $link . '">«</a> ';
}
else
{
$array[] = ' ';
}
for ($i = $r_min; $i <= $r_max; $i++)
{
$link = str_replace('(%)', $i, $href_link);
$t = ($i == $index) ? $i . ' ' : "<a href='$link'>$i</a> ";
$array[] = $t;
}
if ($index < $c_max)
{
$link = str_replace('(%)', $index + 1 , $href_link);
$array[] = '<a href="' . $link . '">»</a>';
}
else
{
$array[] = ' ';
}
}
if (is_array($array))
{
$text = '<center><table><tr>';
foreach ($array as $cell)
{
$text .= '<td>' . $cell . '</td>';
}
$text .= '</tr></table></center>';
}
return $text;
}
$step = $_GET['step'];
$step = $step == null ? 1 : $step;
echo string_spliter($step, 120, 10, 'test2.html?step=(%)');
?>
|
|
|

19.04.2007, 16:53
|
|
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме: 16641028
Репутация:
2371
|
|
blaga, это убожество =)честно
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|