如何获取产品与我当前所在商店相关的类别ID

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进行过滤,该集合也只会包含当前商店中存在的类别.