Постраничный вывод из файла
Одна строка в файле=одной новости...
вот код, который выводит все новости на одной странице:
Код:
$file = file($ndata);
$file = array_reverse($file);
Error_Reporting(E_ALL & ~E_NOTICE);
for ($i = 0; $i < count($file); $i++)
{
$mess = explode("|",$file[$i]);
echo "".$mess[1]."
";
echo "[size="1"]Написал: ".$mess[0]." @ ".$mess[2]."[/size]<HR size=1 noshade color=#FF9900 width=300 align=left>
";
}
$file = array_reverse($file);
Error_Reporting(E_ALL & ~E_NOTICE);
for ($i = 0; $i < count($file); $i++)
{
$mess = explode("|",$file[$i]);
echo "".$mess[1]."
";
echo "[size="1"]Написал: ".$mess[0]." @ ".$mess[2]."[/size]<HR size=1 noshade color=#FF9900 width=300 align=left>
";
}
Цитата:
Originally posted by SumroK
Как организовать постраничный вывод новостей из файла.
Одна строка в файле=одной новости...
вот код, который выводит все новости на одной странице:
Как организовать постраничный вывод новостей из файла.
Одна строка в файле=одной новости...
вот код, который выводит все новости на одной странице:
Код:
$file = file($ndata);
$file = array_reverse($file);
Error_Reporting(E_ALL & ~E_NOTICE);
for ($i = 0; $i < count($file); $i++)
{
$mess = explode("|",$file[$i]);
echo "".$mess[1]."
";
echo "[size="1"]Написал: ".$mess[0]." @ ".$mess[2]."[/size]<HR size=1 noshade color=#FF9900 width=300 align=left>
";
}
$file = array_reverse($file);
Error_Reporting(E_ALL & ~E_NOTICE);
for ($i = 0; $i < count($file); $i++)
{
$mess = explode("|",$file[$i]);
echo "".$mess[1]."
";
echo "[size="1"]Написал: ".$mess[0]." @ ".$mess[2]."[/size]<HR size=1 noshade color=#FF9900 width=300 align=left>
";
}
Щас попробуем...
Код:
$file = file($ndata);
$file = array_reverse($file);
$step = 5 // количество сообщений на странице
// вычисляем номера страниц
$allpages = floor ( count ( $file ) / $step ) + 1;
isset ( $HTTP_GET_VARS [ "page" ] )
? $page = 0
: $page = $HTTP_GET_VARS [ "page" ];
if (! ( ( $page > 0 ) && ( $page < $allpages) ) ){ // входит ли страница в диапазон допустимых
$page = 1;
}
// $page - номер страницы
for ($i = $page * $step; $i < $page * $step + 5; $i++)
{
$mess = explode("|",$file[$i]);
echo "".$mess[1]."
";
echo "[size="1"]Написал: ".$mess[0]." @ ".$mess[2]."[/size]<HR size=1 noshade color=#FF9900 width=300 align=left>
";
}
// выводим все странички внизу
for ( $i = 0; $i < $allpages + 1; $i++){
if ( $i != $page ){
print "$i";
}
else {
print "$page";
};
};
$file = array_reverse($file);
$step = 5 // количество сообщений на странице
// вычисляем номера страниц
$allpages = floor ( count ( $file ) / $step ) + 1;
isset ( $HTTP_GET_VARS [ "page" ] )
? $page = 0
: $page = $HTTP_GET_VARS [ "page" ];
if (! ( ( $page > 0 ) && ( $page < $allpages) ) ){ // входит ли страница в диапазон допустимых
$page = 1;
}
// $page - номер страницы
for ($i = $page * $step; $i < $page * $step + 5; $i++)
{
$mess = explode("|",$file[$i]);
echo "".$mess[1]."
";
echo "[size="1"]Написал: ".$mess[0]." @ ".$mess[2]."[/size]<HR size=1 noshade color=#FF9900 width=300 align=left>
";
}
// выводим все странички внизу
for ( $i = 0; $i < $allpages + 1; $i++){
if ( $i != $page ){
print "$i";
}
else {
print "$page";
};
};
Убери error_reporting, пусть все ошибки, что есть, пишет.
9. $allpages = floor ( count ( $file ) / $step ) + 1;
Код:
$step = 5;
$allpages = floor ( count ( $file ) / $step ) + 1;
$allpages = floor ( count ( $file ) / $step ) + 1;
Deus ex...
1. Страницы не переключаются(хотя в строке адреса значение переменной page меняется), т.е. постоянно активная ссылка 1 , а если я кликаю на 2, то остается прежнее...
2. Новости на всех страницах выводятся только с с 7 по 11...
НУ КТО-НИТЬ ПОМОГИТЕ!!
очень не хочется искать баг в твоем коде, посмотри вот это описание, может поможет
Код:
function getPages($total, $page, $link, $perpage) {
$mpp = $perpage;
$prev_page = $page - 1;
$next_page = $page + 1;
if ($total <= $mpp) $pages = 1;
elseif($total % $mpp == 0) $pages = $total / $mpp;
else $pages = $total / $mpp + 1;
$pages = (int) $pages;
$s_pages = $page<10 ? 1 : floor($page / 10) * 10;
$e_pages = $page + 9;
if ($e_pages > $pages) {
$e_pages = $pages;
}
$s = "";
if($prev_page != 0) $s = "<a href=\"".$link."page=1\"><<</a> \n";
if($prev_page) {
$s .= "<a href=\"".$link."page=$prev_page\"><</a> \n";
}
for($i=$s_pages;$i<=$e_pages;$i++) {
if ($i != $page) {
$s .= "<a href=\"".$link."page=$i\">$i</a> \n";
} elseif ($i != 1) {
$s .= " $i ";
} elseif ($page != $pages) {
$s .= " 1 ";
}
}
if($page != $pages) {
$s .= "<a href=\"".$link."page=$next_page\">></a> \n";
$s .= "<a href=\"".$link."page=$pages\">>></a> \n";
}
return $s;
}
if(!isset($page)) $page = 1;
$dat=file($ndata);
$dat=array_reverse($dat);
$pp = 5; // Сколько на страницу
$total = sizeof($dat); // Всего записей
$res = intval($total / $page);
$rem = $total % $page;
if($rem > 0) { $res++; }
$pages = $res; // кол-во страниц
$npst = ($page-1)*$pp;
$print_pages = getPages($total, $page, "index.php?", $pp);
print 'pages: '.$print_pages.'
';
for($i=$npst;$i<($npst+$pp);$i++) {
$news = explode("|",$dat[$i]);
echo "".$news[1]."
";
echo "[size="1"]Написал: ".$news[0]." @ ".$news[2]."[/size]<HR size=1 noshade color=#FF9900 width=300 align=left>
";
}
$mpp = $perpage;
$prev_page = $page - 1;
$next_page = $page + 1;
if ($total <= $mpp) $pages = 1;
elseif($total % $mpp == 0) $pages = $total / $mpp;
else $pages = $total / $mpp + 1;
$pages = (int) $pages;
$s_pages = $page<10 ? 1 : floor($page / 10) * 10;
$e_pages = $page + 9;
if ($e_pages > $pages) {
$e_pages = $pages;
}
$s = "";
if($prev_page != 0) $s = "<a href=\"".$link."page=1\"><<</a> \n";
if($prev_page) {
$s .= "<a href=\"".$link."page=$prev_page\"><</a> \n";
}
for($i=$s_pages;$i<=$e_pages;$i++) {
if ($i != $page) {
$s .= "<a href=\"".$link."page=$i\">$i</a> \n";
} elseif ($i != 1) {
$s .= " $i ";
} elseif ($page != $pages) {
$s .= " 1 ";
}
}
if($page != $pages) {
$s .= "<a href=\"".$link."page=$next_page\">></a> \n";
$s .= "<a href=\"".$link."page=$pages\">>></a> \n";
}
return $s;
}
if(!isset($page)) $page = 1;
$dat=file($ndata);
$dat=array_reverse($dat);
$pp = 5; // Сколько на страницу
$total = sizeof($dat); // Всего записей
$res = intval($total / $page);
$rem = $total % $page;
if($rem > 0) { $res++; }
$pages = $res; // кол-во страниц
$npst = ($page-1)*$pp;
$print_pages = getPages($total, $page, "index.php?", $pp);
print 'pages: '.$print_pages.'
';
for($i=$npst;$i<($npst+$pp);$i++) {
$news = explode("|",$dat[$i]);
echo "".$news[1]."
";
echo "[size="1"]Написал: ".$news[0]." @ ".$news[2]."[/size]<HR size=1 noshade color=#FF9900 width=300 align=left>
";
}
Вот я спер чъю-то функцию getPages() и поработал над ней, но вот проблема:
навигация выводится так:
<< < 1 2 3 4 > >>
при выводе записей я переворачиваю файл, чтобы новые сообщения были сверху. Вот что получается:
1 страница у меня 5 записей
2 страница 5 записей
3 страница 5 записей
4 страница 3 записи + еще 2 пустые, т.е. без содержания. Как это поправить?
не знаю, имхо, разобраться в этом коде невозможно. все переменные названы почти одинаково! а другие - просто непонятно. ну найди кусок кода, где выводятся сообщения и вставь условие если запись пустая, то ее не выводить.