|
|
|
| Сделал постраничную навигацию (по типовому образцу), всё работает, но есть одна проблемка: на странице есть форма поиска и при вводе в нее данных и последующем поиске, как и положено, на первой странице листинга отображаются найденные варианты, и на навигационных ссылках меньшее количество страниц. Но при нажатии на ссылку следующей страницы, навигация происходит уже не по найденным ранее значениям, а по всей таблице базы данных.
Подскажите, как сделать, чтоб данные не терялись, и навигация происходила только по выбранным значениям. | |
|
|
|
|
|
|
|
для: 7han
(03.01.2009 в 06:28)
| | Как вариант можно условие поиска записать в сессию. | |
|
|
|
|
|
|
|
для: 7han
(03.01.2009 в 06:28)
| | проблема в том, что параметры поиска из формы на первую страницу Вы передаете, а через ссылки навигации - нет.
Добавьте параметры в ссылки навигации - всё заработает. | |
|
|
|
|
|
|
|
для: Trianon
(03.01.2009 в 07:25)
| | Подскажите на примере, пожалуйста, а то не могу сообразить.
Набор ссылок вот такой:
if ($page != 1) $pervpage = ' <a href= ./?page=1><<</a> ';
if ($page != $total) $nextpage = ' <a href= ./?page='.$total.'>>></a> ';
if($page - 2 > 0) $page2left = ' <a href= ./?page='. ($page - 2) .'>'. ($page - 2) .'</a> |';
if($page - 1 > 0) $page1left = '<a href= ./?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
if($page + 2 <= $total) $page2right = '| <a href= ./?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $total) $page1right = ' | <a href= ./?page='. ($page + 1) .'>'. ($page + 1) .'</a>'; | |
|
|
|
|
|
|
|
для: 7han
(03.01.2009 в 08:21)
| | Если использовать одну функцию для постраничной навигации общего вывода и вывода результатов поиска, боюсь одного добавления праметров в GET может оказаться недостаточным, либо довольно сложным. Проще всё таки использовать сессию. Примерно так:
<?php
$_SESSION['where'] = isset($_POST['search'])?
"WHERE `text` LIKE '%".mysql_escape_string($_POST['search'])."%'":$_SESSION['where'];
$result = mysql_query("SELECT COUNT(*) AS cnt
FROM `table` ".$_SESSION['where']." ")or die ('Error: 1' . mysql_error());
$posts = mysql_result($result,0,'cnt');
if(!$page&&($posts-$num) > $num)
.
.
.
$result = mysql_query("SELECT `text`
FROM `table` ".$_SESSION['where']." .... LIMIT ".$start.", ".$num."")
or die ('Error: 2' . mysql_error());
| Только при возврате на общий вывод нужно обнулить $_SESSION['where'].
Код, который я привел в качестве примера, просто иллюстрация принципа и нуждается в доработке. | |
|
|
|
|
|
|
|
для: Николай2357
(03.01.2009 в 12:05)
| | >Если использовать одну функцию для постраничной навигации общего вывода и вывода результатов поиска, боюсь одного добавления праметров в GET может оказаться недостаточным, либо довольно сложным.
Вообще-то, это стандартная практика. В чем сложности-то? | |
|
|
|
|
|
|
|
для: Trianon
(03.01.2009 в 14:12)
| | При том варианте постраничной навигации, который используется, при каждом обращении формируется новый запрос, Вам же это известно лучше меня. Привязывать ключевые слова ко всем ссылкам навигации мне кажется гораздо сложнее, чем один раз записать в сессию... А ещё придется всё это кодировать и раскодировать. Может я чего то не уловил? | |
|
|
|
|
|
|
|
для: 7han
(03.01.2009 в 08:21)
| | Нужно еще знать набор параметров поиска. | |
|
|
|
|
|
|
|
для: Trianon
(03.01.2009 в 14:13)
| | Ну к примеру, есть просто выборка диапазона цен. То есть в запросе выбираются:
price>'100' AND price1<'1000'.
Как пролистать диапазон выбранных значений?
А то мне с сессиями сложновато чего-то. | |
|
|
|
|
|
|
|
для: 7han
(03.01.2009 в 15:32)
| | какими параметрами GET-запроса это передается?
Собственно, можно решать задачу абстрактно.
преобразовать все элементы массива GET кроме page в строку параметров, и дописывать её к ссылке.
<?
$p = '';
foreach($_GET as $k =>$v)
if($k != 'page')
if(is_array($v))
foreach($v as $k1 =>$v1)
$p .= '&' . $k . '[' .$k1. ']=' . rawurlencode($v1);
else
$p .= '&' . $k . '=' . rawurlencode($v);
$p = htmlspecialchars($p);
//........
for($n = 1; $n < $num; $n++)
{
//........
echo "<a href=\"?page=$n$p\" > $n </a>"
//........
}
|
| |
|
|
|
|
|
|
|
для: Trianon
(03.01.2009 в 14:13)
| | Вопрос открыт...
Может подкинете еще вариант с GET ? | |
|
|
|