навигация

Разработка своих веб-приложений и страничек

навигация

Сообщение dll » 23 дек 2009, 04:36

исходники постраничной навигации самый упрощённый вариант - есть ваши варианты?
nav.JPG
nav.JPG (1.47 Кб) Просмотров: 14419
Изображение
Изображение
Аватара пользователя
dll
Активный участник
 
Сообщения: 179
Зарегистрирован: 17 сен 2008, 11:57
Домен: 3ngels.vfose.ru

Re: навигация

Сообщение Eugeene » 23 дек 2009, 21:03

$records - всего записей
$r_start - текущая страница
$URL - адрес, заканчивающийся на "="
$inpage - записей на страницу

Код: Выделить всёРазвернуть
<?php
function LeftRight
($records,$r_start,$URL,$inpage) {
    $str="";

    if ($records<=$inpage) return;
    if ($r_start!=0) {
        $str.="<a href=".$URL."0>&lt;&lt</a> ";
        $str.="<a href=$URL".($r_start-1).">&lt;</a> ";
        }
    else $str.="&lt;&lt &lt; ";

    if ($r_start==0) {$sstart=$r_start-0;$send=$r_start+10;}
    if ($r_start==1) {$sstart=$r_start-1;$send=$r_start+9;}
    if ($r_start==2) {$sstart=$r_start-2;$send=$r_start+8;}
    if ($r_start==3) {$sstart=$r_start-3;$send=$r_start+7;}
    if ($r_start==4) {$sstart=$r_start-4;$send=$r_start+6;}
    if ($r_start>=5) {$sstart=$r_start-5;$send=$r_start+5;}

    if ($send*$inpage>$records) $send=$records/$inpage;
    if ($sstart<0) $sstart=0;

    if ($records%$inpage==0) $add=0; else $add=1;

    for ($i=$sstart;$i<$send;$i++) {
        if ($i==$r_start) $str.=" <B>".($i+1)."/".(intval($records/$inpage)+$add)."</B> | ";
        else $str.="<a href=$URL".($i)."><U><B>".($i+1)."</B></U></a> |  ";
        }

    if ($r_start+(1-$add)<intval($records/$inpage)) {
        $str.=" <a href=$URL".($r_start+1).">&gt;</a>";
        $str.=" <a href=$URL".(intval($records/$inpage)-(1-$add)).">&gt;&gt;</a>";
        }
    else $str.=" &gt; &gt;&gt";
    return($str);
    }

// Пример вызова

print "<center>".LeftRight(567,43,"index.htm?start=",20)."</center>";

?>
Eugeene
Начинающий участник
 
Сообщения: 16
Зарегистрирован: 24 авг 2009, 19:29

Re: навигация

Сообщение Костик » 23 дек 2009, 21:30

тогда уж лучше назвать - постраничная навигация или разбиение на страницы :)
FreeBSD 9.2 and Fedora 18 user
Аватара пользователя
Костик
Активный участник
 
Сообщения: 1944
Зарегистрирован: 03 сен 2007, 02:15

Re: навигация

Сообщение Eugeene » 23 дек 2009, 22:12

Еще можно вот так сделать
Код: Выделить всёРазвернуть
<?php
$total_articles_number 
= 79;   //общее количество статей
$articles_per_page=10; // количество статей на странице
//получаем количество страниц
$total_pages = ceil($total_articles_number/$articles_per_page);


// запускаем цикл - количество итераций равно количеству страниц
for ($i=0; $i<$total_pages; $i++)
{
// получаем значение $from (как $page_number) для использования в формировании ссылки
$page_number=$i*$articles_per_page;
// если $page_number (фактически это проверка того является ли $from текущим) не соответствует
// текущей странице,
// выводим ссылку на страницу со значением $from равным $page_number
if ($page_number!=$from) echo "<a href='".$PHP_SELF."?from=".$page_number."'> ".($i+1).
    " </a>";
// иначе просто выводим номер страницы - данная строка необязательна,
// пропустив ее вы просто получите линк на текущую страницу 
else echo $i+1; // если page_number - текущая страница - ничего не выводим (ссылку не делаем)
}
?>

Таким образом, на экране браузера мы получили что-то вроде "1 2 3 4 5 6 7 8", при этом URL (при выбранной третьей "странице") выглядит так: http://localhost/ep/ep.php?from=20. Обратите внимание, на то, что странице под номером "3" соответствует значение from=20 то есть отсчет выводимых статей будет вестись в данном случае с 20-й. Т.е. при $from=20 выведутся страницы с 21 по 30 (это также зависит от реализации вывода и значения переменной $articles_per_page)
Eugeene
Начинающий участник
 
Сообщения: 16
Зарегистрирован: 24 авг 2009, 19:29

Re: навигация

Сообщение dll » 24 дек 2009, 01:53

Спасибо за дельный ответ
Изображение
Изображение
Аватара пользователя
dll
Активный участник
 
