2013-01-24 108 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(); ?>"/>