Nhận kết quả trống khi cố gắng lấy thuộc tính có thể lọc cho danh mục cụ thể


7

Tôi cần lấy tất cả các thuộc tính có thể lọc cho thể loại. Tôi đang sử dụng đoạn mã đó:

$category = Mage::getModel('catalog/category')->load($categoryId);

$layer = Mage::getModel('catalog/layer');

$layer->setCurrentCategory($category);

$attributes = $layer->getFilterableAttributes();//$attributes now is empty array

Danh mục có sản phẩm với các thuộc tính có thể lọc, cũng trong danh mục tùy chọn neo đã được bật. Mã này sử dụng trong API SOAP.

Có lẽ ai đó biết tôi đã phạm sai lầm ở đâu?


Hãy thử var_dump($category)xem mọi thứ nói chung có ổn không.
michael

Bạn có thể yêu cầu điều tương tự ở đây stackoverflow.com/questions/3157799/
mẹo

Tôi không thể sử dụng var_dump vì đó là mã cho api và nó chỉ trả về các giá trị được xác định trong tệp wsdl.xml. Nhưng tôi kiểm tra danh mục bằng cách chuyển nó vào một trong những giá trị này. Mô hình danh mục là OK, và nó được đặt thành lớp chính xác và tôi có thể lấy lại bằng $ layer-> getCienCarget (); P
Quickerz

Bạn có thể thử thêm Mage::log($collection->getSelect(), Zend_Log::INFO, 'blah.log', true);vào app/code/core/Mage/Catalog/Model/Layer.php-> public function getFilterableAttributes()trước returnvà để chạy truy vấn SQL đã ghi trực tiếp trong cơ sở dữ liệu hoặc để so sánh nó với truy vấn SQL được ghi lại khi bạn mở danh mục thông qua trang web.
michael

getFilterableAttribut () trả về mảng trống vì $ setIds = $ this -> _ getSetIds () trả về mảng trống. Điều này xảy ra vì $ this-> get SẢNtCollection () trả về bộ sưu tập trống. Có lẽ một cái gì đó khác cần thiết cho lớp $ để có được bộ sưu tập sản phẩm từ nó?
Quickerz

Câu trả lời:


0

Rất có thể bạn đã không đặt id cửa hàng, chúng tôi cần phải làm như vậy vì nó được triển khai trong api:

protected function _retrieve(){

    $id = $this->getRequest()->getParam('id');
    $store_id = $this->getRequest()->getParam('store_id');

    $category = Mage::getModel("catalog/category")->load($id);        
    $category->setStoreId($store_id);

    if (!($category->getId())) $this->_critical(self::RESOURCE_NOT_FOUND);

    $layer = Mage::getModel("catalog/layer");
    $layer->setCurrentCategory($category);
    $attributes = $layer->getFilterableAttributes();

0

đoạn mã sau được sử dụng để có được các thuộc tính có thể lọc và các tùy chọn của chúng

$categoryId = '5'; // replace with your category id
$category = Mage::getModel("catalog/category")->load($categoryId);
$layer = Mage::getModel("catalog/layer");
$layer->setCurrentCategory($category);

$setIds = Mage::getModel('eav/entity_attribute_set')
            ->load($attrSetName, 'attribute_set_name')
            ->getAttributeSetId();

$attributes = Mage::getResourceModel('catalog/product_attribute_collection');
$attributes->setItemObjectClass('catalog/resource_eav_attribute')
                ->setAttributeSetFilter($setIds)
                ->addStoreLabel(Mage::app()->getStore()->getId())
                ->setOrder('position', 'ASC');


$attributes->addFieldToFilter('additional_table.is_filterable', array('gt' => 0));
$attributes->load();

foreach ($attributes as $attribute) {
    $filter_attr = array();
    $filter_attr['title'] = $attribute->getFrontendLabel();
    $filter_attr['code'] = $attribute->getAttributeCode();

    if ($attribute->getAttributeCode() == 'price') {
        $filterBlockName = 'catalog/layer_filter_price';
    }elseif ($attribute->getBackendType() == 'decimal') {
        $filterBlockName = 'catalog/layer_filter_decimal';
    }else {
        $filterBlockName = 'catalog/layer_filter_attribute';
    }

    $result =  Mage::app()->getLayout()->createBlock($filterBlockName)->setLayer($layer)->setAttributeModel($attribute)->init();
    $i=0;

    foreach($result->getItems() as $option) {
        $attr_option = array();
        if($attribute->getAttributeCode() == 'price') {
            $attr_option['label'] = str_replace(array('<span class="price">','</span>'),'',$option->getLabel());
        } else {
            $attr_option['label'] = $option->getLabel();
        }

        $attr_option['value'] = $option->getValue();
        $attr_option['count'] = $option->getCount();
        $i++;
        $filter_attr['options'][] = $attr_option;
    }

    if($i!=0){
        $filter_attributes[] = $filter_attr;
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.