Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Постраничный вывод


Автор: Osrus 13.12.2004, 01:31
Данный скрипт выводит сообщения из текстового файла.
Можно ли устроить код таким образом, чтобы на странице выводились не все сообщения, например только 10? При этом, чтобы посмотреть следующие 10 нужно нажать next и т.д.?
Сложно ли сделать такой код и стоит ли? Мне иинтересно ваше мнение...

Код

<?php
$text_of_file=join('',file('textnews.dat'));
$message_array=explode('<>',$text_of_file);
$message_array=array_reverse($message_array);
foreach ($message_array as $message){
echo "<table border=0 width=500 align=center><tr><td>$message</td></tr></table><br>";
}
?>

Автор: penizillin 13.12.2004, 03:14
можно заменить foreach на for и отображать элементы с индексом между x и x+10. x передавать в url.

Автор: Osrus 13.12.2004, 12:09
Цитата(penizillin @ 13.12.2004, 03:14)
можно заменить foreach на for и отображать элементы с индексом между x и x+10. x передавать в url.

А чуть поподробнее млжно ... желательно с примером
$message_array as $message это массив сообщениея? что значит as message?

Автор: Opik 13.12.2004, 12:15
Цитата
$message_array as $message

$message_array - массив
as $message - как один элемент массива.
А чуть поподробнее млжно - можно smile
Код
$size_of_array = sizeof($message_array);
for($i=0; $i<$size_of_array;$i++){
print $message_array[$i];
}

что бы показывало след страницу надо вместо $i = 0, присвоить этой переменной значение 10 и т.д.

Автор: IZ@TOP 13.12.2004, 14:26
А в ФАКе посмотреть? Там есть пример как сделать постраничный вывод.

Автор: Osrus 13.12.2004, 22:17
IZ@TOP
Opr
penizillin
Премного Благодарствую... Наконец-то с вашей и божьей помощью доделал что хотел.
Чисто в познавательныйх целях мне интересно "i" обозначает количество символов выводимых на странице, али же строк? Или я ошибаюсь? Просто если поствить i=5 и ввести два сообщения, то сообщений видно не будет...

Автор: Opik 13.12.2004, 22:30
Osrus
i - текущая запись в массиве, ты просто сделай прерку, если $i больше чем всего - пишем, что не найдено или чего го то там))

Автор: Osrus 13.12.2004, 23:45
Opr
Так если я не ошибаюсь
Код

$size_of_array = sizeof($message_array);
for($i=1; $i<$size_of_array;$i++){
if($i<10){
print "<font color=000000><center> $message_array[$i]</center></font>";
}
Похоже на правду? Вроде работает ...
А еще с переходом на другую страницу не подскажете как лучше сделать... Типа просмотреть следующие

Автор: Opik 13.12.2004, 23:55
Osrus
Нет.
Код

$size_of_array = sizeof($message_array);
for($i=1; $i<$size_of_array;$i++){
if($i>$size_of_array){ 'nety' } else {
print "<font color=000000><center> $message_array[$i]</center></font>";
}
}

Автор: Osrus 14.12.2004, 00:16
Opr Только мой тож работает я протестировал - выводит последние 9 сообщений
А твой наоборот не выводит указанное число, остальные выводит
+ тут еще реверс стоит $size_of_array = sizeof($message_array);
Переход к следующим сообщениям можно сделать?

Код

$size_of_array = sizeof($message_array);
for($i=1; $i<$size_of_array;$i++){
if($i<+10){
print "<font color=000000><center> $message_array[$i]</center></font>";
}
"+" Забыл

Автор: penizillin 14.12.2004, 02:04
Код
$size_of_array = sizeof($message_array);
$first = intval($_GET["first"]); //например
$last = $first + 10;

for($i=$first; $i<$last;$i++){
   if(isset($message_array[$i])){
       echo($message_array[$i]);
   }
}


опять-же, это один из семи-восьми возможных вариантов.

Автор: Osrus 14.12.2004, 03:05
smile И все-таки, как сделать переход на другие десять, чтобы предыдущие не показывались

Автор: penizillin 14.12.2004, 03:14
передавать в url переменную first=10

Автор: Eretik 14.12.2004, 03:27
Я вообще сам новичок, но может можно так:
Код

$text_of_file=join('',file('textnews.dat'));
$message_array=explode('<>',$text_of_file);

$messages_to_page = 10; //сколько сообщений на страницу
$current_page = (isset($_GET['page'])) ? $_GET['page'] : 0; //номер текущей страницы, переданный в адресной строке броузера (если не передан, то 0)
$size_of_array = sizeof($message_array); //всего сообщений
$pages_count = ceil($size_of_array/$messages_to_page); //количество страниц

//создаём переменную page_link, где будут ссылки на пред. и след. страницу
switch($current_page) {
case $pages_count -1: {
 $page_link = ($current_page == 0) ? '' : '<a href="?page='.($current_page-1).'">Предыдущая страница</a>';
 break;
}
case '0': {
 $page_link = ($current_page == $pages_count - 1) ? '' : '<a href="?page='.($current_page+1).'">Следующая страница</a>';
 break;
}
default: {
 $page_link = '<a href="?page='.($current_page-1).'">Предыдущая страница</a> | <a href="?page='.($current_page+1).'">Следующая страница</a>';
}
}

//считаем с какого по какое сообщение выводить на эту страницу (переменные start и end соответственно)
if(($current_page * $messages_to_page > 1) && ($current_page * $messages_to_page < $size_of_array)) {
$start = $current_page * $messages_to_page;
if($current_page * $messages_to_page + $messages_to_page > $size_of_array) {
 $end = $size_of_array;
} else {
 $end = $current_page * $messages_to_page + $messages_to_page;
}
} else {
$start = 0;
$end = ($messages_to_page > $size_of_array) ? $size_of_array : $messages_to_page;
}
//и выводим эти сообщения
while($start < $end) {
echo "<font color=#000000><center> $message_array[$start]</center></font>";
$start++;
}
//и ссылки выводим
echo $page_link;


Основа из топика "то, что должен знать каждый о php". Попытался изменить немного, может это и неэффективно, может можно гораздо проще и короче? Но так вроде работает!

Автор: Osrus 14.12.2004, 03:40
передавать в url переменную first=10
Извиняюсь... Я наверное не так выразился... Чтобы на этой же странице при нажатии появлялись след 10 и т.д.

Спасибо всем

Автор: Osrus 14.12.2004, 03:51
Eretik

Именно оно... Пойду почитаю "курс молодого бойца"

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)