Jump to content

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


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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
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

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

Спасибо, doubleD!

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

Share this post


Link to post
Share on other sites

Спасибо, doubleD!

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

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

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More