Php 如何在Magento中仅获取包含图像的类别?
我在一个类别中有一个巨大的子类别列表。 打开该类别时,我只需要显示设置了图像的子类别。 是否有方法过滤类别集合以仅显示以下类别:Php 如何在Magento中仅获取包含图像的类别?,php,magento,Php,Magento,我在一个类别中有一个巨大的子类别列表。 打开该类别时,我只需要显示设置了图像的子类别。 是否有方法过滤类别集合以仅显示以下类别: 是指定类别ID的子级 设置图像 查看此以显示类别图像代替类别名称 <?php //gets all sub categories of parent category 'Brands' $cats = Mage::getModel('catalog/category')->load(6)->getChildren(); $c
- 是指定类别ID的子级
- 设置图像
<?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>
-
Magento收藏与查询:
您可以使用Magento category_集合构建查询。Magento集合查询扩展了Zend查询,因此您可以使用Zend查询允许您使用的许多东西(或者您可以获取Zend查询并直接修改它)
Magento集合查询带来的一个很好的补充是,您可以按EAV属性进行过滤(它添加了所有必要的表连接以获取属性)
Magento集合的另一个很好的补充是,它从当前存储(如果可用)或默认存储中获取信息
答复:
在我们的例子中,image
和parent\u id
都只是catalog\u category\u entity
表中的字段,它们不是EAV属性,因此我们可以使用addFieldToFilter
。如果它们是EAV属性,我们应该使用addAttributeToFilter
平桌:
还有一个问题是,当启用平面表时,这些查询如何工作?我不记得捕获的确切内容。例如,我刚刚使用addAttributeToFilter('image'
)测试了这个查询,尽管image
是一个字段而不是一个属性,但查询对我有效,因为我测试它的商店使用的是平面表(平面表中的属性转换为字段)
对服务器的影响:
有几个性能要素需要监控:
您当前正在从一个类别获取所有产品--您的问题是如何获取类别。您想要什么产品或类别?我知道如何获取图像。我需要筛选没有图像的产品以减少服务器上的负载。@slimshaddyyy您正在运行一个SQL查询来检索当前类别和其他类别每个子类别的SQL查询。这只是浪费。@slimshaddyyy使用类别集合,并将所有类别筛选为当前类别ID或具有该类别ID的父类别,而您只使用了一个SQL查询。@slimshaddyyy您可以进一步筛选该查询,以检查该类别是否具有图像,甚至在lo之前将其作为Magento对象加载,不仅可以节省SQL查询,还可以节省PHP处理和内存。作为StackOverflow的“良好实践”,答案应该是自包含的。这意味着外部链接和资源应该用作“参考”或“进一步阅读”不是作为答案的主要内容。这是因为这个答案应该与任何未来的访问者相关,如果你的外部链接被破坏,答案将变得无用。这正是我一直在寻找的!谢谢!如果有很多子类别,这会减少对服务器的影响吗?“对服务器的影响”是一个松散的术语。在该类别的许多子类别中有许多产品。现在加载大约需要一分钟。如果其中只有10个有图像,我就用这种方法选择它们。你认为加载主类别会花费更少的时间吗?这是我的问题:)我提供的查询不会加载任何产品。因此,它不会改变加载产品所使用的资源数量。您认为加载需要1分钟是什么意思?从服务器接收完整响应需要1分钟(服务器时间)还是从服务器加载响应、呈现HTML/CSS和加载所有相关图像需要1分钟(浏览器时间)?
$categories = Mage::getResourceModel('catalog/category_collection')
->addFieldToFilter('image', array('notnull' => true))
->addFieldToFilter('parent_id', $categoryId)
->setStoreId(2);