Сайтостроительство (8)

PHP-кодинг (25)

Веб-дизайн (9)

DHTML/JavaScript (8)

Подкастинг (1)

Безопасность в PHP (3)

Секретный раздел

Карта блога

Регистрация пользователей на PHP+MySQL

Скрипт гостевой книги с красивым дизайном

Галерея на jQuery

Простая система регистрации пользователей на сессиях

Галерея на php+jquery

Форма обратной связи с защитой типа капча

Шаблоны запросов и placeholders

Быстрое перенаправление средствами php

Flash плеер для вашего сайта

Сортировка столбцов в таблице на php+mysql

Сохраняем IP-адрес посетителя, оставившего комментарий

Генераторы графики для Web 2.0

Организация пространства страницы

Форматный вывод даты из базы

Языки HTML и PHP (+ скачать учебники)

За весь период

За 2010-11

За 2009-06

За 2009-05

За 2009-04

За 2009-03

За 2009-02

За 2008-08

Бегун контекстная реклама

Ruseller видеоуроки

Letitbit файлообменник

Tak.Ru $$$ вебмастеру

WMmail почтовые рассылки

WMlink продажа трафика

Sape.Ru продажа ссылок

Главная » PHP-кодинг

Постраничный вывод большой статьи

Допустим у нас есть файл view_post.php, выводящий всю статью или заметку полностью с комментариями. Некоторые заметки имеют очень большой текст в ячейке "text", поэтому нужно разбить этот текст на части и вывести часть текста на первой страничке, а остальную часть - на других, например с помощью ссылок навигации типа "Назад | Далее".

Для последующего вывода содержимого всей статьи делаем стандартный запрос c извлечение данных в виде массива строк. Это надеюсь, у вас уже есть в скрипте.


$result = mysql_query("SELECT * FROM data WHERE id='$id'",$db);
$myrow = mysql_fetch_array($result); 

Таким образом, текст заметки у нас будет храниться в массиве $myrow["text"]. Его нужно будет разделить и постранично вывести частями.

Вывод записей будет осуществяться на основе сравнения с некоторым максимальным числом, определяющем общее количество символов в тексте статьи $count_str. Счетчик номера страницы будет расчитываться на основе следующего выражения:


$count_page = ceil(strlen($myrow['text'])/$count_str)-1;

Из выражения видно, что берётся длина всего текста и делиться на то количество символов, которым мы огранинили выводимое количество текста на одной страничке минус единичка для правильной обрезки (с учетом символа конца строки). То есть, если $count_page имеет место быть, то должна распечататься ссылка "Далее", ведущая на продолжение текущей статьи.

Далее привожу полный код реализации цикла постраничного вывода статьи применительно к нашему php-блогу.


do
{
	$count_str = 7000;
	$count_page = ceil(strlen($myrow['text'])/$count_str)-1;
	echo "<table>";
	if (strlen($myrow['text']) > $count_str)
	{
		if(!$_GET['str'])
		{
			echo "
			<tr><td>$myrow[title]</td></tr>
			<tr><td>$myrow[author]</td></tr>
			<tr><td>".substr($myrow['text'], 0, $count_str)."...</td></tr>";
			echo '<tr><td><a href="?id='.$id.'&str=1">Далее »</a></td></tr>';
		}
		else
		{
			echo "
			<tr><td>$myrow[title]<br>(продолжение)</td></tr>
			<tr><td>$myrow[author]</td></tr>
			<tr><td>".substr($myrow['text'], $count_str*$_GET['str'], $count_str)."</td></tr>";
			echo '<tr><td align=center><a href="?id='.$id.'&str='.($_GET['str']-1).'">Назад</a>';
			if ($_GET['str'] != $count_page)
			echo ' | <a href="?id='.$id.'&str='.($_GET['str']+1).'">Далее</a></td></tr>';
		}
	}
	else //если небольше, то выводим всю статью на одной страничке...
	{
		echo "
		<tr><td>$myrow[title]</td></tr>
		<tr><td>$myrow[author]<br></td></tr>
		<tr><td>$myrow[text]</td></tr>";
	}
	echo "</table>";
	
}
while($myrow = mysql_fetch_array($result))

Принцип работы следующий:
Если длина массива с текстом $myrow7['text'] больше заданного количества символов, то выводим часть статьи с соответствующй ссылками навигации. При выводе применяется вложенный цикл, проверяющий существует ли переменная $_GET['str'], идентифицирующая страницу. Если нет, то печатаем самую статью первую страничку с начальными данными и одной ссылко "Далее", а если существует, то распечатываем продолжение статьи и уже с ссылками "Назад" и Далее" (если еще есть текст - ($_GET['str'] != $count_page)).

Для начальной странички вывод массива с текстом примет вид:


substr($myrow7['text'], 0, $count_str)

Функция substr() возвращает часть строки, начинающейся с заданной начальной позиции (2-й параметр: 0) и имеющей заданную длину (3-й параметр: $count_str). Ну а 1-м параметром передается сама строка, в данном случае массив с текстом нашей статьи. А для последующих страниц эта функция вызывается уже с учетом текущей позиции ($count_str*$_GET['str']), также задаваемой во втором параметре.


substr($myrow7['text'], $count_str*$_GET['str'], $count_str)

Если же условие if (strlen($myrow7['text']) > $count_str) не выполняется, то просто выводим всю статью без разделения массива и навигации.

На этом всё. Данный пример лишь показывает создание простого вывода фиксированного количества текста на страничку с примитивной навигацией. Его можно модифицировать для любых ваших нужд, например с более детальной проверкой условий ограничения вывода, приминением цифровой навигации и прочими наворотами. Но в качестве примера, я думаю вам будет и этого достаточно чтобы самостоятельно разобраться в коде и применить данный урок для создания подобной вещи на вашем сайте.

Можете приступать. Желаю удачи! =)

Комментировать

Автор: admin | Добавлена: 07.05.2009 | Просмотров: 8387
Рейтинг: 20 | Голосов: 4

Оцените заметку: 1 2 3 4 5

Последние обновления в категории: PHP-кодинг

Комментарии (0)

Комментариев пока нет!

Только авторизованные пользователи могут добавлять комментарии. Зарегистрироваться.

Логин:
Пароль:
 

Регистрация

: Тема:

Заметок в базе: 56
Комментариев: 0
Всего юзеров: 114
Сейчас онлайн: 1