Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Не могу вывести для страницы поиска пагинацию, пагинация
Astin  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 26 дней
Карма: 7




Приветствую Форумчане!

Что то или лыжи не едут то ли я торможу. Есть небольшой сайтик с партнерскими
товарами. Пагинация для товаров в категориях работает нормально.
А вот для страницы поиска никак не могу ее сделать,
очень нужна ваша помошь.

Есть файл настроек, где прописывается максимальный вывод товаров из поиска
// Настройки
$settings = array(

// Настроийки подключения к БД

// Количество товаров на странице

'items_per_page' => 14,

// Количество товаров на странице поиска
'items_per_page2' => 4,

//Еще настройки

// Валюта

'currency' => 'RUR',
);

Вот вот это
 'items_per_page2' => 4,

Использую для страницы поиска

Теперь есть класс для работы с БД и в нем есть вот такие функции, правда я их
немного переписал под пагинацию
	

// Получение списка категорий
public function CategoryGetAll() {
$rv = array();
// Пытаемся получить данные
if ($result = $this->query("SELECT * FROM `" . self::TABLE_NAME_CATEGORIES . "` WHERE `count` > 0")) {
// Если есть результаты
if ($result->num_rows) {
// Используем их
while ($row = $result->fetch_assoc()) {
$rv[] = $row;
}
}

// Освобождаем ресурсы
$result->free();
}
// Возвращаем результат
return $rv;
}

// Поиск товаров
public function OffersSearchForQuery($query, $offset, $limit) {
// Нормализуем входные данные
$count = $this->IntValue($count);
$query = preg_replace('/[^\pL\pN]+/u', '%', $query);
$query = preg_replace('/^[^\pL\pN]+/u', '', $query);
$query = preg_replace('/[^\pL\pN]+$/u', '', $query);
$query = $this->real_escape_string("%$query%");

$offset = $this->IntValue($offset);
$limit = $this->IntValue($limit);

// Возвращаемый результат
$rv = array();

// Строим запрос
$sql_query = "SELECT * FROM `" . self::TABLE_NAME_OFFERS . "`
WHERE `name` LIKE '
$query'

LIMIT
$offset, $limit";

// Пытаемся получить данные
if ($result = $this->query($sql_query)) {
// Если есть результаты
if ($result->num_rows) {
// Используем их
while ($row = $result->fetch_assoc()) {
$rv[] = $row;
}
}

// Освобождаем ресурсы
$result->free();
}
// Возвращаем результат
return $rv;
}

// Обёртка для SELECT FOUND_ROWS()
public function SelectFoundRows() {
// Возвращаемый результат
$rv = 0;
// Пытаемся получить данные
if ($result = $this->query("SELECT FOUND_ROWS() AS `rows`")) {
// Если есть результаты
if ($result->num_rows) {
// Используем их
$rv_tmp = $result->fetch_assoc();
$rv = $rv_tmp['rows'];
}
// Освобождаем ресурсы
$result->free();
}
// Возвращаем результат
return $rv;
}


Использую их для вывода инфы из поиска

Теперь сам файл search.php

//Этот файл цепляет с собой еще несколько файлов
include_once $_SERVER['DOCUMENT_ROOT'].'/conects/common.php';

// Получаем поисковый запрос
$search_query = isset($_GET['q']) ? $_GET['q'] : '';

$page = isset($_GET['page']) ? $_GET['page'] : 1;
if ($page < 1) $page = 1;



// Получаем список категорий
$categories_list = $DBAccess->CategoryGetAll();

// Здесь будет хэш id => info
$categories_hash = array();

// Дополняем данные
foreach ($categories_list as $key => $value) {
$categories_list[$key]['link'] = $Path->Category($value['id'], $value['title']);
$categories_list[$key]['current'] = FALSE;
$categories_hash[$value['id']] = $categories_list[$key];

}
////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////


// Выполняем поиск
$offers = $DBAccess->OffersSearchForQuery($search_query, ($page-1)*$settings['items_per_page2'], $settings['items_per_page2']);

$total_offers = $DBAccess->SelectFoundRows();

// Дополняем информацию о товарах
foreach ($offers as $key => $value) {
// Информация о категории
$offers[$key]['category'] = isset($categories_hash[$value['id_category']]) ? $categories_hash[$value['id_category']]['title'] : '';
$offers[$key]['category_link'] = isset($categories_hash[$value['id_category']]) ? $categories_hash[$value['id_category']]['link'] : '';

// "Прямая" ссылка
$offers[$key]['url'] = $Path->Go($value['id']);

// Ссылка на более подробную информацию
$offers[$key]['link'] = $Path->Offer($value['id'], $value['name']);

// Конвертируем цену
$price_tmp = $CBRF->Convert($value['price'], $value['currency'], $settings['currency']);
$offers[$key]['price'] = $price_tmp['sum'];
$offers[$key]['currency'] = $price_tmp['currency'];
}

