На форуме 9558 тем, 76453 сообщений, 44667 участников
тема · 71 277 просмотров · 135 ответов

Настройка модуля Фильтр

Общие вопросы
читают: 0 участников и 1 гость
порядок
25 сен 2017 18:04#121
Romans написал(а): ↑Ссылка удалена из за разногласий с владельцами вышеуказанного ресурса.
Файл прикрепил

Описание
Вроде и версия Opencart получила дальнейшее развитие в виде ветки 2.x
А детские болезни от предыдущей остались - в данном случае проблема со стандартным фильтром товаров при наличии нескольких групп фильтров.

Патч решает проблему с фильтром в Opencart 2.0, меняя логику выбора групп фильтров.

до патча:
при фильтрации будут выбраны все товары, у которых совпадает ХОТЯ БЫ один параметр в фильтрах (без учета групп фильтров)

после патча:
при фильтрации будут выбраны только те товары, у которых совпадут ВСЕ отмеченные параметры в фильтрах (с учетом групп фильтров)

Патч является адаптацией для Opencart 2.x этого решения

Актуален для Opencart версий 2.0.0.0 - 2.0.3.1

Обратите внимание:
Если уже установлен сторонний фильтр товаров, например filter pro - использовать патч нет смысла
(да и не рекомендуется, во избежание проблем совместимости)

Установка:
зайти в Extensions->Extension Installer и загрузить файл fix_filter.ocmod.xml
потом зайти в Modifications и обновить кэш модификаций


Щастья. здоровля и успехов в личной жизни!
27 сен 2017 17:01#122
Vlad написал(а): ↑открываете файл шаблона категории \catalog\view\theme\default\template\product\category.tpl

смотрите где то место, куда надо вставить фильтр.
Затем в то место вставляете код левой колонки <?php echo $column_left; ?>

Ну а далее в макета, размещаете ТОЛЬКО модуль фильтра в левую колонку на макет Category


Куда именно ставить помогите,а)
27 сен 2017 17:04#123
ksen написал(а): ↑Спасибо огромное, встало куда надо, только теперь фильтр отображается и слева и где нужно. Не подскажите ещё как убрать фильтр слева? Или он теперь будет дублироваться?

у вас все получилось? как для несведущего сделать?
11 окт 2017 13:32#124
Это автозаполнение просто жесть. У меня в фильтре около 80 параметров, нужно каждый выбирать. Как Ускорить процесс подключения фильтров в категорию без автозаполнения?
11 окт 2017 14:13#125
Elex34 написал(а): ↑Как Ускорить процесс подключения фильтров в категорию без автозаполнения?

