2011-04-20 21 views
15

Tôi đã làm việc trên một mô-đun tùy chỉnh cho Magento (ver. 1.8.0.0) cho thấy danh sách các sản phẩm liên quan của một sản phẩm nhất định.Điều hướng lớp Magento trên bộ sưu tập sản phẩm tùy chỉnh

Để đạt được điều này, tôi đã tạo mô-đun của riêng mình bằng cách ghi đè lên lớp Mage_Catalog_Block_Product_List.

Về cơ bản đây là cách hoạt động:

Từ một bộ điều khiển tôi bắt các sản phẩm entity_id và tôi lưu trữ các sản phẩm trong registry để tôi có thể sử dụng nó bên trong khối văn bản tùy chỉnh của tôi được gọi là list.php

đây là phương pháp mà lấp đầy bộ sưu tập sản phẩm:

protected function _getProductCollection() 
{ 
    if (is_null($this->_productCollection)) { 
     $prod = Mage::registry('chosenproduct'); 
     $this->_productCollection = $prod->getRelatedProductCollection() 
      ->addAttributeToSelect('required_options') 
      ->addAttributeToFilter(array(array('attribute'=>'accessory_manufacturer','neq'=>false))) 
      ->addAttributeToSort('position', 'asc') 
      ->addStoreFilter() 
      ->setPageSize(30) 
      ->setCurPage(1); 
     ; 

     $this->_addProductAttributesAndPrices($this->_productCollection); 
     Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($this->_productCollection); 
     $this->setProductCollection($this->_productCollection); 
    } 

    return $this->_productCollection; 
} 

tôi cũng đã thêm như sau trong .xml bố trí của mô-đun tùy chỉnh của tôi để đảm bảo điều hướng lớp cho thấy:

012.
<reference name="left"> 
     <block type="catalog/layer_view" name="catalog.leftnav" after="currency" template="catalog/layer/view.phtml"/> 
    </reference> 

Điều hướng lớp hiển thị, nhưng có vẻ như nó đang lấy tất cả sản phẩm làm bộ sưu tập thay vì tập hợp tùy chỉnh được sử dụng trong phương pháp tôi đã thêm ở trên.

Tôi cũng biết rằng tôi có thể nhận được các cửa hàng/lớp sử dụng $layer = Mage::getSingleton('catalog/layer');

Lớp lớp này cũng có một phương pháp gọi là prepareProductCollection và setCollection nhưng đối với một số lý do tôi không thể có được nó để làm việc.

Bất kỳ trợ giúp nào về điều này?

Về cơ bản, tôi muốn có điều hướng lớp cho các sản phẩm trong bộ sưu tập tùy chỉnh.

Xin cảm ơn,

Trả lời

15

Tôi chỉ đạt được những gì tôi muốn. Tôi đã ghi đè cả lớp Mage_Catalog_Model_LayerMage_Catalog_Model_Category

Cả hai giờ đây đã biến mới gọi là $ _customCollection: protected $_customProductCollection;

Tôi đã ghi đè các getProductCollection() trong cả hai lớp và tôi đã thêm này vào đầu của phương pháp này:

if(isset($this->_customProductCollection)){ 
     return $this->_customProductCollection; 
    } 

Tôi cũng có một phương pháp cho phép tôi đặt "customProductCollection" này trong cả hai lớp này. Sau khi được đặt, phần còn lại của dữ liệu của điều hướng/danh mục được phân lớp dựa trên bộ sưu tập này.

;)

+2

Phương pháp thiết lập này là gì và bạn gọi nó ở đâu? – easymoden00b