Сообщения: 179
Зарегистрирован: 17 сен 2008, 11:57
Домен: 3ngels.vfose.ru

Re: навигация

Сообщение dll » 24 дек 2009, 02:02

Костик писал(а):тогда уж лучше назвать - постраничная навигация или разбиение на страницы :)

ну так в первом посте я спросил как проще сделать постраничную навигацию )
Изображение
Изображение
Аватара пользователя
dll
Активный участник
 
Сообщения: 179
Зарегистрирован: 17 сен 2008, 11:57
Домен: 3ngels.vfose.ru

Re: навигация

Сообщение dll » 25 дек 2009, 19:19

а что например из того что все идентификаторы страниц находятся в БД
можно пару упрощённых примеров с взаимодействием mysql ?
Изображение
Изображение
Аватара пользователя
dll
Активный участник
 
Сообщения: 179
Зарегистрирован: 17 сен 2008, 11:57
Домен: 3ngels.vfose.ru

Re: навигация

Сообщение Eugeene » 27 дек 2009, 00:25

Код: Выделить всёРазвернуть
<?php 
// Устанавливаем соединение с базой данных 
include "config.php"
// Переменная хранит число сообщений выводимых на станице 
$num 25
// Извлекаем из URL текущую страницу 
$page $_GET['page']; 
// Определяем общее число сообщений в базе данных 
$result mysql_query("SELECT COUNT(*) FROM post"); 
$posts mysql_fetch_row($result); 
// Находим общее число страниц 
$total intval(($posts 1) / $num) + 1
// Определяем начало сообщений для текущей страницы 
$page intval($page); 
// Если значение $page меньше единицы или отрицательно 
// переходим на первую страницу 
// А если слишком большое, то переходим на последнюю 
if(empty($page) or $page 0$page 1
  if(
$page $total$page $total
// Вычисляем начиная к какого номера 
// следует выводить сообщения 
$start $page $num $num
// Выбираем $num сообщений начиная с номера $start 
$result mysql_query("SELECT * FROM post LIMIT $start, $num"); 
// В цикле переносим результаты запроса в массив $postrow 
while ( $postrow[] = mysql_fetch_array($result)) 
?>

На этом первая часть закончена. Двумерный массив postrow хранит все поля таблицы post, необходимые для отображения станицы. Вот пример как можно организовать вывод сообщений.
Код: Выделить всёРазвернуть
<?php 
echo "<table>"
for(
$i 0$i $num$i++) 

echo 
"<tr> 
         <td>"
.$postrow[$i]['name']."</td> 
         <td>"
.$postrow[$i]['time']."</td></tr> 
       <tr><td colspan=\"2\">"
.$postrow[$i]['text']."</td></tr>"

echo 
"</table>"
?>

Теперь надо организовать навигацию. Формируем составляющие будущей навигации.
Коды стрелки «в начало» и «назад» поместим в одну переменную, также поступим и со стрелками «в конец» и «вперед».
Код: Выделить всёРазвернуть
<?php 
// Проверяем нужны ли стрелки назад 
if ($page != 1$pervpage '<a href= ./page?page=1><<</a> 
                               <a href= ./page?page='
. ($page 1) .'><</a> '
// Проверяем нужны ли стрелки вперед 
if ($page != $total$nextpage ' <a href= ./page?page='. ($page 1) .'>></a> 
                                   <a href= ./page?page=' 
.$total'>>></a>'

// Находим две ближайшие станицы с обоих краев, если они есть 
if($page 0$page2left ' <a href= ./page?page='. ($page 2) .'>'. ($page 2) .'</a> | '
if(
$page 0$page1left '<a href= ./page?page='. ($page 1) .'>'. ($page 1) .'</a> | '
if(
$page <= $total$page2right ' | <a href= ./page?page='. ($page 2) .'>'. ($page 2) .'</a>'
if(
$page <= $total$page1right ' | <a href= ./page?page='. ($page 1) .'>'. ($page 1) .'</a>'

// Вывод меню 
echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage

?>

© php.su
Eugeene
Начинающий участник
 
Сообщения: 16
Зарегистрирован: 24 авг 2009, 19:29

Re: навигация

Сообщение dll » 27 дек 2009, 16:25

отлично, спасибо Eugeene.
Изображение
Изображение
Аватара пользователя
dll
Активный участник
 
Сообщения: 179
Зарегистрирован: 17 сен 2008, 11:57
Домен: 3ngels.vfose.ru

Re: навигация

Сообщение Lundil » 29 дек 2009, 00:43

dll писал(а):а что например из того что все идентификаторы страниц находятся в БД
можно пару упрощённых примеров с взаимодействием mysql ?

$table='table1'
mysql_query('Drop table '.$table1.';');

Удачи!
Аватара пользователя
Lundil
Активный участник
 
Сообщения: 330
Зарегистрирован: 31 окт 2007, 10:41
Откуда: Саратов
Домен: http://mcsar.ru

След.

Вернуться в PHP, HTML, CSS...

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32