0

我遇到了一个奇怪但可能很容易解决的情况。

我在一个块中有以下代码:

<div class="home-categories">
    <?php $_helper = Mage::helper('catalog/category') ?>
    <?php $_categories = $_helper->getStoreCategories() ?>
    <?php foreach($_categories as $_category): ?>
        <a href="<?php echo $_helper->getCategoryUrl($_category) ?>">
            <img src="<?php echo $_category->getStoreIds(); ?>"/>
            <div class="category-title">
                <p><?php echo $_category->getName(); ?></p>
            </div>
        </a>
      <?php endforeach; ?>
</div>

我得到的结果 HTML 返回了所有正确的细节,但 img src。我这样做正确吗?

4

2 回答 2

4

您没有获得图像 url 的原因是,默认情况下,Magento 模型不会加载所有属性。这样您就可以只加载您需要的属性,并且您的数据库查询不会那么昂贵。以下将解决问题。

$_helper = Mage::helper('catalog/category');
$_categories = $_helper->getStoreCategories(false, true, false);
$_categories->addAttributeToSelect('image');

看一下 getStoreCategories 的方法定义:

getStoreCategories($sorted=false, $asCollection=false, $toLoad=true)

您希望该方法返回尚未加载的集合,因此返回 false、true、false 参数。在循环浏览要确保加载图像属性的类别之前,这就是 addAttributeToSelect('image') 调用的用途。

这比 $_category->load( $_category->getId()); 更有效。因为我们没有加载整个实体。现在,当您遍历类别时,您可以执行以下操作,并且您应该在图像标签中拥有图像 URL。

<img src="<?php echo $_category->getImageUrl(); ?>"/>
于 2013-01-25T04:29:22.810 回答
1

原因是加载的类别集合不包含类别属性,而仅包含基本类别数据。您必须自己加载它们或在加载之前将它们添加到集合中(没有查看辅助函数,所以我不能确定在调用它之后是否可以这样做......)。

最简单的解决方案是更换线路

<img src="<?php echo $_category->getStoreIds(); ?>"/>

<img src="<?php $_category->load( $_category->getId()); echo  $_category->getImageUrl(); ?>"/>
于 2013-01-24T23:57:51.787 回答