2013-01-24 109 views
0

我有一个奇怪的,但可能很容易解决的情况。Magento:显示所有类别,但无法获取关联图像

我有一个块下面的代码:

<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

原因你,你没有得到的图像URL是因为,在默认情况下,Magento的模型不加载了更换线

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

所有的属性。这是因为你只加载你需要的属性,你的数据库查询并不昂贵。以下将做的伎俩。

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

采取一个看看方法定义getStoreCategories:

你想要的方法返回尚未加载的集合,因此假的,真的,假的论点。在循环遍历类别之前,要确保也加载了image属性,这就是addAttributeToSelect('image')调用的目的。

这比$ _category-> load($ _category-> getId())效率更高。因为我们没有加载整个实体。现在,当您循环访问类别时,您可以执行以下操作,并且您应该在图片代码中包含图片网址。

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

它的工作:d(有点)好吧,我得到我想要的图像,但现在,我得到的每一个类别包括子类别等。我只想显示顶级类别,有什么方法可以做到这一点。在我更改代码之前,它做了这个,但是因为我添加了这些参数,它显示了一切,有什么想法? :) – George

+1

我还没有测试过,但尝试添加$ _categories-> addAttributeToFilter('level',array('eq'=> 1));在$ _categories-> addAttributeToSelect('image');之后 –

+0

这是现在完美工作,感谢您的帮助:) – George

1

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

最简单的办法是用

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