постраничная навигация,нужна помощь

1. Facecontrol (20.02.2011 / 19:17)
С помощью каких функций,строится самая простейшая постраничная навигация файла.Расскажите пожалуйста,или если можно пример простой навигации.А я попробую разобраться...

2. KOZZ (20.02.2011 / 19:38)
вот что я использую в своих скриптах. ну мне так удобнее:
<?
$arr = range(0,500); // допустим, это массив каких - то данных, а этом случае - массив чисел от 0 до 500
$c = count($arr); // количество элементов
$onpage = 10; // количество элементов на страницу

// теперь напишем простейшую функцию для подсчета стартовой и конечной позиций постраничной навигации
function navigation($p,$onpage,$count){
#p - номер страницы
#onpage - количество элементов на траницу
#count - количетво элементов всего

$pages = (int) ceil($count / $onpage); # всего страниц
$start = (int) ($p-1) * $onpage; # стартовая позиция
$end = (int) ($p * $onpage); # конечная позиция
$end = ($end<=0) ? $end=1 : $end; # обрабатываем конечную позицию, чтобы она была больше 0, иначе могут совпасть стартовая и конечная позиции, и будет ошибка

return array('start'=>$start,'end'=>$end,'pages'=>$pages);
}
// функция возвращает массив с ключами start, end и pages
//теперь посмотрим функцию в действии:

$page = (isset($_GET['page'])) ? abs(intval($_GET['page'])) : 1; // $_GET параметр номера страницы (чтобы обращаться так: http://site.ru/script.php?page=10)
$nav = navigation($page,$onpage,$c); // собираем данные которые возвратит функция в переменную $nav

for($i=$nav['start'];$i<=$nav['end'];$i++){ // цикл перебирает все значение от $nav['start'] до $nav['end']
if(array_key_exists($page,$arr)){ // если существует такой элемент в массиве - выводим его на экран, если нет - пишем ошибку
echo $arr[$page].'<br/>';
} else {echo 'error';}
}


if($nav['pages']>1){ // если страниц больше одной - выводим ссылки назад / далее

if($p>1) {echo '<a href="?page='.($p-1).'">Назад</a> ';}
if($p!=$nav['pages']) {echo ' <a href="?page='.($p+1).'">Далее</a>';}

}

?>

Добавлено через 04:20 сек.
надо будет проверить на ошибки код, и добавить в статью сюда )

3. Facecontrol (20.02.2011 / 23:37)
2. Ботаник eGo, а можешь мне объяснить,зачем нужна функция rаngе() ато я пхп можно сказать только начал учить,и поэтому ещё плохо соображаю что и как.Я прочитал что она нужна для создания массива,содержащий диапазон элементов.Как это понять?И откуда ты взял переменную $p и $count ведь $p у тебя вообще нигде не задана а функция count($аrr) у тебя присвоена переменной $c.Или может я что то неправильно понял,или ты ошибся может?

4. KOZZ (21.02.2011 / 06:49)
3. Facecontrol, автор, пройдись по http://php.su/lessons для начала
без этих основ с тобой в принципе не о чем разговаривать, а тупо тыкать носом в мануалы

5. Facecontrol (21.02.2011 / 14:23)
Да я то читал,просто всё равно не могу понять,как этим переменным,передаются параметры?

6. Ден (21.02.2011 / 14:25)
http://wepsik.ru/postranichnaya-navigaciya-phpmysql

7. Facecontrol (21.02.2011 / 14:33)
if($p>1) {echo '<a href="?page='.($p-1).'">Назад</a> ';}
if($p!=$nav['pages']) {echo ' <a href="?page='.($p+1).'">Далее</a>';}
}
здесь гдето ошибка

8. Ден (21.02.2011 / 15:15)
7, что за ошибка хоть?

9. Денис (21.02.2011 / 17:55)
http://thiswap.com/2010/12/13/funkciya-postranichnoj-navigacii-phpmysql/

10. Facecontrol (21.02.2011 / 18:22)
8. PаRaDoKs, ошибка в том что вместо $p надо $pаgе ставить в тех строках,ато ссылки назад и далее не работают.

11. Facecontrol (21.02.2011 / 19:27)
Так что кто сможет помочь?

12. Денис (22.02.2011 / 00:29)
выше ссылку ведь дал

13. Facecontrol (22.02.2011 / 09:19)
Там навигашка с мускулом,а мне бы без мускула для начала

14. Facecontrol (23.02.2011 / 08:33)
Помогите,пытался сам написать навигацию,но где то есть ошибки,подскажите где и как исправить
<?
$arr=file('file.php');//помешаю файл в массив
$carr=count($arr);//считаю количество элементов
$collpage=1;//Количество элементов на станицу
$page = (isset($_GET['page']));//определяю страницу
$i=0;//первый элемент
$ot=$i*$collpage;//от которого выводить
$do=$ot*$coolpage;//до которого выводить
if(count($arr[]) =>$do)
{
echo $do;
}//дальше хочу сделать ссылки назад и далее:
if($page['pages']>1)
{
if($page>1)
{
echo '<a href="?page='.($page-1).">назад</a>';
}
if($page<=1['pages'])
{ //дальше где то ошибка в '=' я уже всё перепробовал:
echo '<a href="?page='.($page+1).">далее</a>';
}
}
?>