Купить любой платный фильтр.
15 окт 2017 15:28#126
Тут кто то уже спрашивал, как сделать, чтоб фильтры писались не в столбик, а в строчку или ещё лучше в несколько столбиков (например 3 мне хватит). Ответ был единственный, поставить фильтр наверх или низ страницы. Он у меня так и стоит, более того, я его переместила по совету хорошего дяди здесь ниже названия категории, но вот со стилями у меня почему то не получается, пыталась чего то менять в bootstrap.min.css, не говоря уже об stylesheet.css. ничего не получается, кое что из дизайна изменила прямо в шаблоне фильтра в div вписывала style. Но превратить колонку в строку не удаётся((( Помогите, кто знает, пжл.
15 окт 2017 15:42#127
КСЕНА написал(а): ↑Тут кто то уже спрашивал, как сделать, чтоб фильтры писались не в столбик, а в строчку или ещё лучше в несколько столбиков (например 3 мне хватит). Ответ был единственный, поставить фильтр наверх или низ страницы. Он у меня так и стоит, более того, я его переместила по совету хорошего дяди здесь ниже названия категории, но вот со стилями у меня почему то не получается, пыталась чего то менять в bootstrap.min.css, не говоря уже об stylesheet.css. ничего не получается, кое что из дизайна изменила прямо в шаблоне фильтра в div вписывала style. Но превратить колонку в строку не удаётся((( Помогите, кто знает, пжл.

УПС!! Пока писала, думала и нашла ответ, оставляю и вопрос, и ответ, может кому пригодится. В шаблон фильтра к <div class="list-group-item"> добавила style="column-count:2; column-width:150px; height:100px;" Вышло 2 колонки с соответствующим размером. Добавила в шаблон, потому что вопрос с файлами стилей остаётся не решённым((( там чего то не правится, хотя кеши чищу
15 окт 2017 15:44#128
Не забудьте проверить в мобильной версии!
15 окт 2017 15:55#129
КСЕНА написал(а): ↑а в строчку или ещё лучше в несколько столбиков (например 3 мне хватит)

Править как минимум только шаблон фильтра и стили. Попробуйте добавить стили
code
div[id^="filter-group"] .checkbox {
    display: inline;
}

А лучше покажите сайт.. сейчас придумаем ))
12 дек 2018 18:32#130
Ребят как 1500 товаров быстро добавить в фильтр? Допустим по цвету)) в ручную напряг ппц
12 дек 2018 18:48· изменено#131
marshall написал(а): ↑Ребят как 1500 товаров быстро добавить в фильтр? Допустим по цвету)) в ручную напряг ппц

Для автомата нужна какая то объективная логика, допустим в названии есть цвет или в атрибутах, можно также исходя из цветового диапазона картинки получить цвета.
12 июл 2020 20:00#132
Romans написал(а): ↑\catalog\controller\module\filter.php

находим в начале
php
            $parts = array();
}

$category_id = end($parts);


и меняем на
php
      $parts = array();
$this->request->get['path'] = '20';
}

$category_id = 20;


20 - это категория товаров, именно по ней с главной и будет поиск.


Фильтр на главной появился, но при изменении языка вместо англоязычной версии главной страницы переходит на англоязычную версию страницы категории с фильтром. Как можно исправить? Спасибо.
13 июл 2020 12:03#133
linkfor написал(а): ↑Как можно исправить? Спасибо.

Переделать логику редиректа при смене языка. Ответ зависит от многих факторов втч и версии движка.
13 июл 2020 15:13#134
Ravilr написал(а): ↑Переделать логику редиректа при смене языка. Ответ зависит от многих факторов втч и версии движка.


Это я понимаю. И скорее всего это просто, если понимаешь php, но я очень поверхностно знаком, поэтому надеюсь сэкономить время, спросив на форуме.
language.php

code
<?php
// *    @source        See SOURCE.txt for source and other copyright.
// *    @license    GNU General Public License version 3; see LICENSE.txt

class ControllerCommonLanguage extends Controller {
    public function index() {
        $this->load->language('common/language');

        $data['action'] = $this->url->link('common/language/language', '', $this->request->server['HTTPS']);

        $data['code'] = $this->session->data['language'];

        $this->load->model('localisation/language');

        $data['languages'] = array();

        $results = $this->model_localisation_language->getLanguages();

        foreach ($results as $result) {
            if ($result['status']) {
                $data['languages'][] = array(
                    'name' => $result['name'],
                    'code' => $result['code']
                );
            }
        }



        if (!isset($this->request->get['route'])) {

            if($this->config->get('config_seo_pro')){
                $redirect_data = ['route' => 'common/home', 'url' => '', 'protocol' => $this->request->server['HTTPS']];
                $data['redirect'] = base64_encode(json_encode($redirect_data));
            } else {
                $data['redirect'] = $this->url->link('common/home');
            };
            
        } else {
            $url_data = $this->request->get;

            unset($url_data['_route_']);

            $route = $url_data['route'];

            unset($url_data['route']);

            $url = '';

            if ($url_data) {
                $url = '&' . urldecode(http_build_query($url_data, '', '&'));
            }
            
            if($this->config->get('config_seo_pro')){
                $redirect_data = ['route' => $route, 'url' => $url, 'protocol' => $this->request->server['HTTPS']];
                $data['redirect'] = base64_encode(json_encode($redirect_data));
            } else {
                $data['redirect'] = $this->url->link($route, $url, $this->request->server['HTTPS']);
            };
            
        }
        // Отдельный twig смены языка для главной
if (!isset($this->request->get['route']) || isset($this->request->get['route']) && $this->request->get['route'] == 'common/home') {
            return $this->load->view('common/language_home', $data);
                
//??? присвоить  переменной адрес главной, чтобы при смене языка на главной с подключенным фильтром товаров, на главной не перебрасывало на страницу категории
            
            
//???            $url = $this->url->link('common/home');           
//               
                
                
                } else {
//
        return $this->load->view('common/language', $data);
    }
    }
    public function language() {
        if($this->config->get('config_seo_pro'))
            $this->seo_language();
            
        if (isset($this->request->post['code'])) {
            $this->session->data['language'] = $this->request->post['code'];
        }
        
        if (isset($this->request->post['code'])) {
            $this->session->data['language'] = $this->request->post['code'];
        }
        
        
        if (isset($this->request->post['redirect'])) {
            $this->response->redirect($this->request->post['redirect']);
        } else {
            $this->response->redirect($this->url->link('common/home'));
        }
    }
    
    private function seo_language() {
        if (isset($this->request->post['code'])) {
            $this->session->data['language'] = $this->request->post['code'];
            $languages = $this->model_localisation_language->getLanguages();
            if (isset($languages[$this->request->post['code']])) {
                $this->config->set('config_language_id', $languages[$this->request->post['code']]['language_id']);   
            }
        }

        if (isset($this->request->post['redirect'])) {
            $redirect = $this->request->post['redirect'];
            $redirect_data = json_decode(base64_decode($redirect), true);
            extract($redirect_data);
            if(isset($route)&& isset($url) && isset($protocol)) {
                $redirect_url = $this->url->link($route, $url, $protocol);
            } else {
                $redirect_url = $this->url->link('common/home');
            }
            $this->response->redirect($redirect_url);
        } else {
            $this->response->redirect($this->url->link('common/home'));
        }
        
    }
        
}


Внизу в макет главной страницы вставлен фильтр товаров с кодом:
filter.php

code
<?php
class ControllerExtensionModuleFilter extends Controller {
    public function index() {
        if (isset($this->request->get['path'])) {
            $parts = explode('_', (string)$this->request->get['path']);
        } else {
    //        $parts = array();
    //    }
    //
    //    $category_id = end($parts);
        
            $parts = array();
            $this->request->get['path'] = '59';
        }
       $category_id = 59;
     //
    
    
        $this->load->model('catalog/category');

        $category_info = $this->model_catalog_category->getCategory($category_id);

        if ($category_info) {
            $this->load->language('extension/module/filter');

            $url = '';

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

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

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

            $data['action'] = str_replace('&amp;', '&', $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url));

            if (isset($this->request->get['filter'])) {
                $data['filter_category'] = explode(',', $this->request->get['filter']);
            } else {
                $data['filter_category'] = array();
            }

            $this->load->model('catalog/product');

            $data['filter_groups'] = array();

            $filter_groups = $this->model_catalog_category->getCategoryFilters($category_id);

            if ($filter_groups) {
                foreach ($filter_groups as $filter_group) {
                    $childen_data = array();

                    foreach ($filter_group['filter'] as $filter) {
                        $filter_data = array(
                            'filter_category_id' => $category_id,
                            'filter_filter'      => $filter['filter_id']
                        );

                        $childen_data[] = array(
                            'filter_id' => $filter['filter_id'],
                            'name'      => $filter['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : '')
                        );
                    }

                    $data['filter_groups'][] = array(
                        'filter_group_id' => $filter_group['filter_group_id'],
                        'name'            => $filter_group['name'],
                        'filter'          => $childen_data
                    );
                }

                return $this->load->view('extension/module/filter', $data);
            }
        }
    }
    
}



Версия ocStore 3.0.2.0
14 июл 2020 11:20#135
linkfor написал(а): ↑Версия ocStore 3.0.2.0

Скорей всего, проще тут \catalog\controller\common\language.php

перед
code
return $this->load->view('common/language', $data);


вставить что то подобное
php
        if (isset($this->request->get['path'])) {
if ($this->request->get['path'] == 20 ) {
$data['redirect'] = $this->url->link('common/home');
}
}


но тут нужно учесть, что если сменить язык в категории 20, то редирект пойдет на главную.
14 июл 2020 13:31#136
Ravilr написал(а): ↑Скорей всего, проще тут \catalog\controller\common\language.php

перед
code
return $this->load->view('common/language', $data);


вставить что то подобное
php
        if (isset($this->request->get['path'])) {
if ($this->request->get['path'] == 20 ) {
$data['redirect'] = $this->url->link('common/home');
}
}


но тут нужно учесть, что если сменить язык в категории 20, то редирект пойдет на главную.

Спасибо за ответ, но не заработало.

Если кому понадобится, то победил это так:
в \catalog\controller\common\language.php добавил строку
code
private function seo_language() {


        if (isset($this->request->post['code'])) {
            $this->session->data['language'] = $this->request->post['code'];
            $languages = $this->model_localisation_language->getLanguages();
            if (isset($languages[$this->request->post['code']])) {
                $this->config->set('config_language_id', $languages[$this->request->post['code']]['language_id']); 
            }
        }
        if (isset($this->request->post['redirect'])) {
            $redirect = $this->request->post['redirect'];
            $redirect_data = json_decode(base64_decode($redirect), true);
            extract($redirect_data);
  
            if(isset($route)&& isset($url) && isset($protocol)) {
//строка чтобы  при смене языка на главной (с подключенным фильтром товаров на главной) не перебрасывало на страницу категории         
            if ($url == '&path=20' && $route == 'common/home')    {$url = '';}
//строка чтобы при смене языка на главной (с подключенным фильтром товаров на главной) не перебрасывало на страницу категории   
       
                $redirect_url = $this->url->link($route, $url, $protocol);
            } else {
                $redirect_url = $this->url->link('common/home');
            }
            $this->response->redirect($redirect_url);
        } else {
            $this->response->redirect($this->url->link('common/home'));
        }
      
    }
      
}
сообщения 121–136 из 136
Чтобы ответить, войдите или зарегистрируйтесь.

Похожие темы