特定のカテゴリーのフィルター可能な属性を取得しようとしたときに空の結果を取得する


7

カテゴリのすべてのフィルター可能な属性を取得する必要があります。私はそのスニペットを使用しています:

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

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

$layer->setCurrentCategory($category);

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

カテゴリーにはフィルター可能な属性を持つ製品があり、カテゴリーでもオプションのアンカーが有効になりました。このコードはSOAP APIで使用します。

多分誰かが私がどこで間違えたか知っていますか?


var_dump($category)一般的にすべてが大丈夫かどうかを確認してみてください。
マイケル2015年

あなたはここに同じことを尋ねるかもしれませんstackoverflow.com/questions/3157799/...
Sukeshini

var_dumpは、apiのコードであり、wsdl.xmlファイルで定義された値のみを返すため、使用できません。しかし、私はカテゴリをこの値の1つに渡してチェックします。カテゴリモデルはOKで、レイヤーは正しく設定されています。$
layer-

追加する前Mage::log($collection->getSelect(), Zend_Log::INFO, 'blah.log', true);app/code/core/Mage/Catalog/Model/Layer.php-> ログに記録されたSQLクエリをデータベースで直接実行したり、サイトからカテゴリを開いたときにログに記録されたSQLクエリと比較したりできます。public function getFilterableAttributes()return
マイケル

$ setIds = $ this-> _ getSetIds()は空の配列を返すため、getFilterableAttributes()は空の配列を返します。$ this-> getProductCollection()が空のコレクションを返すために発生します。たぶん、それから製品コレクションを取得するために$ layerに何か他のものが必要ですか?
Quickerz、2015年

回答:


0

ほとんどの場合、ストアIDを設定していません。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

次のコードは、フィルター可能な属性とそのオプションを取得するために使用されます

$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;
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.