Каталог статей
Поиск по базе статей  
Статья на тему Интернет » Интересное в сети » Постраничный вывод текста на&nb p;сайте

 

Постраничный вывод текста на&nb p;сайте

 

 

Рано или поздно каждый вебмастер сталкивается с необходимостью вывода на странице большого объем информации. И если в случае простого текста проблема не столь заметна, то при сложном форматировании страниц длинные блоки могут приводить к весьма неприятным результатам — например, к тому, что страница не будет отображена в браузере до получения всей информации от сервера, а время передачи данных, естественно, напрямую зависит от их размера...

Одним из решений (весьма удобных, кстати) этой проблемы является разбивка данных на страницы. В случае статического HTML этот процесс выполняется вебмастером вручную и, по большому счету, мало отличается от обычной разработки страниц. Мы же сегодня поговорим о динамических страницах...

загрузка...

 

 

Самым распространенным вариантом является вывод множества элементов из базы данных. Например, список анонсов статей или новостей. В случае какого-то новостного сайта, где данных добавляется много, есть, как правило, «естественный» метод разбивки — например, по дням (хотя в экстремальных случаях, разумеется, может и за день набежать данных больше, чем влезает на страницу). В случае же менее напряженного сайта было бы разумным выводить какое-то определенное число (например, 10) новостей на странице, на следующей странице — следующие 10 и так далее.

Разбивка длинных данных на страницы может быть очень полезна!Этот метод реализуется очень легко: достаточно из пула выбрать новости от (page-1)*10 до page*10 и показать их на странице. В случае с базой данных для этого удобно использовать операторы SELECT с установленными параметрами OFFSET (задающим смещение относительно начала набора) и LIMIT (ограничивающим количество записей в наборе). Например, для четвертой страницы запрос может выглядеть следующим образом: SELECT id FROM news OFFSET 30 LIMIT 10.

По большому счету, этот метод является достаточно универсальным и законченным. Хотя можно добавить к нему один небольшой штришок — дать посетителю возможность самостоятельно определять, сколько элементов показывать на странице. Все, что для этого требуется — это число элементов на странице прописывать не числом в коде, а задавать с помощью какой-то переменной. Например, для PHP это может выглядеть следующим образом: адрес страницы задается в виде /redir.php?url=mysite.ru%2Fnews.php%3Fipp%3D15%26page%3D2%3B а в скрипте для формирования запросов к базе используются переменные $_GET['ipp'] и $_GET['page'] (ipp в данном примере обозначает «Items Per Page» для более легкого запоминания). Сам скрипт может выглядеть приблизительно следующим образом (PHP):

$ipp = (((int) $_GET['ipp']) > 0) ? (int) $_GET['ipp'] : 10;
$page = (((int) $_GET['page']) > 0) ? (int) $_GET['page'] : 1;
$SQL = «SELECT id FROM news OFFSET ».(($page-1)*$ipp)." LIMIT $ipp";

Ссылки на следующую и предыдущую страницы при этом формировать очень легко, а для изменения числа элементов на странице можно использовать отдельную форму, которая примет введенное пользователем значение и выведет пересчитанную в соответствии с этим значением страницу.

Большинство СУБД понимают «нестандартные» команды OFFSET и LIMIT, которые могут быть очень полезны при организации постраничного вывода данныхНесмотря на то, что OFFSET и LIMIT не входят в стандарт SQL92, они поддерживаются большинством популярных СУБД — проверьте документацию вашей базы. Теоретически, использование курсоров для постраничного вывода было бы еще более удобным, но так как протокол HTTP не сохраняет состояния при переходе между страницами, передача курсора становится не совсем тривиальной и очень сильно зависящей от используемого языка программирования и СУБД задачей. Таким образом, использование ограничителей в операторе SELECT оказывается, пожалуй, наиболее удобным и универсальным решением.

Другим распространенным случаем (однако несколько более сложным и интересным) является вывод длинного текста — например, какой-то статьи. Дело в том, что дизайн страницы, как правило, рассчитан на вывод статьи «среднего размера» целиком. И в 99% случаев этот подход работает хорошо, но если вдруг попадется очень длинная статья, то могут начаться проблемы — дизайн «поедет», или форматирование начнет «прыгать», либо же просто придется очень долго ждать загрузки текста...

