Я пытаюсь получить опцию «Лучший продавец» в поле выбора в списке продуктов категории.
Я уже расширил
class Mymodule_Catalog_Block_Product_List_Toolbar extends Mage_Catalog_Block_Product_List_Toolbar { protected function _construct() { parent::_construct(); } public function getAvailableOrders() { $this->_availableOrder['bestseller'] = $this->__('Best Seller'); return $this->_availableOrder; } }
После этого я получил опцию Best Seller в поле выбора. Но я не знаю, как заставить его работать. Любая помощь будет оценена по достоинству.
Вам также нужно расширить setCollection ():
public function getAvailableOrders() { $this->_availableOrder['bestseller'] = $this->__('Best Seller'); return $this->_availableOrder; } public function setCollection($collection) { // ... if ($this->getCurrentOrder()) { if ($this->getCurrentOrder() == 'bestseller') { // add needed joins to collection here to get 'bestseller' column in collection } $this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection()); } return $this; }
Кстати, знаете ли вы, что $this->__('Best Seller');
плохой стиль? Как вы знаете, $this->__()
является ярлыком для текущего метода хелпера данных __ (). Но если кто-то расширит ваш блок в другом модуле – этот хелпер данных модуля будет использован для перевода строки «Лучший продавец» на другие языки. Очевидно, что в его модуле у него может не быть перевода для строки «Лучший продавец». Вот почему вы всегда должны использовать Mage::helper('your_module/data')->__()
для перевода.