|
|
|
|
|
для: Гавриленко Дмитрий
(14.02.2010 в 02:01)
| | Любой вариант постраничной навигации основан на следующих базовых моментах.
Есть некая масса элементов, которую нужно показывать, но которая целиком слишком тяжела для этого.
Эту массу разбивают на куски (обычно по равному числу элементов на кусок).
Так чтоб каждый кусок можно было за раз вывести на страницу. Поэтому и постраничная.
Каждую такую страницу обозначают отдельной ссылкой ( как правило, указывая, начиная с какого номера элемента пойдет вывод очередной порции)
В задачи скрипта входит
а) получить ссылку и вычислить этот начальный номер элемента
б) определиться с числом элементов на выбранной странице.
в) получить из источника данных указанный набор элементов и вывести его один за другим
г) сформировать ссылки "предыдущая страница", "следующая страница"
д) сформировать ссылки "самая первая страница","самая последняя страница"
г) сформировать ссылки (если нужно) на промежуточные страницы (до и после текущей)
причем, довольно часто формируют не на все, а с некоторым шагом.
Вывести всё полученное. | |
|
|
|
|
|
|
|
для: GeorgeIV
(18.12.2008 в 18:29)
| | Поднимаю тему. Вот я уже несколько подобных тем просмотрел, но так и не понял как же все таки создается это чертова навигация. Помогите пожалуйста разобраться. Если можите, то напишите в icq 62996218 | |
|
|
|
|
|
|
|
для: GeorgeIV
(18.12.2008 в 18:29)
| | поправил кое что
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href= ./rezult.php?rezult=1><<</a>
<a href= ./rezult.php?rezult='. ($page - 1) .'><</a> ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' <a href= ./rezult.php?rezult='. ($page + 1) .'>></a>
<a href= ./rezult.php?rezult=' .$total. '>>></a>';
// Находим две ближайшие страницы с обоих краев, если они есть
if($page - 2 > 0) $page2left = '<a href= ./rezult.php?rezult='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href= ./rezult.php?rezult='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
if($page + 2 <= $total) $page2right = ' | <a href= ./rezult.php?rezult='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href= ./rezult.php?rezult='. ($page + 1) .'>'. ($page + 1) .'</a>';
// Вывод меню
echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;
|
выводится нумерация, но при переходе на вторую и последующие станицы отображается то что должно быть только на первой, т.е. отображается на всех страницах одно и тоже. Пожалуйста, кто-нибудь обясните где ошибся? | |
|
|
|
|
|
|
|
для: studentPO
(18.12.2008 в 18:23)
| | $posts в данном случае, это объект. Сначала надо проверить, а был ли вообще результат, а потом взять первый элемент (вы же используете fetch_row, а он возвращает неассоциативный массив)
$total = intval(($posts[0] - 1) / $num) + 1; | |
|
|
|
|
|
|
| Необходимо сделать постраничную навигацию. Пробую сделать следующим образом
<?php
// Устанавливаем соединение с базой данных
$connect=mysql_connect("localhost", "root", "") or die("Сервер не найден");
mysql_select_db("base") or die("Таблица не найдена");
// Переменная хранит число сообщений выводимых на станице
$num = 1;
// Извлекаем из URL текущую страницу
$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result = mysql_query("SELECT COUNT(*) FROM upload");
$posts = mysql_fetch_row($result);
// Находим общее число страниц
$total = intval(($posts - 1) / $num) + 1;
// Определяем начало сообщений для текущей страницы
$page = intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) or $page < 0) $page = 1;
if($page > $total) $page = $total;
// Вычисляем начиная к какого номера
// следует выводить сообщения
$start = $page * $num - $num;
// Выбираем $num сообщений начиная с номера $start
$result = mysql_query("SELECT * FROM upload LIMIT $start, $num");
// В цикле переносим результаты запроса в массив $postrow
while ( $postrow[] = mysql_fetch_array($result))
echo "<table>";
for($i = 0; $i < $num; $i++)
{
echo "<tr>
<td>".$postrow[$i]['name']."</td>
<td>".$postrow[$i]['time']."</td></tr>
<tr><td colspan=\"2\">".$postrow[$i]['text']."</td></tr>";
}
echo "</table>";
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = '<a href= ./page?page=1><<</a>
<a href= ./page?page='. ($page - 1) .'><</a> ';
// Проверяем нужны ли стрелки вперед
if ($page != $total) $nextpage = ' <a href= ./page?page='. ($page + 1) .'>></a>
<a href= ./page?page=' .$total. '>>></a>';
// Находим две ближайшие станицы с обоих краев, если они есть
if($page - 2 > 0) $page2left = ' <a href= ./page?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href= ./page?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
if($page + 2 <= $total) $page2right = ' | <a href= ./page?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href= ./page?page='. ($page + 1) .'>'. ($page + 1) .'</a>';
// Вывод меню
echo $pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;
?>
|
Но браузер выдает ошибку
Fatal error: Unsupported operand types in Z:\home\localhost
в строке
$total = intval(($posts - 1) / $num) + 1;
|
| |
|
|
|
|