////////////////////////////////////////////////////////////////////
//Пытаюсь Сделать пагинацию
$pages = array();
// Общее число страниц
$page_count = ceil($total_offers / $settings['items_per_page2']);
// А нужен ли вообще пейджер
if ($page_count > 1) {
$page_min = $page - 4;
if ($page_min < 1) $page_min = 1;

$page_max = $page + 4;
if ($page_max > $page_count) $page_max = $page_count;

if ($page_min > 1) {
$pages[] = array(
'page' => '<<',
'link' => $Path->Search($search_query, 1),
);

}

if ($page > 1) {
$pages[] = array(
'page' => '<',
'link' => $Path->Search($search_query, $page - 1),
);

}

for ($i = $page_min; $i <= $page_max; $i++) {
$pages[] = array(
'page' => $i,
'link' => $i == $page ? '' : $Path->Search($search_query, $i),
);

}

if ($page < $page_count) {
$pages[] = array(
'page' => '>',
'link' => $Path->Search($search_query, $page + 1),
);

}

if ($page_max < $page_count) {
$pages[] = array(
'page' => '>>',
'link' => $Path->Search($search_query, $page_count),
);

}
}



// Цепляем шаблон
include_once $Common->getTpl('pages/search');


Вот так выглядит функция из класса для работы с путями
$Path->Search


const PATH_SEARCH   = 'search';

// Путь к поиску
public function Search($query = '', $page = 1) {
$rv = self::PATH_SEARCH;
if ($query != '') {
$rv .= '?q=' . rawurlencode($query);
if ($page > 1) {
$rv .= '&page=' . $this->IntValue($page);
}

}

return $rv;
}


Ну и собственно часть шаблона где я то все вывожу
if ($search_query == '') {
?>

<div class="alert alert-danger" role="alert"><strong>Поисковый запрос не может быть пустым!</strong> </div>

<?php } else { ?>

<div class="row"><!-- for conclusion -->

<
div class="col-md-12 col-sm-12">
<
div class="name-search"><h1><span class="glyphicon glyphicon-ok search-oks"></span>
Результаты поиска по запросу:</h1></div>
<
div class="name-search2"><h3>«<?php echo htmlCh($search_query); ?>»</h3></div>
</
div>
<
div class="clearfix"></div>

<?php

if (!sizeof($offers)) {

print "<br />Извините, но ничего не найдено.";
}


foreach ($offers as $offer_info) {
?>
<div class="col-md-6 col-sm-6 col-xs-12 wr-good">
<
div class="panel panel-primarys panel-bl">
<
div class="panel-heading name-good"><?php print htmlCh($offer_info['name']); ?></div>
<
div class="panel-body text-center">
<?php if ($offer_info['picture'] != '') { ?>
<p class="wr-img"><a class="thumbnail" href="<?php print HOST.htmlCh($offer_info['link']); ?>">
<
img class="good-img" src="<?php print htmlCh($offer_info['picture']); ?>" /></a></p>
<?php } ?>

<table class="table table-condensed table-striped">
<
tbody><tr>
<
td class="tab-b"><span class="glyphicon glyphicon-usd"></span> Цена:</td>
<
td class="tab-b2"><?php print htmlCh($offer_info['price'].' '.$offer_info['currency']); ?></td>
</
tr>
<
tr>
<
td class="tab-b">Категория:</td>
<
td class="tab-b3"><a href="<?php print HOST.htmlCh($offer_info['category_link']); ?>"><?php print htmlCh($offer_info['category']) ?></a></td>
</
tr></tbody>
</
table>

<
div class="btn-toolbar" role="toolbar">
<
div class="btn-group btn-group-justified">
<
span class="btn btn-warnings2" title="<?php print htmlCh($offer_info['name']); ?>" onclick="GoTo ('<?php print HOST.htmlCh($offer_info['url']); ?>')">
<
span class="glyphicon glyphicon-shopping-cart"></span>  Купить</span>
<
a class="btn btn-primarys2" href="<?php print HOST.htmlCh($offer_info['link']); ?>">Подробнее</a>
</
div>
</
div>
</
div>
</
div>
</
div>


<?php
} ?>

<div class="clearfix"></div>



<?php


if (sizeof($pages))
{
print "<div class=\"col-md-12 col-sm12\"><ul class=\"pagination\">";

foreach ($pages as $page_data) {

if ($page_data['link'] != '') {

print "<li><a href=\"".HOST.htmlCh($page_data['link'])."\">".htmlCh($page_data['page'])."</a></li>\n";

} else {

print "<li class=\"active\"><span>".htmlCh($page_data['page'])." <span class=\"sr-only\">(current)</span></a></li>\n";
}
}

print "</ul></div>\n";
}

print "</div><!-- end conclusion -->\n";
}


Запарился, от жары уже башка не варит что не так.

Результат запроса выводится но только с настройками указаными выше
// Количество товаров на странице поиска
'items_per_page2' => 4,


Пропишу 12, выведет 12, пропишу 10 выведет 10.

Но почему не выводится пагинация не могу понять

_
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 26 дней
Карма: 7




Все, проблема решена

Вместо
// Выполняем поиск
$offers = $DBAccess->OffersSearchForQuery($search_query, ($page-1)*$settings['items_per_page2'], $settings['items_per_page2']);
// Получаем общее количество товаров для выбранной категории
$total_offers = $DBAccess->SelectFoundRows();

Нужно было поменять местами, сначало получить общее кол-во товаров
ну и получилось вот так
// Получаем общее количество товаров для выбранной категории
$total_offers = $DBAccess->SelectFoundRows();

// Выполняем поиск
$offers = $DBAccess->OffersSearchForQuery($search_query, ($page-1)*$settings['items_per_page2'], $settings['items_per_page2']);
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса