0

我正在尝试提取仅属于当前商店的类别,但它似乎不起作用。任何人都可以在我的代码中看到任何问题吗?

$categoryCollection = Mage::getResourceModel('catalog/category_collection')
  ->setStoreId(Mage::app()->getStore()->getId())
  ->addFieldToFilter('include_in_menu', array('eq' => 1))
  ->addFieldToFilter('is_active', array('eq' => 1))
  ->addFieldToFilter('level', array('eq' => 2))
  ->addAttributeToSelect(array('name','url_path','image','description'))
  ->setOrder('position', 'asc');

$categoryCollection->printLogQuery(true);

这也是从 store_id 0 获取数据,但我只希望从 store_id 2

SELECT `e`.*, IF(at_include_in_menu.value_id > 0, at_include_in_menu.value, at_include_in_menu_default.value) AS `include_in_menu`, IF(at_is_active.value_id > 0, at_is_active.value, at_is_active_default.value) AS `is_active` FROM `catalog_category_entity` AS `e`
 INNER JOIN `catalog_category_entity_int` AS `at_include_in_menu_default` ON (`at_include_in_menu_default`.`entity_id` = `e`.`entity_id`) AND (`at_include_in_menu_default`.`attribute_id` = '67') AND `at_include_in_menu_default`.`store_id` = 0
 LEFT JOIN `catalog_category_entity_int` AS `at_include_in_menu` ON (`at_include_in_menu`.`entity_id` = `e`.`entity_id`) AND (`at_include_in_menu`.`attribute_id` = '67') AND (`at_include_in_menu`.`store_id` = 2)
 INNER JOIN `catalog_category_entity_int` AS `at_is_active_default` ON (`at_is_active_default`.`entity_id` = `e`.`entity_id`) AND (`at_is_active_default`.`attribute_id` = '42') AND `at_is_active_default`.`store_id` = 0
 LEFT JOIN `catalog_category_entity_int` AS `at_is_active` ON (`at_is_active`.`entity_id` = `e`.`entity_id`) AND (`at_is_active`.`attribute_id` = '42') AND (`at_is_active`.`store_id` = 2) WHERE (`e`.`entity_type_id` = '3') AND (IF(at_include_in_menu.value_id > 0, at_include_in_menu.value, at_include_in_menu_default.value) = 1) AND (IF(at_is_active.value_id > 0, at_is_active.value, at_is_active_default.value) = 1) AND (`e`.`level` = 2)

更新

而不是存储过滤器,我只是添加了解决问题的路径过滤器,但仍然很想知道存储过滤器是否有效。

$storeId = Mage::app()->getStore()->getId();
$categoryRootId = Mage::app()->getStore($storeId)->getRootCategoryId();;

$categoryCollection = Mage::getResourceModel('catalog/category_collection')
    ->addFieldToFilter('path', array('like' => "%/{$categoryRootId}/%"))
    ->addFieldToFilter('include_in_menu', array('eq' => 1))
    ->addFieldToFilter('is_active', array('eq' => 1))
    ->addFieldToFilter('level', array('eq' => 2))
    ->addAttributeToSelect(array('name','url_path','image','description','store_id'))
    ->setOrder('position', 'asc')
    ->load();
4

6 回答 6

3

我知道这是一个老问题,但如果有人像我一样寻找答案:

->addStoreFilter( {storeID} )

为我做的...

于 2013-07-04T15:40:26.863 回答
2

我花了很多时间……这对我来说是个例子……

$store = Mage::app()->getStore()->getId();
$rootCategoryId = Mage::app()->getStore()->getRootCategoryId();

$rootpath = Mage::getModel('catalog/category')
                    ->setStoreId($store)
                    ->load($rootCategoryId)
                    ->getPath();

$categories = Mage::getModel('catalog/category')->setStoreId($store)
                    ->getCollection()
                    ->addAttributeToSelect('*')
                    ->addAttributeToFilter('path', array("like"=>$rootpath."/"."%")); 

修复多商店:)

setStoreId - 不起作用,可以删除

于 2013-10-09T22:46:00.183 回答
0

在 Magento 1.9 中

$storeId=2;
    $rootCategoryId = Mage::app()->getStore($storeId)->getRootCategoryId();

                $categories = Mage::getModel('catalog/category')
                    ->getCollection()
                    ->setStoreId($storeId)
                    ->addFieldToFilter('is_active', 1)
                    ->addAttributeToFilter('path', array('like' => "1/{$rootCategoryId}/%"))
                    ->addAttributeToSelect('*');

                    foreach($categories as $categorie)
                    {
                        $catid=$cat->getId();                   
                        $catname=$categorie->getName();
                        $catp=catp$categorie->getParent_id();

                    }
于 2015-03-21T07:41:46.377 回答
0

既不setStoreId()也不addAttributeToFielter('store_id', $storeId)不工作,因为store_id类别表中没有。下面的代码完美运行:

$storeId = 21; // your store id
$rootCategoryId = Mage::app()->getStore($storeId)->getRootCategoryId();
$categories = Mage::getModel('catalog/category')->getCollection();
$categories->addAttributeToFilter('path', array('like' => "1/{$rootCategoryId}/%"));
于 2013-11-08T10:54:33.807 回答
0

尝试这个

$categoriesCollection = Mage::getModel('catalog/category')
->getCollection()
->setStoreId(1) 
->addFieldToFilter('include_in_menu', array('eq' => 1))
->addFieldToFilter('level', array('eq' => 2))
->addFieldToFilter('is_active', array('eq'=>'1'))
->setOrder('position', 'asc')
->addAttributeToSelect('*');
于 2012-12-07T09:58:09.050 回答
0

您好检查以下代码可能对您有所帮助

->addFieldToFilter('store_id', Mage::app()->getStore()->getId());

或者

$storeId =Mage::app()->getStore()->getStoreId();

$collection->setStoreId($storeId);

$collection->addStoreFilter($storeId);
于 2012-12-07T05:28:50.657 回答