我正在尝试仅提取属于当前商店的类别,但它似乎无法正常工作。任何人都可以在我的代码中看到任何问题吗?
$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();
答案 0 :(得分:3)
我知道这是一个老问题,但如果有人正在寻找答案,那就是:
->addStoreFilter( {storeID} )
为我做了......
答案 1 :(得分: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 - 无效,可以删除
答案 2 :(得分:0)
您好检查以下代码可能会对您有所帮助
->addFieldToFilter('store_id', Mage::app()->getStore()->getId());
OR
$storeId =Mage::app()->getStore()->getStoreId();
$collection->setStoreId($storeId);
$collection->addStoreFilter($storeId);
答案 3 :(得分: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('*');
答案 4 :(得分: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}/%"));
答案 5 :(得分: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();
}