Перейти к содержанию
f4rr3ll1990

Проблема с пагинацией в админке

Рекомендуемые сообщения

Добрый день, помогите решить проблему.

Opencart 2.1.0.2 (rs.1)
Делаю фильтр товаров по полю "Отсутствие на складе" для админки.
Фильтр вроде-бы заработал но с пагинацией проблема, при переходе на вторую страницу все сбрасывается.
в модели products получаю массив из таблицы stock_status :

public function getProductStockStatusNames(){
		$query = $this->db->query("SELECT * FROM oc_stock_status");
		return $query->rows;
}

Далее в контроллере передаю массив в вид:
 

$data['status_names_arr'] = $this->model_catalog_product->getProductStockStatusNames();

В виде формирую select с выбором параметра (не в наличии, доступно на складе и т.д), stock_status_id использую как значение опции:
 

              <div class="form-group">
                <label class="control-label" for="filter_stock_status_id">Статус товара</label>
                <select name="filter_stock_status_id" id="filter_stock_status_id" class="form-control" />
                    <option value="*"></option>
                    <?php for ($i = 0; $i < count($status_names_arr); $i++){
                        if ($status_names_arr[$i]['stock_status_id']==$filter_stock_status_id) { ?>
                            <option value="<?php echo($status_names_arr[$i]['stock_status_id']); ?>" selected="selected"><?php echo($status_names_arr[$i]['name']); ?>&nbsp;&nbsp;&nbsp;&nbsp;</option>
                        <?php } else { ?>
                            <option value="<?php echo($status_names_arr[$i]['stock_status_id']); ?>">&nbsp;&nbsp;<?php echo($status_names_arr[$i]['name']); ?>&nbsp;&nbsp;&nbsp;&nbsp;</option>
                        <?php }
                    } ?>
                </select>
            </div>

Ниже в скрипте добавляю:
 

  // 
  var filter_stock_status_id = $('select[name=\'filter_stock_status_id\']').val();

	if (filter_stock_status_id != '*') {
		url += '&filter_stock_status_id=' + encodeURIComponent(filter_stock_status_id);
	}
  // 

затем в контроллере в нескольких местах (смотрел как сделан фильтр по категориям который был скачан где-то на просторах интернета):
 

if (isset($this->request->get['filter_stock_status_id'])) {
	$url .= '&filter_stock_status_id=' . $this->request->get['filter_stock_status_id'];
}

и еще вот это :
 

if (isset($this->request->get['filter_stock_status_id'])) {
	$filter_stock_status_id = $this->request->get['filter_stock_status_id'];
} else {
	$filter_stock_status_id = null;
}

и потом снова в модели:
 

if (!empty($data['filter_stock_status_id'])) {
	$sql .= " AND p.stock_status_id LIKE '" . $this->db->escape($data['filter_stock_status_id']) . "%'";
}

В результате фильтр вроде-бы работает, но при переходе на вторую страницу получаю 0 товаров, и еще как бонус Undefined variable: status_names_arr.
Помогите плиз)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

при переходе на 2 страницу, в ссылку вставляет перед &page Ваш фильтр?

Проверьте, где Вы вставили в контроллере $url, там можно ошибиться. Проверьте, чтоб был в getList()

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
10 минут назад, Leingard сказал:

при переходе на 2 страницу, в ссылку вставляет перед &page Ваш фильтр?

Проверьте, где Вы вставили в контроллере $url, там можно ошибиться. Проверьте, чтоб был в getList()

Да, урл формируется вроде-бы верно:
 

&filter_stock_status_id=5&page=2

$url вставил в getList , при чем в 3х местах, сам не понял зачем это, но там у всех остальных фильтров было также)

product.php

model_product.php

product_list.tpl

Изменено пользователем f4rr3ll1990

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, f4rr3ll1990 сказал:

Да, урл формируется вроде-бы верно:
 


&filter_stock_status_id=5&page=2

$url вставил в getList , при чем в 3х местах, сам не понял зачем это, но там у всех остальных фильтров было также)

product.php

 

Первое для операциями с товарами, второе для сортировки, третье как раз для пагинации

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 минуты назад, f4rr3ll1990 сказал:

Да, урл формируется вроде-бы верно:
 


&filter_stock_status_id=5&page=2

$url вставил в getList , при чем в 3х местах, сам не понял зачем это, но там у всех остальных фильтров было также)

product.php

 

выведите выше, что вообще приходит на 2 странице в $this->request->get['filter_stock_status_id']

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В каких местах добавили этот код?

if (!empty($data['filter_stock_status_id'])) {
	$sql .= " AND p.stock_status_id LIKE '" . $this->db->escape($data['filter_stock_status_id']) . "%'";
}

Должно быть для 2 методов

getTotalProducts и getProducts

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
10 минут назад, Leingard сказал:

 

выведите выше, что вообще приходит на 2 странице в $this->request->get['filter_stock_status_id']

там лежит '5'
а вот  $status_names_arr в котором лежит массив из таблицы oc_stock_status отдает undefined когда я на второй странице

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
6 минут назад, thentru сказал:

В каких местах добавили этот код?


if (!empty($data['filter_stock_status_id'])) {
	$sql .= " AND p.stock_status_id LIKE '" . $this->db->escape($data['filter_stock_status_id']) . "%'";
}

Должно быть для 2 методов

getTotalProducts и getProducts

 

getTotalProducts в модели проморгал
Спасибо всем огромное, все заработало)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и правильно не так
 

$sql .= " AND p.stock_status_id LIKE '" . $this->db->escape($data['filter_stock_status_id']) . "%'";

а так
 

$sql .= " AND p.stock_status_id = '" . (int)$data['filter_stock_status_id'] . "'";

filter_stock_status_id - это целое число

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 минуты назад, thentru сказал:

и правильно не так
 


$sql .= " AND p.stock_status_id LIKE '" . $this->db->escape($data['filter_stock_status_id']) . "%'";

а так
 


$sql .= " AND p.stock_status_id = '" . (int)$data['filter_stock_status_id'] . "'";

filter_stock_status_id - это целое число

Спасибо, сейчас поправлю) Я в пхп новичек)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.