Jump to content

Сортировка свойств товаров в Сравнении товаров


Boris726

Recommended Posts

Соратники!

 

Столкнулся со следующей проблемой

 

Если посмотреть здесь: http://demo-store.pr...ning-dress.html

 

Сортировка свойств будет такая:

Style

Strapless

Color

Length

Material

 

Если зайти сюда: http://demo-store.pr...evening-dresses и отметить три товара для сравнения, то на странице сравнения сортировка свойств будет уже другой:

 

Material

Style

Length

Strapless

Color

 

Если же начать удалять по одному товары, со страницы сравнеия, то после удаления одного сортировка станет такой:

Material:

Strapless:

Length:

Style:

Color:

 

Если удалить ещё один товар, то станет другой:

Length:

Style:

Color:

Material:

Strapless:

 

Получается абсолютно рандомная штука с непонятной логикой работы...

 

Возможно кто-то уже сталкивался с этим? Как победили?

Хотелось бы, чтобы сортировка была одна и та же и соответствовала сортировке свойств товара в админке (или на странице товара,что одно и тоже)

 

PrestaShop™ 1.5.3.1

Link to comment
Share on other sites

Спасибо doubleD за ссылку!

Там предлагают сортировать по ID. На мой взгляд это полумера - если потом добавить какое-нибудь важное свойство оно будет всегда ниже других.

Интересно я один такой сортировкой недоволен или просто никто не замечает?

Link to comment
Share on other sites

Для "правильного" решения, то есть что бы и там и там товары сортировались по позиции свойств указаных в BackOffice нужно заменить ORDER BY nb DESC в Features.php на ORDER BY f.position ASC

 

В файле classes/Feature.php найти функцию

public static function getFeaturesForComparison

 

И в SQL запросе заменить строку ORDER BY nb DESC

 

То есть должно остаться

return Db::getInstance()->executeS('
  SELECT * , COUNT(*) as nb
  FROM `'._DB_PREFIX_.'feature` f
  LEFT JOIN `'._DB_PREFIX_.'feature_product` fp
ON f.`id_feature` = fp.`id_feature`
  LEFT JOIN `'._DB_PREFIX_.'feature_lang` fl
ON f.`id_feature` = fl.`id_feature`
  WHERE fp.`id_product` IN ('.$ids.')
  AND `id_lang` = '.(int)$id_lang.'
  GROUP BY f.`id_feature`
  ORDER BY f.position ASC
 ');

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

Можно и на странице товара и в сравнениях сортировать свойства по имени.

 

Для Features: в classes Features.php все там же заменить ORDER BY nb DESC на ORDER BY fl.name ASC

 

return Db::getInstance()->executeS('
  SELECT * , COUNT(*) as nb
  FROM `'._DB_PREFIX_.'feature` f
  LEFT JOIN `'._DB_PREFIX_.'feature_product` fp
ON f.`id_feature` = fp.`id_feature`
  LEFT JOIN `'._DB_PREFIX_.'feature_lang` fl
ON f.`id_feature` = fl.`id_feature`
  WHERE fp.`id_product` IN ('.$ids.')
  AND `id_lang` = '.(int)$id_lang.'
  GROUP BY f.`id_feature`
  ORDER BY fl.name ASC
 ');

 

Для страницы товаров в classes/Product.php заменить ORDER BY f.position ASC на ORDER BY fl.name ASC

 

функция public static function cacheFrontFeatures

 

$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
 SELECT id_product, name, value, pf.id_feature
 FROM '._DB_PREFIX_.'feature_product pf
 LEFT JOIN '._DB_PREFIX_.'feature_lang fl ON (fl.id_feature = pf.id_feature AND fl.id_lang = '.(int)$id_lang.')
 LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = pf.id_feature_value AND fvl.id_lang = '.(int)$id_lang.')
 LEFT JOIN '._DB_PREFIX_.'feature f ON (f.id_feature = pf.id_feature)
 WHERE `id_product` IN ('.implode($product_implode, ',').')
 ORDER BY fl.name ASC');

 

Что бы изменения не удалились после обновления эти функции можно поместить в файлы override/classes/Feature.php и override/classes/Product.php соответственно...

 

Для prestashop 1.5.4 предварительно нужно удалить файлик cache/class_index.php как написано в этом топике.

 

Файлы для override прикреплены.

override.zip

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

Спасибо, doubleD!

Всё работает великолепно! Всё же непонятно почему сразу нет нормальной (ORDER BY f.position ASC) сортировки...

Препутали может, люди все-таки пишут :)

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...