Ric*_*ham 4 php magento magento-1.7
我在产品页面上有产品对象但是当我尝试使用以下内容获取类别ID时:
$_product->getCategoryIds();
Run Code Online (Sandbox Code Playgroud)
要么:
$_product->getResource()->getAttribute('category_ids')->getFrontend()->getValue($_product);
Run Code Online (Sandbox Code Playgroud)
它为我提供了所有类别ID,我只想要我所在的商店.
这是一个多线圈环境因此我的问题.其他一切似乎都没问题,类别列表工作正常.这是我唯一的问题.有人可以帮忙吗?
Vin*_*nai 10
非常类似于Alans的答案,可能会少一些循环:
$rootCategory = Mage::getModel('catalog/category')
->load(Mage::app()->getStore()->getRootCategoryId());
$sameStoreCategories = Mage::getResourceModel('catalog/category_collection')
->addIdFilter($product->getCategoryIds())
->addFieldToFilter('path', array('like' => $rootCategory->getPath() . '/%'))
->getItems();
var_dump(array_keys($sameStoreCategories));
Run Code Online (Sandbox Code Playgroud)
这将始终有效.丑陋的是你还需要加载类别.
如果启用了平面类别表,则可以使用以下变体:
$sameStoreCategories = Mage::getResourceModel('catalog/category_flat_collection')
->addIdFilter($product->getCategoryIds())
->getItems();
var_dump(array_keys($sameStoreCategories));
Run Code Online (Sandbox Code Playgroud)
它为什么有效?因为平面表是按商店索引的,并且每个平面表仅包含与该商店组根类别关联的类别实体记录.
因此,即使您按照与产品关联的所有类别ID进行过滤,该集合也只会包含当前商店中存在的类别.