Jump to content

Баг фильтра. Фильтр сбрасывает выбранные значения.


yuriy.zuikov

Recommended Posts

Добрый день. Версия престы  1.6.0.6. Решил поделится опытом решения такого бага. Решение плохое, но лучше так чем ни как.

Есть сайт в котором категории товаров имеют одинаковые названия, например:
 
- Иномарки
---- Объем двигателя 1.5  (/15-inomarki#/kategorii-dvigatel15)
---- Объем двигателя 1.8 (/16-inomarki#/kategorii-dvigatel18)
----  ....
 
- Отечественные
---- Объем двигателя 1.5 (/17-otechestvennie#/kategorii-dvigatel15)
---- Объем двигателя 1.8 (/18-otechestvennie#/kategorii-dvigatel18)
---- ....
 
Так вот при таком раскладе категорий, фильтрация слетает, если открыть ссылку в адресной строке. 
Проблема в том что при генерации хеша ссылок не учитывается id категории, а только имя. 
 
Я сделал так.
В файле /modules/blocklayered.blocklayered.php  (примерно 1069 строка)
 
после

 $selected_filters[$param['type']][$param['id_id_value']] = $param['id_value'];

Добавил

if($param['name'] == 'Категории' || $param['name'] == 'категории' || $param['name'] == 'kategorii' || $param['name'] == 'category' )
     $url_key = md5($link.$param['id_parent']);
        else 
     $url_key = md5($link);

И что бы работала выборка,

После (строка 1733)

				foreach ($url_attributes as $url_attribute)
				{
					$url_parameters = explode($this->getAnchor(), $url_attribute);
                                        

Добавил 

$flag = $url_parameters[0];

после  (примерно 1745 строка)

foreach ($url_parameters as $url_parameter) { 

Добавил 

if($flag == 'категории' || $flag == 'Категории' || $flag == 'kategorii' || $flag == 'category')
        $data = Db::getInstance()->getValue('SELECT data FROM `'._DB_PREFIX_.'layered_friendly_url` WHERE `url_key` = \''.md5('/'.$attribute_name.$this->getAnchor().$url_parameter.$id_parent).'\'');
else
    	$data = Db::getInstance()->getValue('SELECT data FROM `'._DB_PREFIX_.'layered_friendly_url` WHERE `url_key` = \''.md5('/'.$attribute_name.$this->getAnchor().$url_parameter).'\'');

Осталось заново сгенерировать ссылки фильтра. 

Edited by yuriy.zuikov (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 1 year later...

Спасибо.

 

Была таже проблема с интернет магазином детской одежды.

Но, как я понял, потому что в русской локализации используются URL-параметры kategorii и brend.

Например, http://komix.com.ua/12-malyshki#/kategorii-chelovechki_i_pesochniki/brend-cichild-san_bebe

Тогда как модуль ожидает конкретно categories и manufacturer. 

Поблему решил непосредственное подменой параметров в коде.

Как решить описал в другой ветке.

Edited by aleksey_bober (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...