Коллекции наследуются от класса
Varien_Data_Collection_Db
В этом классе есть метод с именем addOrder
.
public function addOrder($field, $direction = self::SORT_ORDER_DESC)
{
return $this->_setOrder($field, $direction);
}
Итак, вы думаете, что-то вроде этого должно работать для базового заказа
Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addOrder('entity_id');
Однако это не так. Из-за сложного объединения, включенного в Коллекции EAV, существует специальный метод, используемый для добавления атрибута в предложение order
Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection::addAttributeToSort
Однако, опять же, это можно использовать только для добавления простых атрибутов. Чтобы создать произвольную сортировку, вам нужно напрямую манипулировать объектом Zend_Select
. Я не большой поклонник этого, и я не большой поклонник использования пользовательских функций mysql для достижения целей, но, похоже, это единственный способ сделать это
Я протестировал следующий код на стандартной установке и получил желаемые результаты. Вы должны быть в состоянии использовать его, чтобы получить то, что вы хотите.
$ids = array(16,18,17,19);
$products = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('entity_id',$ids);
//shakes fist at PDO's array parameter
$ids = array_map('intval', $ids);
$products->getSelect()->order("find_in_set(e.entity_id,'".implode(',',$ids)."')");
foreach($products as $product)
{
var_dump($product->getEntityId());
var_dump($product->getSku());
}