我有一个管理模块,我想在该模块中以存储方式获取类别集合,那么我们如何使用 storefilter 过滤集合?addstorefilter 不适用于类别收集。
5 回答
使用 setStore 或 setStoreId 方法:
$collection = Mage:getResourceModel('catalog/category_collection');
// or $collection = Mage::getModel('catalog/category')->getCollection();
$collection->setStoreId($myStoreId)
->load();
更新: 有一个简单的脚本来检查这个:
<?php
require 'app/Mage.php';
Mage::app('admin');
$collection = Mage::getModel('catalog/category')->getCollection()
->addAttributeToSelect('name')
->setStoreId(2)
->load();
echo $collection->count(), "\n";
foreach ($collection as $item) {
echo $item->getName(), "\n";
}
如果您有 3 个商店视图,则将有 3 个 storeId。有 0 - 用于管理存储,1 - 用于默认存储和 2(或其他值)用于另一个存储。我刚刚检查过它并且它有效。
我添加了下面的代码,它对我有用
$storecategoryid = Mage::app()->getStore($storeid)->getRootCategoryId();
从这段代码中,我得到了存储根 categoryid。
$category = Mage::getModel('catalog/category')->getCollection()->addFieldToFilter('is_active',array('eq' => 1))->load();
从这里我得到整个类别集合
foreach($category as $cat)
{
if($cat->getData('level')==2 && $cat->getData('parent_id')==$storecategoryid)
{
echo 'my code';
}
}
这样我就得到了商店类别。
$rootCategoryId = Mage::app()->getStore()->getRootCategoryId();
$categories = Mage::getModel('catalog/category')->getCollection();
$categories->addAttributeToFilter('path', array('like' => "1/{$rootCategoryId}/%"));
道具前往@xpoback以获得正确答案。我想重申一下答案,因为有些答案有些正确,有些则不正确。
简短的回答,使用这个:
$rootId = Mage::app()->getStore()->getRootCategoryId();
$collection = Mage::getModel('catalog/category')
->getResourceCollection()
->addAttributeToSelect('*')
->addFieldToFilter('path', array('like' => "1/{$rootId}/%"))
->addIsActiveFilter();
对于所有想了解其他答案的问题的人,请继续阅读。
首先,@Muffadal的答案是有用的,但在性能方面非常慢。您希望保持对 mySQL 的数据查询,而不是在大集合上使用 php 循环(前提是您的商店中有多个类别)。
该使用答案下的评论addPathsFilter('/' . $storecategoryid . '/')
也是正确的,但在这种情况下会比使用 LIKE 运算符慢(见文章)
@Serjio的方法在区分不同类别方面不起作用。它将做的是提取存储特定的翻译。示例商店 1 已将类别命名为Rings,商店 2 已将相同类别命名为My Rings。如果我们使用他的代码从 store 2 进行调用,它将拉取所有类别,无论 Root 是什么,但会拉取 Store 2 的命名约定 - My Rings
在 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();
}