Предположим, у вас есть длинный текст, который бы вы хотели вывести не на одной странице, а разбить на несколько.
С помощью данного PHP-скрипта сделать это очень легко и просто. Текст, который будет разбиваться, сохраняете в файле "file.txt".
В предпоследней строке скрипта
separator('file.txt', '10');
указываете, сколько строк текста должно быть на одной странице (в примере - 10 строк). Все остальное скрипт сделает за вас.
<?php
// Создаем функцию с 2-мя обязательными
// и одним новым необязательным параметром
// с уже указанным значением по умолчанию
function separator($file, $notes, $limit=0){
// Загоняем всю инфу из файла в массив
$file = file($file);
// Получаем количество строк в файле
$q = sizeof($file);
// Делим кол-во строк на кол-во записей - получаем кол-во страниц
// ! Если число не делится ровно, оно округлится по верхней границе (с избытком)
// Для этого существует функция ceil()
// В дальнейшем нам не нужно ставить (int) перед переменной
$np = ceil($q/$notes);
// Если в адресной строке есть $page, значит
//нужно показать блок, соответсвующий значению $page
if(isset($_GET['page']))
{
// Для удобства переименуем $_GET['page'] в $page
$page = $_GET['page'];
// Если $page больше, чем кол-во страниц, показываем последний блок
if($page > $np) $page = $np;
// Если вдруг значение $page отрицательно - выводим первый блок
if($page <= 0) $page = 1;
// Формулы начальной и конечной строки блока, вычислены опытнам путем
$begin = $notes*($page-1);
$end = $notes*$page-1;
// Вывод данных
for($i=$begin; $i<=$end; $i++)
{
if(isset($file[$i])) echo $file[$i].'<br>';
}
}
// Если $page в адресной строке нет, то показываем 1-й блок
else
{
// Если количество строк в файле меньше или равно допустимому
// количеству, то просто выводим их и не паримся с постраничным
// выводом, ибо нефига...
if($q <= $notes)
{
for($i=0; $i<$q; $i++) {
echo $file[$i].'<br>';
}
// Дальнейшее выполнение функции бессмыслено (все возможное выведено), поэтому выходим
exit;
}
// А если больше, то выводим первый блок
else
{
for($i=0; $i<$notes; $i++)
{
echo $file[$i].'<br>';
}
}
}
// Вывод навигации
// Делаем пробел между выводимой информацией
// и навигацией :)
echo '<br>';
// Если страница не первая (иначе нет смысла выводить
// стрелки), то выводим стрелки "В начало" и "Предыдущая"
if(isset($_GET['page']) && $_GET['page'] > 1){
// Будет вернее писать $_SERVER['SCRIPT_NAME'], а не index.php, как было раньше
echo '<a href='.$_SERVER['SCRIPT_NAME'].'?page=1><<</a> ';
$prev = $_GET['page']-1;
echo '<a href='.$_SERVER['SCRIPT_NAME'].'?page='.$prev.'><</a> ';
}
// Если параметр, ограничивающий длину выводимой
// навигации не установлен или равен нулю, то выводим
// навигацию как обычно
if($limit == '0'){
for($i=0; $i<$np; $i++){
if(isset($_GET['page']) && $_GET['page'] == $i+1) echo '['.($i+1).'/'.$np.']';
else echo '<a href='.$_SERVER['SCRIPT_NAME'].'?page='.($i+1).'>['.($i+1).']</a> ';
}
}else{
// Самое интересное: ограничение выводимой навгиации
if(!isset($_GET['page'])) $page=1;
// Форумла начала "обрезанной" навигации (НОН)
$begin = $page-$limit;
// Формула конца "обрезанной" навигации (КОН)
$end = $page+$limit;
// Если НОН выходит за ноль, то можно не "обрезать" навигацию слева
if($begin <= 0) $begin = 1;
// Если КОН выходит за последнюю страницу, то можно не "орбезать" навигацию справа
if($end > $np) $end = $np;
// Если между 1-й страницей и НОН есть какие-то страницы, заменяем их на "..."
if($begin > 1) echo "...";
//Ну и сам вывод...
for($i=$begin; $i<=$end; $i++){
if(isset($_GET['page']) && $_GET['page'] == $i) echo '['.$i.'/'.$np.']';
else echo '<a href='.$_SERVER['SCRIPT_NAME'].'?page='.$i.'>['.$i.']</a> ';
}
// Если между КОН и последней страницей есть какие-то страницы, заменяем их на "..."
if($end < $np) echo "...";
}
// Вывод стрелок "Следующая" и "В конец"
if(@$_GET['page'] < $np){
$next = @$_GET['page']+1;
echo '<a href='.$_SERVER['SCRIPT_NAME'].'?page='.$next.'>></a> ';
echo '<a href='.$_SERVER['SCRIPT_NAME'].'?page='.$np.'>>></a> ';
}
}
// Ну и вызов функции
separator('file.txt', '10');
?>