В нашем примере у нас есть файл file.txt, в котором записаны 22 строки, напишем скрипт, который будет выводить по 5 строк на странице.
При этом мы сделаем удобную навигацию, отображаться будет несколько страниц.
// файл в массив
$file=@file("file.txt");
// считаем строки
$count=count($file);
// количество строк на странице
$max="5";
$total=ceil($count/$max);
if(empty($_GET["p"])){$_GET["p"]="1";}
$p=$_GET["p"];
if(!ctype_digit($p) or $p>$total):
$p="1";
endif;
$first=$p*$max-$max;
$last=($p*$max)-1;
for($i=$first;$i<=$last;$i++):
if(@$file[$i]):
print "$file[$i]<br>";
endif;
endfor;
if($total>0):
// две назад
print "<div>";
if(($p-2)>0):
$ptwoleft="<a class='first_page_link' href='index.php?p=".($p-2)."'>".($p-2)."</a> ";
else:
$ptwoleft=null;
endif;
// одна назад
if(($p-1)>0):
$poneleft="<a class='first_page_link' href='index.php?p=".($p-1)."'>".($p-1)."</a> ";
$ptemp=($p-1);
else:
$poneleft=null;
$ptemp=null;
endif;
// две вперед
if(($p+2)<=$total):
$ptworight=" <a class='first_page_link' href='index.php?p=".($p+2)."'>".($p+2)."</a>";
else:
$ptworight=null;
endif;
// одна вперед
if(($p+1)<=$total):
$poneright=" <a class='first_page_link' href='index.php?p=".($p+1)."'>".($p+1)."</a>";
$ptemp2=($p+1);
else:
$poneright=null;
$ptemp2=null;
endif;
// в начало
if($p!=1 && $ptemp!=1 && $ptemp!=2):
$prevp="<a href='index.php' class='first_page_link' title='В начало'><<</a> ";
else:
$prevp=null;
endif;
// в конец
if($p!=$total && $ptemp2!=($total-1) && $ptemp2!=$total):
$nextp=" ... <a href='index.php?p=".$total."'".$total."' class='first_page_link'>$total</a>";
else:
$nextp=null;
endif;
print "<br>".$prevp.$ptwoleft.$poneleft.'<span class="num_page_not_link"><b>'.$p.'</b></span>'.$poneright.$ptworight.$nextp;
print "</div>";
endif;
Давайте позволим пользователю самому выбирать количество строк, например 5 | 10 | 20
. Мы создали другой файл, назвали его news.php, пишем в него следующий код:
$file=@file("file.txt");
$count=count($file);
$link="<a href='news.php?n=5'>5</a>";
$link2="<a href='news.php?n=10'>10</a>";
$link3="<a href='news.php?n=20'>20</a>";
// получаем кол-во строк
if(isset($_GET["n"])):
$n=$_GET["n"];
else: $n="5";
endif;
$temp_array=array("5","10","20");
if(!ctype_digit($n) or !in_array($n,$temp_array)):
$n="15";
endif;
switch($n):
case 5:
$max="5"; $link="<b>5</b>";
break;
case 10:
$max="10"; $link2="<b>10</b>";
break;
case 20:
$max="20"; $link3="<b>20</b>";
break;
endswitch;
$total=ceil($count/$max);
// вводим переменную, указывающую номер страницы
if(empty($_GET["p"])){$_GET["p"]="1";}
$p=$_GET["p"];
if(!ctype_digit($p) or $p>$total):
$p="1";
endif;
$first=$p*$max-$max;
$last=($p*$max)-1;
print "Строк на страницу: $link | $link2 | $link3<br><br>";
for($i=$first;$i<=$last;$i++):
if(@$file[$i]){print "$file[$i]<br>";}
endfor;
if($total>0):
// две назад
print "<div>";
if(($p-2)>0):
$ptwoleft="<span id='first_page_link'><a class='first_page_link' href='news.php?n=$n&p=".($p-2)."'>".($p-2)."</a></span> ";
else:
$ptwoleft=null;
endif;
// одна назад
if(($p-1)>0):
$poneleft="<span id='first_page_link'><a class='first_page_link' href='news.php?n=$n&p=".($p-1)."'>".($p-1)."</a></span> ";
$ptemp=($p-1);
else:
$poneleft=null;
$ptemp=null;
endif;
// две вперед
if(($p+2)<=$total):
$ptworight=" <span id='first_page_link'><a class='first_page_link' href='news.php?n=$n&p=".($p+2)."'>".($p+2)."</a></span>";
else:
$ptworight=null;
endif;
// одна вперед
if(($p+1)<=$total):
$poneright=" <span id='first_page_link'><a class='first_page_link' href='news.php?n=$n&p=".($p+1)."'>".($p+1)."</a></span>";
$ptemp2=($p+1);
else:
$poneright=null;
$ptemp2=null;
endif;
// в начало
if($p!=1 && $ptemp!=1 && $ptemp!=2):
$prevp="<span id='first_page_link'><a href='news.php?n=$n&p=1' class='first_page_link' title='В начало'><<</a></span> ";
else:
$prevp=null;
endif;
// в конец
if($p!=$total && $ptemp2!=($total-1) && $ptemp2!=$total):
$nextp=" ... <span id='first_page_link'><a href='news.php?n=$n&p=".$total."'".$total."' class='first_page_link'>$total</a></span>";
else:
$nextp=null;
endif;
print "<br>".$prevp.$ptwoleft.$poneleft.'<span class="num_page_not_link"><b>'.$p.'</b></span>'.$poneright.$ptworight.$nextp;
print "</div>";
endif;
$file = @file('baza.txt');
$count = sizeof($file);
$max = 5; // количество строк на странице
$pages = ceil($count/$max);
$p = (isset($_GET["p"])?(int)$_GET["p"]:1);
$first_str=($p*$max)-$max ;
$last_str=($p*$max)-1;
for($i=$first_str;$i<=$last_str;$i++){
if($file[$i]) printf('<li>%s</li>',$file[$i]);
}
$link_count = 10;
$prev = false;
$next = false;
print "<br><br>Pages: ";
if($p<$link_count){
$start = 1;
$end = min($pages,$link_count*2+1);
}elseif($p>$pages-$link_count){
$start = max(1,$pages-$link_count*2+1);
$end = $pages;
}else{
$start = $p-$link_count;
$end = $p+$link_count;
}
if($p!=1) printf('<a href="mp3hit-%1$s.php">Back</a> | ', $p-1);
for($u=$start;$u<=$end;$u++){
{
if($p!=$u){
printf('<a href="mp3hit-%1$s.php">%1$s</a> | ', $u);
}else{
print "<b>$u</b> ";
}
}
}
function textpart($text, $count=100) {
$number = @ $_GET['number'];
#
if($count > 0) {
$text = wordwrap($text,$count, "[page]");
}
$str = explode("[page]", $text);
// Выясняем сколько страниц
$count = count($str);
//Выводим страницу
empty ($number) ? $number = 0 : $number < 0 ? $number = 0 : "";
echo $str[($number)];
if ($number != ($count -1) and $number != 0) {
echo " [<a href='?number=" . ($number +1) . "'>...</a>]";
}
echo "<br/>";
echo " <a href='?number=0'>Вступление</a>";
echo "<br/>";
// Если текущая страница первая, то выводим продолжить
if ($number == 0 and count($str) > 1) {
echo "<br/><a href='?number=" . ($number +1) . "'>[Читать дальше...]</a> <br/>";
} else {
// Проверяем текущая ли это страница
for ($i = 1; $i < $count; $i++) {
if ($i == $number) {
if ($i == ($count -1) and $count > 2) {
echo " <b>[$i]</b>";
echo " <a href='?number=" . ($count - $i) . "'> в начало</a>";
}
elseif ($i == ($count - ($count -1)) and $count > 2) {
echo " <a href='?number=" . ($count -1) . "'>в конец </a>";
echo " <b>[$i]</b>";
}
elseif ($i == $number) {
echo " <b>[$i]</b>";
}
} else {
echo " <a href='?number=$i'>[$i]</a>";
}
}
}
}
$str = file_get_contents("text.txt");
textpart($str,0);
Вид:
Как известно, первая часть приключений капитана Джека Воробья (Джонни Депп) и эффектной парочки Уилла Тернера (Орландо Блум) с Элизабет Свон (Кира Найтли) окончилась благополучно. Элизабет избавилась от опостылевшего жениха Норрингтона (Джек Девенпот), отдала свое сердце и губернаторское приданое Уиллу, а Джек Воробей наконец-то получил под свое командование любезную его сердцу Жемчужину и отправился навстречу новым приключениям.
[Читать дальше...]
Впрочем, вторая часть, как водится, начинается с различных неприятностей, которые героям предстоит преодолевать не только 150 минут экранного времени, но и черт знает сколько времени заключительной части трилогии. Но давайте обо всем не по порядку. Потому что иначе запутаемся, как это сделали члены съемочной группы. Итак. Есть такой пиратский капитан Дэйви Джонс (Билл Найи). В свое время он, как и полагается стандартному пиратскому капитану, сложил буйну головушку - то ли по причине очередного морского сражения, то ли по причине всеобщей интоксикации организма плохо очищенным алкоголем. [...]
Вступление
В конец [1] [2]
В textpart($str,0) передается текст, где теги [page] является разделителем страницы, первая страница, считается Вступлением.
Файл данных text.txt
1 Программирование
2 Программирование на PHP
3 Программирование на JavaScript
4 Программирование на ASP.NET
5 Программирование на Java
6 Программирование на Perl
7 Программирование на C++
8 Программирование на Pascal
9 Программирование на Fortran
10 Программирование на Assembler
Cкрипт, выводящий по три позиции:
// Имя файла
$filename = "text.txt";
// Число позиций на странице
$pnumber = 3;
// Открываем файл для чтения
$bufer = file_get_contents($filename);
// Находим все строки при помощи регулярного выражения
preg_match_all("#([\d]+) ([^\n]+)(\n|$)#U",
$bufer,
$out,
PREG_PATTERN_ORDER);
// Формируем промежуточный массив
for($i = 0; $i < count($out[1]); $i++)
{
$temp[] = trim($out[2][$i]);
}
// Проверяем передан ли номер текущей страницы
if(isset($_GET['page'])) $page = $_GET['page'];
else $page = 1;
// Число страниц
$total = count($temp);
$number = (int)($total/$pnumber);
if((float)($total/$pnumber) - $number != 0) $number++;
$start = (($page - 1)*$pnumber + 1);
$end = $page*$pnumber + 1;
if($end > $total) $end = $total;
// Выводим содержимое страниц
for($i = $start; $i < $end; $i++)
{
echo $temp[$i]."<br>";
}
// Постраничная навигация
for($i = 1; $i <= $number; $i++)
{
// Если это произвольная страница
if($i != $number)
{
if($page == $i)
{
echo "[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."] ";
}
else
{
echo "<a href='$_SERVER[PHP_SELF]?page=$i'>[".
(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</a> ";
}
}
// Если это последняя страница заменяем последнюю цифру
// максимальным числом позиций в массиве $temp
else
{
if($page == $i)
{
echo "[".(($i - 1)*$pnumber + 1)."-".($total - 1)."] ";
}
else
{
echo "<a href='$_SERVER[PHP_SELF]?page=$i'>[".
(($i - 1)*$pnumber + 1)."-".($total - 1)."]</a> ";
}
}
}