Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Постраничная навигация на файлах
 
 автор: AKiRA   (18.07.2006 в 01:45)   письмо автору
 
 

Моя версия:

<?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 $number $number "";
    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 == 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 для теста, если надо.

   
 
 автор: Giga   (18.07.2006 в 09:26)   письмо автору
 
   для: 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 "&nbsp;&nbsp;<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 "&nbsp; <b>$i</b>";
     else echo "&nbsp; <a href=\"$url$i\">$i</a>";
 }
 if ($count>$page_nav*(floor($num_page/$page_nav)-($num_page%$page_nav==0 ? 1: 0)+1)) {
  echo "&nbsp;&nbsp;... <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 "&nbsp;&nbsp;\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=\"\">&nbsp;
        <input value=\"странице\" name=\"do\" type=\"submit\"/></form>";

   
 
 автор: Giga   (18.07.2006 в 09:30)   письмо автору
 
   для: Giga   (18.07.2006 в 09:26)
 

Кстати спасибо от всех wap-строителей за серию порталов, даже если в чистом виде их мало кто применял, учились на них многие. Как сейчас к этой теме не возвращаешься?

   
 
 автор: AKiRA   (18.07.2006 в 15:38)   письмо автору
 
   для: Giga   (18.07.2006 в 09:30)
 

Спасибо на добром слове, не так часто их слышу ;)
У меня есть грандиозные планы по этому поводу :))
Ананонс я как нибудь вывешу на форуме.

   
 
 автор: cheops   (18.07.2006 в 12:11)   письмо автору
 
   для: AKiRA   (18.07.2006 в 01:45)
 

Добавил ссылку на эту тему на странице "Постраничная навигация" в разделе "Примеры на PHP".

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования