X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Постраничный вывод данных, помогите разобрать функцию
Banderas
Banderas
Topic Starter сообщение 20.5.2011, 9:14; Ответить: Banderas
Сообщение #1


Нашел в интернете функцию разбития на страницы, тоесть функцию, которая организовывает постраничный вывод данных.
Теперь не могу до конца с ней разобраться:
[php]function num_page($page,$num='',$get='yes')
{
global $rows_page;
$num=(empty($num)) ? $rows_page : $num;
$num_rows=mysql_result(mysql_query("SELECT FOUND_ROWS()"), 0); // количество строк данных в таблице, или не?
$num_page=ceil($num_rows/$num); //количество страниц, округляем их
if(!isset($page) or empty($page) or $page>$num_page){$page=1;} // типа защита от нубов и вычисление первой страницы
$str=array();
$get_q='';
if($get=='yes') // нахрен?
{
foreach($_GET as $k => $v) // это не сильно понял, и то что ниже
{
if($k!='page')
{
if(is_array($v))
{
foreach($v as $val)
{
$get_q.=$k.'[]='.urlencode($val).'&';
}
}else{
$get_q.=$k.'='.urlencode($v).'&';
}
}
}
}
for($i=1;$i<=$num_page;$i++)
{
$str[]=($i!=$page) ? "<a href=\"?".$get_q."page=".$i."\">".$i."</a>" : "<b>".$i."</b>";
}
return $str;
}[/php]

Пример использования:
[php]$rows_page=25; // количество строк из БД на странице
if(!isset($_GET['page']) or !(int)$_GET['page']){$_GET['page']=1;}
$query=mysql_query("select SQL_CALC_FOUND_ROWS * from table limit ".(($_GET['page']-1)*$rows_page).", ".$rows_page);
$count_page=num_page($_GET['page']);
echo "<br>Страницы: ".implode(', ',$count_page);[/php]


Поблагодарили: (1)
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
WorkOnFood
WorkOnFood
сообщение 22.5.2011, 18:28; Ответить: WorkOnFood
Сообщение #2


Не понятно зачем строчка if(!isset($_GET['page']) or !(int)$_GET['page']){$_GET['page']=1;}, исползуется в примере использования если уже есть строчка if(!isset($page) or empty($page) or $page>$num_page){$page=1;} в самой функции. if($get=='yes') - действительно не понятно зачем. FOUND_ROWS() применяется в связке с использованным до него SQL_CALC_FOUND_ROWS для подсчета общего количества записей в таблице, при использовании limit в запросе.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 31.5.2011, 23:25; Ответить: ZiTosS
Сообщение #3


Banderas, функция приведенная тобой тупо формирует ссылки на страницы (не забывает и текущие get-параметры заново в ссылку запихнуть):
[php]function num_page($page,$num='',$get='yes')
{
global $rows_page; // количество данных на страницу
$num=(empty($num)) ? $rows_page : $num; // можно переопределить количество данных на страницу, если второй параметр передан
$num_rows=mysql_result(mysql_query("SELECT FOUND_ROWS()"), 0); // общее количество данных в таблице БД (без лимита)
$num_page=ceil($num_rows/$num); //Определяем сколько у нас получается страниц, округляем до большего (если до меньшего -> не учтем последние записи неполной страницы)
if(!isset($page) or empty($page) or $page>$num_page){$page=1;} // если $page == 0 или не существует (тут этого не случится, параметр обязательный) или привысили общее количество страниц - скидываем на первую
$str=array(); // здесь будут храниться сформированные ссылки на страницы + текущая
$get_q=''; // здесь будет сформированная строка со всеми GET-параметрами текущей страницы (для сохранения передаваемых GET-параметров, допустим у нас на них заданы подключения модулей)

// если параметр -> формировать строку с GET-параметрами
if($get=='yes')
{
// перебираем весь массив GET-параметров с текущей страницы (ключ => значение)
foreach($_GET as $k => $v)
{
// page нам напфиг не нужно, его формирует данная функция, а все остальные обрабатываем и формируем строку запроса
if($k!='page')
{
// если параметр - массив (да... в get можно передавать массивы - ?param[]=...&param[]=...)
if(is_array($v))
{
// обходим все элементы массива параметра (например param)
foreach($v as $val)
{
$get_q.=$k.'[]='.urlencode($val).'&'; // добавляем на каждой итерации - key[]=value&
}
}else{
// если не массив
$get_q.=$k.'='.urlencode($v).'&'; // добавляем key=value&
}
}
}
}

// формируем ссылки на страницы с 1-ой по последнюю
for($i=1;$i<=$num_page;$i++)
{
$str[]=($i!=$page) ? "<a href=\"?".$get_q."page=".$i."\">".$i."</a>" : "<b>".$i."</b>"; // если не текущая - ссылка, если текущая - выделяем жирным
}
return $str; // возвращаем массив с ссылками + текущая страница
}[/php]

Всё тривиально :(
SELECT FOUND_ROWS()

Возвращает количество записей из предыдущего запроса SELECT без учета LIMIT (счетаем все записи). Но для использования данной функции в предыдущем запросе после слова SELECT должно идти - SQL_CALC_FOUND_ROWS

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.


Поблагодарили: (0)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Интеграция спортивных данных API. Коэффициенты БК, Live результаты
15 yaroslav89 6820 8.4.2024, 17:17
автор: spoyer_ru
Горячая тема (нет новых ответов) Ручной обмен, ввод/вывод электронных валют | ЮMoney, WMZ, Крипта, Приват, Монобанк | Низкие комиссии, минимальные суммы сделок
быстро, удобно, по доступному курсу
200 Sostavitel 98127 11.2.2024, 21:07
автор: Wolfhound
Открытая тема (нет новых ответов) ГОРЯЧИЕ FOREX|CRYPTO ЛИДЫ. БАЗЫ ДАННЫХ
[Чарджбек|Рекавери|Возврат]
9 Leado 3886 9.2.2024, 16:04
автор: baza0013
Открытая тема (нет новых ответов) Sbitcoin.ru – Ввод, Вывод, Обмен: Qiwi, YD, Btc, Btc-e, PM, Cash IN, PR24, MG, WU, Нал (RU, UA).
9 sbitcoinru 6780 10.10.2023, 19:25
автор: Sbitcoin
Горячая тема (нет новых ответов) Обмен WebMoney - Яндекс - QIWI. Вывод/ввод Приват24 UAH
225 himin 132794 7.5.2023, 13:26
автор: Вера_Симонова


 



RSS Текстовая версия Сейчас: 16.4.2024, 11:47
Дизайн