|
|
|
| На странице у которой есть id_pu нужно вывести навигацию по id_pu
Т.е если текущая страница post_pu.php?id_pu=1, то следующая post_pu.php?id_pu=2 и т.д.
id_pu известна
<?php
// Переменная хранит число сообщений выводимых на станице
$num = 1;
// Извлекаем из URL текущую страницу
$page = $_GET['page'];
// Определяем общее число сообщений в базе данных
$result = mysql_query("SELECT COUNT(*) FROM pu");
$posts = mysql_result($result, 0);
// Находим общее число страниц
$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 pu LIMIT $start, $num");
// В цикле переносим результаты запроса в массив $postrow
while ( $postrow[] = mysql_fetch_array($result))
?>
|
Саму статью выводит другой скрипт, статью выводить не нужно еще раз. мне нужны лишь стрелки (предыдущая статья и следующая).
вот это
$result = mysql_query("SELECT * FROM pu LIMIT $start, $num");
|
можно исключить из верхнего кода, наверняка.
// Проверяем нужны ли стрелки назад
if ($page != 1) $pervpage = ' <a href=post_pu.php?page='. ($page - 1) .'>предыдущая</a> ';
// Проверяем нужны ли стрелки вперед
if ($page != ($page + 1)) $nextpage = ' <a href=post_pu.php?page='. ($page + 1) .'>следующая</a> ';
// Вывод меню
echo $pervpage.$nextpage;
|
| |
|
|
|
|
|
|
|
для: Василий
(10.01.2012 в 16:12)
| | Самый просто вариант, это для начала просто вывести список всех страниц от id_pu = 1 до id_pu = N, т.е.
<?php
...
$query = "SELECT id_pu FROM pu ORDER BY id_pu";
$res = mysql_query($query);
if(!$res) exit("Ошибка запроса - ".mysql_error());
if(mysql_num_rows($res))
{
while($result = mysql_fetch_assoc($res))
{
echo "<a href='post_pu.php?id_pu=$result[id_pu]'>$result[id_pu]</a> ";
}
}
?>
| Если навигационная строка получится слишком длинная, тогда надо принимать меры по её сокращению. | |
|
|
|
|
|
|
|
для: cheops
(10.01.2012 в 16:18)
| | в ряду id_pu есть пропуски, последовательности нет | |
|
|
|
|
|
|
|
для: Василий
(10.01.2012 в 17:17)
| | Тогда можно поступить следующим образом
<?php
...
$query = "SELECT id_pu FROM pu ORDER BY id_pu";
$res = mysql_query($query);
if(!$res) exit("Ошибка запроса - ".mysql_error());
if(mysql_num_rows($res))
{
$i = 1;
while($result = mysql_fetch_assoc($res))
{
echo "<a href='post_pu.php?id_pu=$result[id_pu]'>".($i++)."</a> ";
}
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(10.01.2012 в 19:49)
| | спасибо. все отлично выводится
как вместо "1, 2, 3, ... n@ " вывести "предыдущая страница" и "следующая"? | |
|
|
|
|
|
|
|
для: Василий
(10.01.2012 в 20:32)
| | Для этого нужно выбрать предыдущие две записи и следующие две записи, проще всего для этого воспользоваться запросами вида
<?php
$query = "SELECT
id_pu
FROM
pu
WHERE
id_pu < $_GET[id_pu]
ORDER BY
id_pu DESC
LIMIT 2";
?>
| который даст две предыдущие от $_GET[id_pu] записи и запрос вида
<?php
$query = "SELECT
id_pu
FROM
pu
WHERE
id_pu > $_GET[id_pu]
ORDER BY
id_pu
LIMIT 2";
?>
| который даст две следующие за $_GET[id_pu] записи. Если вам надо больше, то увеличивайте значение в LIMIT, меньше - соответственно уменьшайте. | |
|
|
|
|
|
|
|
для: cheops
(10.01.2012 в 20:39)
| | появились ссылки "1, 2" и после нажатия на одну из них - они исчезли
<?php
$query = "SELECT id_pu FROM pu WHERE approved='1' and id_pu < $_GET[id_pu] ORDER BY id_pu DESC LIMIT 2";
$res = mysql_query($query);
if(!$res) exit("Ошибка запроса - ".mysql_error());
if(mysql_num_rows($res))
{
$i = 1;
while($result = mysql_fetch_assoc($res))
{
echo "<a href='post_pu.php?id_pu=$result[id_pu]'>".($i++)."</a> ";
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Василий
(10.01.2012 в 21:03)
| | А сколько всего записей в pu и что сейчас в GET-параметре id_pu? | |
|
|
|
|
|
|
|
для: cheops
(10.01.2012 в 22:00)
| | всего записей 16.
id_pu = 1
если страница имеет значение id_pu = 3 то
имеет ссылки 1 и 2 | |
|
|
|
|
|
|
|
для: Василий
(10.01.2012 в 22:04)
| | При id_pu = 1 нет предыдущих записей... ничего не поделаешь, их просто нет. Теперь добавляйте следующие записи. | |
|
|
|
|
|
|
|
для: cheops
(10.01.2012 в 22:09)
| | поставил LIMIT 1
выходит "1" и "1"
как теперь чтобы вместо "1" было написано "следующая, и чтобы вместо другой "1" - предыдущая? | |
|
|
|
|
|
|
|
для: Василий
(10.01.2012 в 22:16)
| | У вас ведь два запроса? Укажите в обработчике одного запроса вместо ($i++) "следующая", а в обработчике другого - "предыдущая". Если слова окажутся перепутанным, поменяйте местами - все должно встать на свои места. | |
|
|
|
|
|
|
|
для: cheops
(10.01.2012 в 22:22)
| | все работатает.
нажимаешь на "предыдушая" отсчитывает назад, а если нажимаешь на "следущая" сразу переходит в самый конец.
Поясню, если есть id_pu с номерами: 1, 3, 5, 7, ... 99., то нажимая там где страница, к примеру, id_pu = 3 на "следующая" должна грузиться страница с id_pu = 5, но грузится там где id_pu =99
<?php
$res = mysql_query("SELECT COUNT(*) FROM pu WHERE approved='1'");
$row = mysql_fetch_row($res);
$total = $row[0]; // всего записей
echo "<strong><p style='MARGIN-LEFT: 15px'>Всего ПУ: ($total)</p></strong>";
$query = "SELECT id_pu FROM pu WHERE approved='1' and id_pu < $_GET[id_pu] ORDER BY id_pu DESC LIMIT 1";
$res = mysql_query($query);
if(!$res) exit("Ошибка запроса - ".mysql_error());
if(mysql_num_rows($res))
{
$i = 1;
while($result = mysql_fetch_assoc($res))
{
echo "<a href='post_pu.php?id_pu=$result[id_pu]'>".предыдущая."</a> ";
}
}
$query = "SELECT id_pu FROM pu WHERE approved='1' and id_pu > $_GET[id_pu] ORDER BY id_pu DESC LIMIT 1";
$res = mysql_query($query);
if(!$res) exit("Ошибка запроса - ".mysql_error());
if(mysql_num_rows($res))
{
$i = 1;
while($result = mysql_fetch_assoc($res))
{
echo "<a href='post_pu.php?id_pu=$result[id_pu]'>".следующая."</a> ";
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Василий
(12.01.2012 в 19:04)
| | подскажите, пожалуйста, где ошибка | |
|
|
|
|
|
|
|
для: Василий
(12.01.2012 в 19:04)
| | во втором запросе замените DESC на ASC | |
|
|
|
|
|
|
|
для: Lotanaen
(13.01.2012 в 16:29)
| | спасибо. работает | |
|
|
|