|
|
|
| Привет еще раз! Проблема такова. Не работает поиск с пагинатором.
Когда делаю так, все нормально - находит все фильтры с БД, только выводит все страницы (75) а товара на (9) страниц. Т.е Надо както убрать ненужные ссылки (страницы) (выводитьтолько рабочие страницы):
<?
include "setup/opt.php";
$count_per_page = 20;
$page = 1;
$result = mysql_query('SELECT round(count(id)/' . $count_per_page . ') FROM PRICELIST');
$counts = mysql_fetch_row($result);
$page_max = $counts[0];
$poisk = фильтр;
IF (!empty($_GET['page'])) {
$page = (int) $_GET['page'];
IF ($page > $page_max)
$page = $page_max;
IF ($page < 1)
$page = 1;
}
// Запрос
$res = mysql_query('SELECT SQL_CALC_FOUND_ROWS * FROM `PRICELIST` WHERE nametovar LIKE "%'.$poisk.'%" LIMIT ' .(($page - 1) * $count_per_page). ', ' .$count_per_page);
// Считаем, сколько записей удовлетворяют условиям
$cnt = mysql_result(mysql_query('SELECT FOUND_ROWS()'), 0);
// Формируем вывод
$table = "<table width=\"50%\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n";
IF(mysql_num_rows($res) > 0)
while($row = mysql_fetch_assoc($res))
{
$table .= "<tr>\n<td>\n\t". $row['nametovar']. "\n</td>\n</tr>\n";
}
echo '<tr><td>';
FOR ($i=1; $i<$page_max; ++$i) {
IF ($i != $page) {
echo '<a href="?page=' . $i . '$poisk='.$poisk.'">'.$i.'</a> ';
}
else {
echo ''.$i.' ';
}
}
echo '</td></tr>';
$table .= "</table>\n";
echo $table;
echo 'Всего найдено '. $cnt .' строк'
?>
|
Когда пытаюсь найти через поиск - на первой странице товар выводит, перпеходя на последующие страницы - вообще нечего не выводит :
ФОРМА:
<form action="poisk.php" method="GET">
<td><input type="text" name="poisk" class="form-text" maxlength="30" size="35" value="<?php $_GET['poisk']; ?>Поиск по прайсу..." onblur="if(this.value=='') this.value='Поиск по прайсу...';" onfocus="if(this.value=='Поиск по прайсу...') this.value='';" border="0"></td>
<td width="10" height="25">
<img src="http://www.cyberforum.ru/images/1_19.jpg" width="10" height="25" alt=""></td>
<td width="38" height="25">
<input style="border:0px; width:38; height:25; background:url('images/1_20.jpg')" type="submit" name="go1" value=""></td>
</form>
|
ОБРАБОТКА:
<?
include "setup/opt.php";
mysql_select_db($DB);
$poisk = '';
IF (isset($_GET['poisk'])){
$poisk = strip_tags($_GET['poisk']);
}
$poisk = trim($poisk);
IF (!empty($poisk)){
$count_per_page = 20;
$page = 1;
$result = mysql_query('SELECT round(count(id)/' . $count_per_page . ') FROM PRICELIST');
$counts = mysql_fetch_row($result);
$page_max = $counts[0];
IF (!empty($_GET['page'])) {
$page = (int) $_GET['page'];
IF ($page > $page_max)
$page = $page_max;
IF ($page < 1)
$page = 1;
}
// Запрос
$res = mysql_query('SELECT SQL_CALC_FOUND_ROWS * FROM `PRICELIST` WHERE nametovar LIKE "%'.$poisk.'%" LIMIT ' .(($page - 1) * $count_per_page). ', ' .$count_per_page);
// Считаем, сколько записей удовлетворяют условиям
$cnt = mysql_result(mysql_query('SELECT FOUND_ROWS()'), 0);
// Формируем вывод
$table = "<table width=\"50%\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n";
IF(mysql_num_rows($res) > 0)
while($row = mysql_fetch_assoc($res))
{
$table .= "<tr>\n<td>\n\t". $row['nametovar']. "\n</td>\n</tr>\n";
}
echo '<tr><td>';
FOR ($i=1; $i<$page_max; ++$i) {
IF ($i != $page) {
echo '<a href="?page=' . $i . '$poisk='.$poisk.'">'.$i.'</a> ';
}
else {
echo ''.$i.' ';
}
}
echo '</td></tr>';
$table .= "</table>\n";
echo $table;
echo 'Всего найдено '. $cnt .' строк';
}
?>
|
| |
|
|
|
|
|
|
|
для: RuslanMRP
(06.10.2010 в 11:27)
| | $result = mysql_query('SELECT round(count(id)/' . $count_per_page . ') FROM PRICELIST');
$counts = mysql_fetch_row($result);
$page_max = $counts[0];
Ты тут определяешь количество страниц если брать в расчет всю таблицу целиком
А результат поиска у тебя намного меньше, ты же выбираешь только часть значений
$res = mysql_query('SELECT SQL_CALC_FOUND_ROWS * FROM `PRICELIST` WHERE nametovar LIKE "%'.$poisk.'%" LIMIT ' .(($page - 1) * $count_per_page). ', ' .$count_per_page);
Поэтому попробуй при определении $page_max добавить условии поиска
$result = mysql_query('SELECT round(count(id)/' . $count_per_page . ') FROM PRICELIST' WHERE nametovar LIKE "%'.$poisk.'%"); | |
|
|
|
|
|
|
|
для: captain-america
(06.10.2010 в 16:32)
| | За это огромное спасибо! Все работает.
Может подскажите. Что в поиске не так? Почему выводит только на первой странице.... а если задовать явно, то все нормально | |
|
|
|
|
|
|
|
для: RuslanMRP
(06.10.2010 в 17:16)
| | Про поиск.
У вас верно работает поиск. Скажем у вас в таблице 1 тыс товаров. Вы выводите их по 20 штук на странице. У вас будет 50 страниц в пагинаторе.
При использовании поискового слова размер выводимого контента сокращается.
Скажем вы искали товар, в название которого входит "пылесоc". У вас таких записей нашлось 120. Это значит что для конкртеной поисковой фразы пагинатор будет состоять из 6 страниц.
А если найдется меньше 20 записей, то у вас будет только одна страница в пагинаторе.
Для теста попробуйте расширить свою базу и вводить часть слова, которое встречается очень часто. | |
|
|
|
|
|
|
|
для: captain-america
(06.10.2010 в 17:48)
| | Я об этом и говорю, что у меня данного товара, например "фильтров" (167). Вывожу по 20 получаеться 7 страниц. Товар выводит только на первой, как только я перехожу на какую-либо другую страницу - нечего не отображает - даже страницы.
Если же явно задаю не переменную $poisk, а "фильтр" - все отлично работает. Получаеться что $poisk не передаеться на следующие страницы или что-то другое.
Можите помочь? | |
|
|
|
|
|
|
|
для: RuslanMRP
(07.10.2010 в 10:40)
| |
echo '<a href="?page=' . $i . '$poisk='.$poisk.'">'.$i.'</a> ';
|
Если у вас так в коде, то ошибка в этом , только сейчас заметил
Должно быть &poisk
echo '<a href="?page=' . $i . '&poisk='.$poisk.'">'.$i.'</a> ';
|
| |
|
|
|
|
|
|
|
для: captain-america
(07.10.2010 в 10:45)
| | ОГРОМНОЕ СПАСИБО!!!!!!!!!! ЗА ТОЧНО ПОМОГАЕТЕ НАЧИНАЮЩИМ!!!!!!! СПАСИБО! | |
|
|
|