#sorting #magento #product
#сортировка #magento #продукт
Вопрос:
Я хочу, чтобы Magento сортировал мои связанные продукты по значению позиции, которое я даю им в серверной части. Когда я пытаюсь это сделать, ничего не происходит; связанные продукты по-прежнему сортируются по идентификатору, а не по позиции.
Я проверил каталог конфигурации amp; rarr; Сортировка статей по amp; rarr; Позиции, и, похоже, все в порядке.
Ответ №1:
В версии Magento 1.7.1 эта ошибка была исправлена
$this->_itemCollection = $product->getRelatedProductCollection()
->addAttributeToSelect('required_options')
->setPositionOrder()
->addStoreFilter()
;
Ответ №2:
в разделе Mage_Catalog_Block_Product_List_Related
function _prepareData
изменить с
$this->_itemCollection = $product->getRelatedProductCollection()
->addAttributeToSelect('required_options')
->addAttributeToSort('position', Varien_Db_Select::SQL_ASC)
->addStoreFilter()
;
Для
$this->_itemCollection = $product->getRelatedProductCollection()
->addAttributeToSelect('required_options')
->setOrder('position', Varien_Db_Select::SQL_ASC)
->addStoreFilter()
;
похоже на ошибку
Комментарии:
1. Это ошибка, о которой я впервые сообщил в версии 1.6.0.0 еще в ноябре прошлого года: magentocommerce.com/bug-tracking/issue?issue=12558
Ответ №3:
Я получил эту ошибку в области редактирования продукта Magento в CE 1.5.1.0, вкладка «Перекрестные продажи». Чтобы исправить это, мне пришлось использовать код Magento 1.8
diff --git a/app/code/core/Mage/Adminhtml/Block/Catalog/Product/Edit/Tab/Crosssell.php b/app/code/core/Mage/Adminhtml/Block/Catalog/Product/Edit/Tab/Crosssell.php
index 2dd1611..813209e 100755
--- a/app/code/core/Mage/Adminhtml/Block/Catalog/Product/Edit/Tab/Crosssell.php
b/app/code/core/Mage/Adminhtml/Block/Catalog/Product/Edit/Tab/Crosssell.php
@@ -95,20 95,20 @@ class Mage_Adminhtml_Block_Catalog_Product_Edit_Tab_Crosssell extends Mage_Admin
*/
protected function _prepareCollection()
{
/* @var $collection Mage_Catalog_Model_Resource_Product_Link_Product_Collection */
$collection = Mage::getModel('catalog/product_link')->useCrossSellLinks()
->getProductCollection()
->setProduct($this->_getProduct())
- ->setPositionOrder()
->addAttributeToSelect('*');
if ($this->isReadonly()) {
$productIds = $this->_getSelectedProducts();
if (empty($productIds)) {
$productIds = array(0);
}
- $collection->addFieldToFilter('entity_id', array('in'=>$productIds));
$collection->addFieldToFilter('entity_id', array('in' => $productIds));
}