Разбивая текст на страницы, не забывайте оставить возможность увидеть его в виде одной страницыЗдесь можно поступить следующим образом: перед выводом проверять длину текста и в случае превышении некоего критического значения разбивать этот текст на страницы. Так же, как и в случае с выводом новостей, можно «отдать на откуп посетителю» определение критического размера, а заодно и предоставить ему возможность выбрать — смотреть текст с разбивкой на страницы или выводить целиком (вдруг у посетителя очень быстрый канал?).

Предположим, что текст статьи у вас «загнан» в переменную $article, а «критический размер» — в $pagesize, тогда для PHP кусок скрипта может выглядеть примерно так:

if (strlen($article) > $pagesize and $_GET['page'] != 'nopages') {
$page = (isset($_GET['page']) and (int)$_GET['page'] > 0) ? ((int)$_GET['page']) — 1 : 0;
$offset = $pagesize*$page;
$start = ($offset) ? strpos($article, '<p>', $offset)+3 : 0;
$end = (strpos($article, '<p>', $offset+$pagesize)) ? strpos($article, '<p>', $offset+$pagesize) : strlen($article);
if (strlen($article) — $end $data = substr($article, $start, $end-$start);
if ($page) $pages .= "<a href=\"/articles.php?id=$artid&page=$page\">предыдущая страница</a> ";
if ($page or $end if ($end $data .= "<p><div align=right>$pages</div>";
} else
$data = $article;

«Бить» на страницы имеет смысл только длинные текстыРазберем этот пример поподробнее. В первом if проверяется, что длина текста превышает «критический размер» ( strlen($article) > $pagesize ), и что пользователь не хочет смотреть весь текст на одной странице ( $_GET['page'] != 'nopages' ). Если одно из этих условий не выполняется, то выполнение программы перескакивает в конец примера, где переменной $data (которая и выводится на странице) присваивается значение $article, то есть не выполняется никаких преобразований над текстом. Если же оба условия совпали, то текст надо «бить».

Сначала выясняется, какую страницу нам надо вывести. Если браузером передана переменная $_GET['page'], то мы устанавливаем внутреннюю переменную $page на единицу меньше (так как внутри скрипта проще отсчет вести не с единицы, а с нуля), если же такая переменная не передана, то значение $page устанавливается равным нулю. Следующая строка вычисляет «грубое смещение» относительно начала текста, с которого нам надо выводить страницу: $offset = $pagesize*$page (так как страницы мы считаем, начиная с нуля, то здесь все будет работать правильно).

Теперь мы более точно определяем начало и конец страницы в тексте. Так как разбивать текст посередине слова нехорошо (особенно если это слово вдруг окажется в середине какого-то HTML-тега), то мы используем следующую конструкцию для установки начала страницы на начало абзаца: $start = ($offset) ? strpos($article, '<p>', $offset)+3 : 0; — то есть мы ищем ближайшее вхождение тега <P>, начиная с вычисленного нами «грубого смещения», и устанавливаем начало страницы сразу после этого тега.

Почти так же вычисляется и конец страницы: $end = (strpos($article, '<p>', $offset+$pagesize)) ? strpos($article, '<p>', $offset+$pagesize) : strlen($article); — здесь к найденному нами началу страницы добавляется размер страницы ($pagesize), что дает «грубое» положение конца страницы, после чего ищется следующий тег <P>. Если он найден, то конец страницы устанавливается на этот тег, а если нет — на конец всего текста. Здесь важно, чтобы для определения начала и конца страницы использовался один и тот же алгоритм (в нашем случае — нахождение тега <P>) — это гарантирует, что начало следующей страницы будет совпадать с концом предыдущей.

При разбивке текста на страницы следите за размером «хвоста»Теперь один маленький штришок: если вдруг на последней странице окажется всего 1-2 предложения, то это будет выглядеть некрасиво. Поэтому мы добавляем строчку if (strlen($article) — $end Ну, а дальше все просто: в переменную $data записывается кусок текста, вырезанный в соответствии с найденными нами значениями начала и конца страницы ( $data = substr($article, $start, $end-$start) ). После этого даются ссылки на предыдущую ( if ($page) $pages .= "<a href=\"/articles.php?id=$artid&page=$page>предыдущая страница</a>" ) страницу (эта ссылка появляется, только если мы не находимся на «нулевой» странице); на показ всего текста статьи ( if ($page or $end < strlen($article)) $pages .= "<a href=\"/articles.php?id=$artid&page=nopages\">вывести все ".(round(strlen($article)/1024))." Kb</a>" ) — здесь появляется та самая переменная $_GET['page'] == 'nopages', наличие которой мы проверяли в самом начале; и ссылка на следующую страницу текста ( if ($end < strlen($article)) $pages .= "<a href=\"/articles.php?id=$artid&page=".($page+2)."\">следующая страница</a>" ). После чего к тексту статьи добавляются ссылки на все эти страницы ( $data .= "<p><div align=right>$pages</div>" ).

Вот, собственно, и все. Разумеется, эти примеры являются базовыми — можно предусмотреть вывод не только ссылок на предыдущую и следующую страницы, но и на все промежуточные. Можно сделать еще много чего, но это все уже «украшательства», которыми можно заняться на досуге. Самое главное — не забывайте проверять все данные, введенные пользователем, на соответствие типу переменной и диапазону разрешенных значений — это убережет вас от множества неприятностей...



Статья получена: hostinfo.ru

 

 

Наверх


Постоянная ссылка на статью "Постраничный вывод текста на&nb p;сайте":


Рассказать другу

Оценка: 4.0 (голосов: 16)

Ваша оценка:

Ваш комментарий

Имя:
Сообщение:
Защитный код: включите графику
 
 



Поиск по базе статей:





Темы статей






Новые статьи

Противовирусные препараты: за и против Добро пожаловать в Армению. Знакомство с Арменией Крыша из сэндвич панелей для индивидуального строительства Возможно ли отменить договор купли-продажи квартиры, если он был уже подписан Как выбрать блеск для губ Чего боятся мужчины Как побороть страх перед неизвестностью Газон на участке своими руками Как правильно стирать шторы Как просто бросить курить

Вместе с этой статьей обычно читают:

Как писать маркетинговые тексты для веб-сайта

В этой статье мы будем говорить о правилах написания текстов, которые я условно называю «маркетинговыми» (т.е. ориентированными на поддержку продаж или клиентский сервис). Только часть из приведенных здесь рекомендаций справедлива для подготовки аналитических, обзорных и прочих статей, предполагающих вдумчивое и размеренное знакомство с материалом. В противоположность им современный интернет-маркетинг борется за «мгновенное внимание» и рассчитывает лишь на секунды, потрачен ...

» Продвижение и оптимизация - 3651 - читать


Как писать тексты для главных страниц сайта.

Написание текстов для главной страницы сайта. Стандартная задача, которую веб-копирайтерам приходится решать практически ежедневно. Оптимизаторы часто самостоятельно доводят до ума тексты на главных страницах, а владельцы ресурсов вносят свои коррективы.

» Продвижение и оптимизация - 8474 - читать


Каким должен быть текст на сайте

Одна из основных ошибок многих веб-мастеров заключается в том, что они копируют тексты, созданные для печати, в веб. Чтобы создать хороший текст для интернет-страницы, нужно помнить одно правило - тексты, публикуемые на сайтах, должны быть написаны непосредственно для интернета или адаптированы под реалии Сети. Поведение пользователей интернета заметно отличается от поведения читателя в библиотеке.

» Продвижение и оптимизация - 2181 - читать


Оптимизация текста

Разговор на частоту Как определить релевантность (соответствие) документа определенному запросу? Вначале поисковые машины ранжировали странички, оценивая их содержание - тексты. В частности, большое значение придавалось частоте ключевой фразы - то есть процентной части ключевого слова или нескольких слов в общей массе текста.

» Продвижение и оптимизация - 3775 - читать


Текст вашего рекламного объявления прочтет только один из десяти читателей.

Текст вашего рекламного объявления прочтет только один из десяти читателей. Все искусство и заключается в том, чтобы заголовком привлечь внимание и удержать его при чтении первых нескольких абзацев. Если вам это удалось, пока он читает первые 50 написанных вами слов, то скорее всего он прочтет и следующие 250.

» Продвижение и оптимизация - 2101 - читать



Статья на тему Интернет » Интересное в сети » Постраничный вывод текста на&nb p;сайте

Все статьи | Разделы | Поиск | Добавить статью | Контакты

© Art.Thelib.Ru, 2006-2024, при копировании материалов, прямая индексируемая ссылка на сайт обязательна.

Энциклопедия Art.Thelib.Ru