如何在Magento中仅获取带图像的类别?

时间:2014-03-07 09:38:25

标签: php magento

我在一个类别中有一个庞大的子类别列表。 打开该类别时,我只需要显示已设置图像的子类别。 有没有办法过滤类别集合,只显示以下类别:

  • 是指定类别ID的孩子
  • 已设置图像

3 个答案:

答案 0 :(得分:3)

Magento系列&查询:

您可以使用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);

在我们的案例中,imageparent_id只是catalog_category_entity表中的字段,它们不是EAV属性,因此我们可以使用addFieldToFilter。如果它们是EAV属性,我们应该使用addAttributeToFilter

平台:

启用平面表时,这些查询的工作方式也存在问题我不记得捕获的确切内容。例如,我刚刚使用addAttributeToFilter('image'测试了这个查询,即使image是一个字段而不是一个属性,并且查询对我有用,因为我测试它的商店是使用平面表(在平面表属性中)转换为字段)。

对服务器的影响:

需要监控一些性能要素:

  1. PHP和SQL之间的通信(单个查询的数量)
  2. 个人查询的复杂性/效率/速度
  3. PHP数据处理
  4. PHP内存使用情况
  5. HTML / CSS / JS /图像文件下载时间
  6. HTML / CSS / JS /图像渲染时间
  7. Magento内置了一些性能增强功能:

    1. 平面表和其他索引(减少EAV SQL查询的开销)降低了许多SQL查询的复杂性(减少了问题nr.2的影响)
    2. 缓存 - 文件缓存,memcached或其他 - 减少了单个SQL查询的数量以及大量的PHP数据处理(减少了问题nr.1和3的影响。)
    3. 合并和缩小CSS和JavaScript文件(减少问题nr.5和6的影响)
    4. 将图像从正常的完整尺寸调整为缩略图大小 - 这样可以减少必须下载大图像并将其渲染到小区域(同时减少问题5和6的影响)

答案 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)