15. Марсель (23.02.2011 / 08:39)
'.($page+1)."

16. Виталий (23.02.2011 / 11:36)
<?php
$start = (isset($_GET['start'])) ? (int)$_GET['start'] : 0;
$a = 10; # Количество элементов на страницу
$file = file("file.dat");
$total = count($file);
if ($start >= $total || $start < 0) {
$start = 0;
} 
if ($total < $start + $a) {  
$d = $total;  
} else {  
$d = $start + $a;
}
for ($i = $start; $i < $a; $i++) { 
echo $file[$i].'<br />';
}
if ($start != 0) {
echo '<a href="test.php?start='.($start - $d).'&amp;'.SID.'"><-Назад</a> ';
 } else {
 echo '<-Назад';
 }
echo ' | ';
if ($total > $start + $d) {
echo '<a href="test.php?start='.($start + $d).'&amp;'.SID.'">Далее-></a>';
 } else {
 echo 'Далее->';
 }
?>
Должно работать, не проверял!

17. Facecontrol (24.02.2011 / 17:41)
Так а с моим кодом кто нибудь может помочь?

18. Facecontrol (02.03.2011 / 20:52)
CUl5-AJIb9lHC (23 Февраля 2011 / 10:36)
<?php
$start = (isset($_GET['start'])) ? (int)$_GET['start'] : 0;
$a = 10; # Количество элементов на страницу
$file = file("file.dat");
$total = count($file);
if ($start >= $total || $start < 0) {
$start = 0;
} 
if ($total < $start + $a) {  
$d = $total;  
} else {  
$d = $start + $a;
}
for ($i = $start; $i < $a; $i++) { 
echo $file[$i].'<br />';
}
if ($start != 0) {
echo '<a href="test.php?start='.($start - $d).'&amp;'.SID.'"><-Назад</a> ';
 } else {
 echo '<-Назад';
 }
echo ' | ';
if ($total > $start + $d) {
echo '<a href="test.php?start='.($start + $d).'&amp;'.SID.'">Далее-></a>';
 } else {
 echo 'Далее->';
 }
?>
Должно работать, не проверял!
Странно как то он работает,сначала выводит 10 символов,потом 9,потом 8,потом 7 и т.д.Потом пустая станица с ссылками,это как исправить?

19. Facecontrol (02.03.2011 / 23:53)
Ну что поможете?

20. Facecontrol (03.03.2011 / 23:58)
Помогите пожалуйста

21. Виталий (04.03.2011 / 06:14)
<?php
$start = (isset($_GET['start'])) ? (int)$_GET['start'] : 0;
$a = 10; # Количество элементов на страницу
$file = file("file.dat");
$total = count($file);
if ($start >= $total || $start < 0) {
$start = 0;
}
if ($total < $start + $a) {
$d = $total;
} else {
$d = $start + $a;
}
for ($i = $start; $i < $d; $i++) {
echo $file[$i].'<br />';
}
if ($start != 0) {
echo '<a href="test.php?start='.($start - $d).'&amp;'.SID.'"><-Назад</a> ';
} else {
echo '<-Назад';
}
echo ' | ';
if ($total > $start + $d) {
echo '<a href="test.php?start='.($start + $d).'&amp;'.SID.'">Далее-></a>';
} else {
echo 'Далее->';
}
?>
вот так правильно будет работать D

22. Facecontrol (04.03.2011 / 14:06)
21. CUl5-AJIb9lHC, спасибо всё правильно работает,теперь буду разбираться что и как,и пробовать что нибудь изменять.

23. Facecontrol (06.03.2011 / 19:08)
Я тут код немного подправил,и изменил его так,чтоб выводились ссылки в виде цифр.Посмотрите пожалуйста,и подскажите какие есть ошибки?
<?
$start = (isset($_GET['start'])) ? (int)$_GET['start'] : 0;
$a = 4; # Количество элементов на страницу
$file = file("file.php");
$total = count($file);
$kolpage=ceil($total/$a);
if ($start >= $total || $start < 0) {
$start = 0;
}
if ($total < $start + $a) {$d=$total;} 
else {$d = $start + $a;}
for ($i = $start; $i < $d; $i++) 
{echo htmlspecialchars($file[$i]).'<br />';}
$c=0;while($c<=$kolpage) {echo '<a href="test.php?start='.($c+$i).'">'.$c.'</a>';$c++;}
?>


24. Facecontrol (06.03.2011 / 23:25)
Так что скажете?

URL: https://visavi.net/topics/18960