Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Проблема: Фильтр "И" и пагинация


Basil77

Recommended Posts

Уважаемые специалисты прошу у вас помощи. Я полный чайник в программировании. Сделал один магазин на OpenCart 2.3.0.2. Все работало нормально. Но потом я решил убрать все отключенные модули и «накуролесил». Вылез ряд проблем. Что я удалял уже не помню. Проблема такая:

Магазин по продаже семян томатов. Есть фильтр, который работает по 4 параметром (в режиме «И»). Ставлю в фильтре флажки, например:

розовые (160)

высокорослые (1.5 м....) (429)

салатное (375)

Крупноплодные (от 300 гр) (328)

Нажимаю поиск. Открывается первая страница – все правильно. Адрес страницы: www.shop.allatomatiki.ru/tomaty&filter=2,15,16,21

Внизу написано сколько всего страниц будет и товаров 69. Если навести курсор внизу на 2-ю страницу (не нажимая на цифру) то показывает что 2-я страница будет иметь адрес: www.shop.allatomatiki.ru/tomaty&filter=2,15,16,21&page=2

Если нажать на цифру 2, то открывается страница с адресом: www.shop.allatomatiki.ru/tomaty?filter=2%252C15%252C16%252C21&page=2

Товары показаны только по первому параметру (то есть фильтр показывает в режиме «ИЛИ») и внизу уже написано всего товаров 160. То есть столько, сколько в первом параметре поиска. И не показаны ни один флажок в фильтре. Если вручную в адресной строке поставить запятые вместо %252C, то сразу правильно показывает 2-ю страницу и снова показаны все флажки в фильтре. Так происходит на любой странице. Если вернуться снова на 1-ю страницу, то она уже тоже показывает направильно.

 

При этом просто в пагинации товара (без фильтра) все работает нормально и адреса страниц без ошибок. Помогите это исправить. Откуда берутся вот эти символы %252C ? Где надо внести правку ? Или хотя бы подскажите в каком файле формируется адресная строка для пагинации с фильтром «И».

 

 

Надіслати
Поділитися на інших сайтах


41 минуту назад, DariyGRAY сказал:

Покажите что у вас в system\library\pagination.php

а причем здесь пагинация?
ее задача - только подставить номер старницы

надо смотреть формирователь url - именно он отвечает за формиование

и не или
Просто приходит длинный параметр с числом в начале, а там- explode(',') и (int)

 

Надіслати
Поділитися на інших сайтах

В 17.11.2020 в 09:33, DariyGRAY сказал:

Покажите что у вас в system\library\pagination.php

Вот что там:

Спойлер

<?php
class Pagination {
  public $total = 0;
  public $page = 1;
  public $limit = 20;
  public $num_links = 8;
  public $url = '';
  public $text_first = '|&lt;';
  public $text_last = '&gt;|';
  public $text_next = '&gt;';
  public $text_prev = '&lt;';

  public function render() {
    $total = $this->total;

    if ($this->page < 1) {
      $page = 1;
    } else {
      $page = $this->page;
    }

    if (!(int)$this->limit) {
      $limit = 10;
    } else {
      $limit = $this->limit;
    }

    $num_links = $this->num_links;
    $num_pages = ceil($total / $limit);

    $this->url = str_replace('%7Bpage%7D', '{page}', $this->url);

    $output = '<ul class="pagination">';

    if ($page > 1) {
      $output .= '<li><a href="' . str_replace(array('&amp;page={page}', '&page={page}'), '', $this->url) . '">' . $this->text_first . '</a></li>';
      
      if ($page - 1 === 1) {
        $output .= '<li><a href="' . str_replace(array('&amp;page={page}', '&page={page}'), '', $this->url) . '">' . $this->text_prev . '</a></li>';
      } else {
        $output .= '<li><a href="' . str_replace('{page}', $page - 1, $this->url) . '">' . $this->text_prev . '</a></li>';
      }
    }

    if ($num_pages > 1) {
      if ($num_pages <= $num_links) {
        $start = 1;
        $end = $num_pages;
      } else {
        $start = $page - floor($num_links / 2);
        $end = $page + floor($num_links / 2);

        if ($start < 1) {
          $end += abs($start) + 1;
          $start = 1;
        }

        if ($end > $num_pages) {
          $start -= ($end - $num_pages);
          $end = $num_pages;
        }
      }

      for ($i = $start; $i <= $end; $i++) {
        if ($page == $i) {
          $output .= '<li class="active"><span>' . $i . '</span></li>';
        } else {
          if ($i === 1) {
          $output .= '<li><a href="' . str_replace(array('&amp;page={page}', '&page={page}'), '', $this->url) . '">' . $i . '</a></li>';
          } else {
            $output .= '<li><a href="' . str_replace('{page}', $i, $this->url) . '">' . $i . '</a></li>';
          }
        }
      }
    }

    if ($page < $num_pages) {
      $output .= '<li><a href="' . str_replace('{page}', $page + 1, $this->url) . '">' . $this->text_next . '</a></li>';
      $output .= '<li><a href="' . str_replace('{page}', $num_pages, $this->url) . '">' . $this->text_last . '</a></li>';
    }

    $output .= '</ul>';

    if ($num_pages > 1) {
      return $output;
    } else {
      return '';
    }
  }
}

 

Надіслати
Поділитися на інших сайтах


В 17.11.2020 в 13:48, AlexDW сказал:

Спасибо. Похоже я точно что-то там напутал. Пытался с http перейти на https.

Вроде все сделал как советуют в статьях. Но у меня на хостинге стоит PHP 7.1

Кроме всего там есть копка "переадресовывать на HTTPS " И я ее тоже включил. 

 

Надіслати
Поділитися на інших сайтах


9 годин назад, Basil77 сказав:

Пытался с http перейти на https.

Вроде все сделал как советуют в статьях.

И вы думаете, что в тех статьях всё правильно только потому, что они на каких-то заборах сайтах?

 

У вас пагинация сейчас, как и вообще все ссылки на сайте кроме оформления заказа - без https. Вы этого не замечаете из-за редиректа, который в конечном счёте таки приводит вас на адрес с https. Но в процессе происходит кодирование, которое и ломает вам фильтрацию.

 

Отсутствие https означает, что у вас в конфигах не везде https, а должно быть везде, где есть адрес сайта (а то некоторые начинают ещё и константы переименовывать с перепугу).

  • +1 1
Надіслати
Поділитися на інших сайтах


6 часов назад, Dotrox сказал:

И вы думаете, что в тех статьях всё правильно только потому, что они на каких-то заборах сайтах?

 

У вас пагинация сейчас, как и вообще все ссылки на сайте кроме оформления заказа - без https. Вы этого не замечаете из-за редиректа, который в конечном счёте таки приводит вас на адрес с https. Но в процессе происходит кодирование, которое и ломает вам фильтрацию.

 

Отсутствие https означает, что у вас в конфигах не везде https, а должно быть везде, где есть адрес сайта (а то некоторые начинают ещё и константы переименовывать с перепугу).

Спасибо! Теперь хоть появилось представление, в чем искать проблему.

Надіслати
Поділитися на інших сайтах


Еще раз спасибо всем!

На хостинге был включен редирект 302. Отключил его.

Прописал все как надо в htaccess и в двух конфигах.

Фильтр заработал правильно.

Вроде все внутренние ссылки имеют https без www.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.