|
|
|
| Моя версия:
<?php
/*
* Дата создания 18.07.2006 1:33:37
* package_name
* @author Alexandr Beshkenadze aka akira
* (c) akira 2006
*
*/
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] является разделителем страницы, первая страница, считается Вступлением.
Скорость выполнения скрипта в 3 раза быстрее, чем по ссылке.
Скрипт легко переделать, что бы не по тегам шла разбика, а по переносу строки.
Надесю кому пригодится.
PS прекрепил text.txt для теста, если надо. | |
|
|
|
|
|
|
|
для: AKiRA
(18.07.2006 в 01:45)
| | Красиво! Я похожую вещь делал но намного сложнее код вышел
// Функция вывода навигации по страницам //
function nav_page($count, $num_page, $url)
{
$page_nav = 3;
$begin_loop=1;
$end_loop=$count;
echo " Страница $num_page из $count<br />";
if ($num_page>$count or $num_page<1) $num_page=1;
if ($num_page>$page_nav) {
echo " <a href=\"$url".($page_nav*(floor($num_page/$page_nav)-($num_page%$page_nav==0 ? 1: 0)))."\">".($page_nav*(floor($num_page/$page_nav)-1-($num_page%$page_nav==0 ? 1: 0))+1)."-".($page_nav*(floor($num_page/$page_nav)-($num_page%$page_nav==0 ? 1: 0)))."</a> ...";
$begin_loop=$page_nav*(floor($num_page/$page_nav)-($num_page%$page_nav==0 ? 1: 0))+1;
}
if ($count>$page_nav*(floor($num_page/$page_nav)-($num_page%$page_nav==0 ? 1: 0)+1)) { $end_loop=$page_nav*ceil($num_page/$page_nav); }
for ($i = $begin_loop; $i <= $end_loop; $i++) {
if ($i==$num_page) echo " <b>$i</b>";
else echo " <a href=\"$url$i\">$i</a>";
}
if ($count>$page_nav*(floor($num_page/$page_nav)-($num_page%$page_nav==0 ? 1: 0)+1)) {
echo " ... <a href=\"$url".($page_nav*ceil($num_page/$page_nav)+1)."\">".($page_nav*ceil($num_page/$page_nav)+1);
if ($page_nav*ceil($num_page/$page_nav)+1<$count) {
echo "-".($count<=$page_nav*(ceil($num_page/$page_nav)+1) ? $count: $page_nav*(ceil($num_page/$page_nav)+1));
}
echo "</a>";
}
echo " \n";
}
| далее чтение и навигация
$text= "text/$d/$f.txt"; // путь к файлам в папку text/ субпапку $d=.../ файл $f=...
$text = file($text); // заносим строки файла в массив
$text = str_replace('.','.|',$text); //вводим разделитель после кахдой точки
$text = implode("|",$text); //сливаем по метке этого разделителя весь текст в одну строчку
$text = explode("|",$text); //а теперь выделяем из этой строки по разделителю новые строки
/*это проделано на случай если массив текста идет одной строчкой и нуждо его разделить, при этом в случае если есть в исходном массиве строчки то они не будут выделены двойным переносом */
echo '<div class="center">';
$count = count($text); // кол-во строчек
if ($count>$num_sep) nav_page(ceil($count/$num_sep),(isset($HTTP_GET_VARS['page']) ? $HTTP_GET_VARS['page']: 1),"view.php?d=$d&f=$f&page=");
$num_page=1;
if (isset($HTTP_GET_VARS['page'])) {
if (($HTTP_GET_VARS['page']>0) and ($HTTP_GET_VARS['page']<=ceil($count/$num_sep))) $num_page=$HTTP_GET_VARS['page'];
}
// В зависимости от страницы выводим нужные строки
for ( $i=($num_page-1)*$num_sep; $i<=(($num_page*$num_sep<$count) ? $num_page*$num_sep-1: $count-1); $i++) {
echo '</div>';
echo "$text[$i]";
} // for
// если кол-во строк больше чем мы должны выводить на страницу, то выводим навигацию по страницам
echo '<div class="center">';
if ($count>$num_sep) nav_page(ceil($count/$num_sep),(isset($HTTP_GET_VARS['page']) ? $HTTP_GET_VARS['page']: 1),"view.php?d=$d&f=$f&page=");
echo "<form action=\"view.php\" metod=\"post\">
<input type=\"hidden\" name=\"d\" value=\"$d\">
<input type=\"hidden\" name=\"f\" value=\"$f\">перейти к
<input type=\"text\" size=\"3\" name=\"page\" value=\"\">
<input value=\"странице\" name=\"do\" type=\"submit\"/></form>";
|
| |
|
|
|
|
|
|
|
для: Giga
(18.07.2006 в 09:26)
| | Кстати спасибо от всех wap-строителей за серию порталов, даже если в чистом виде их мало кто применял, учились на них многие. Как сейчас к этой теме не возвращаешься? | |
|
|
|
|
|
|
|
для: Giga
(18.07.2006 в 09:30)
| | Спасибо на добром слове, не так часто их слышу ;)
У меня есть грандиозные планы по этому поводу :))
Ананонс я как нибудь вывешу на форуме. | |
|
|
|
|
|
|
|
для: AKiRA
(18.07.2006 в 01:45)
| | Добавил ссылку на эту тему на странице "Постраничная навигация" в разделе "Примеры на PHP". | |
|
|
|