我在一个类别中有一个庞大的子类别列表。 打开该类别时,我只需要显示已设置图像的子类别。 有没有办法过滤类别集合,只显示以下类别:
答案 0 :(得分:3)
您可以使用Magento category_collection来构建查询。 Magento集合查询扩展了Zend查询,因此您可以使用Zend查询允许您使用的许多内容(或者您可以获取zend查询并直接更改它)。
Magento集合查询带来的一个不错的补充是,您可以按EAV属性进行过滤(它添加了所有必要的表连接以获取属性)。
Magento集合的另一个不错的补充是它从当前商店(如果可用)或从默认商店获取信息。
$categories = Mage::getResourceModel('catalog/category_collection')
->addFieldToFilter('image', array('notnull' => true))
->addFieldToFilter('parent_id', $categoryId)
->setStoreId(2);
在我们的案例中,image
和parent_id
只是catalog_category_entity
表中的字段,它们不是EAV属性,因此我们可以使用addFieldToFilter
。如果它们是EAV属性,我们应该使用addAttributeToFilter
。
启用平面表时,这些查询的工作方式也存在问题我不记得捕获的确切内容。例如,我刚刚使用addAttributeToFilter('image'
测试了这个查询,即使image
是一个字段而不是一个属性,并且查询对我有用,因为我测试它的商店是使用平面表(在平面表属性中)转换为字段)。
需要监控一些性能要素:
Magento内置了一些性能增强功能:
答案 1 :(得分:0)
显示类别图像以代替类别名称。
<?php
//gets all sub categories of parent category 'Brands'
$cats = Mage::getModel('catalog/category')->load(6)->getChildren();
$catIds = explode(',',$cats);
$categories = array();
foreach($catIds as $catId) {
$category = Mage::getModel('catalog/category')->load($catId);
$categories[$category->getName()] = array(
'url' => $category->getUrl(),
'img' => $category->getImageUrl()
);
}
ksort($categories, SORT_STRING);
?>
<ul>
<?php foreach($categories as $name => $data): ?>
<li>
<a href="<?php echo $data['url']; ?>" title="<?php echo $name; ?>">
<img class="cat-image" src="<?php echo $data['img']; ?>" />
</a>
</li>
<?php endforeach; ?>
</ul>
答案 2 :(得分:-1)