2013-04-18 35 views
1

Hiho everyone!我希望你能給我一些線索,因爲我仍然對Magento感興趣。Magento:從Varien_Data_Collection獲取數據

我嘗試顯示我在數組中獲得的產品的列表。在Mage/Catalog/Block/Product/List.php中,我創建了一個新的Varien_Data_Collection(),其中我推送了我的產品對象(使用->addItem($product))。

然後我返回我的自定義集合和List.php類與他的工作來顯示產品的列表。

當我在瀏覽器中調用頁面時,顯示的產品數量合適,當點擊該頁面查看產品頁面時,我找到了正確的頁面。

但是,所有的數據(如產品名稱,價格等)都是空的。我猜想List類用來捕獲這些數據的方法會失敗,並且會導致我的Varien_Data_Collection對象。

爲了說明,這裏是我的代碼示例:

// getting a particular product 
$mainProduct = Mage::getModel('catalog/category')->load($currentCat->getId()); 
$mainProduct = $mainProduct->getProductCollection(); 
$mainProduct = $mainProduct->addAttributeToFilter('product_id', $_GET['cat_id']); 

// creating a custom collection    
$myCollection = new Varien_Data_Collection(); 

foreach ($mainProduct as $product) { 
    // getting my particular product's related products in an array 
    $related = $product->getRelatedProductIds();     
    if ($this->array_contains($related, $_GET['cat_id'])) { 
     // if it suits me, add it in my custom collection 
     $myCollection->addItem($product); 
    } 
} 
return $myCollection; 

而這就是我得到了我的列表頁:

enter image description here

當我var_dump($myCollection),我可以看到['name']['price']等字段未被引用。只有['product_id']和其他許多我不在乎的領域。

我最終的問題是:如何將包含這些產品數據的集合返回給List類?我知道這是不好解釋,但我的英語是非常有限的,我嘗試盡我所能:(

+0

請解釋$ _GET ['cat_id']變量是什麼?類別編號/產品編號 –

+0

您想獲得名稱,價格等嗎? –

+0

cat_id實際上是一個虛擬產品ID。我很抱歉命名。是的,我想獲得名稱,價格,圖片等 – Djouuuuh

回答

2

針對某個類別調用->getProductCollection()僅返回已創建集合中每個產品的骨架數據。如果你想爲每個產品的完整數據,則需要再加載它們,所以在你的foreach循環中,您將有:

$product = Mage::getModel('catalog/product')->load($product->getId()); 

但是在你正在構建的集合的方式不是最好的工作實踐 - 你不應該創建自己的Varien_Data_Collection的對象,而不是你應該創建一個產品集合,如下所示:

$collection = Mage::getModel('catalog/product')->getCollection(); 

然後你加載的收集(其中foreach循環或調用->load()對收集還會像前2個例子),你可以f根據您的要求收集收集品。 ,你可以做到這一點使用本地Magento的方法,其中一個已經在使用(addAttributeToFilter())或我更喜歡拉從集合中選擇對象和應用過濾這種方式:

$select = $collection->getSelect(); 

然後,您可以運行所有的針對此選擇對象的Zend_Db_Select類方法過濾集合。

http://framework.zend.com/manual/1.12/en/zend.db.select.html

當收集已被加載,它裏面的產品,然後將包含完整的產品數據。

+0

非常感謝您對此有幫助的解釋。 – Djouuuuh

1

首先pelase不使用$ _GET變量,使用Mage::app()->getRequest()->getParams(); 秒爲什麼不嘗試正確地建立您的收藏?開始

這裏是你的代碼做什麼:

$mainProduct = Mage::getModel('catalog/category')->load($currentCat->getId()); 
$mainProduct = $mainProduct->getProductCollection(); 
$mainProduct = $mainProduct->addAttributeToFilter('product_id', $_GET['cat_id']); 

得到一個產品,我的意思是你加載一個類別,然後加載一個產品集合,然後通過產品ID過濾器..爲什麼不:

$mainProduct = Mage::getModel('catalog/product')->load($yourSearchedId); 

我ASLO不明白爲什麼你用$ _GET過濾產品[「CAT_ID」]它看起來像一個類別ID ...

總之,如果你解釋你正在努力尋找到底是什麼,你可以得到更多的幫助。它看起來像你正在試圖找到與給定產品相關的所有產品。那麼爲什麼不能正確設定相關產品的相關產品,並獲得相關產品的收集。

$_product->getRelatedProductCollection(); 

UPDATE:

現在你清除你的要求試試這個:

$relatedIds = $product->getRelatedProductIds(); 
$myCollection = Mage::getModel('catalog/category') 
    ->load($currentCat->getId()) 
    ->getProductCollection(); 
$myCollection->addAttributeToFilter('product_id', array("in",$relatedIds)); 

//也addAttributeToSelect所有屬性時,可能需要像名字等 $ myCollection->負荷(); //也許你實際上不需要在這裏加載

請記住,我沒有測試這個代碼,它是從我頭頂寫的,測試它。但我希望你明白了。

+0

cat_id實際上是一個虛擬產品ID,但我忘了指定我給它的名稱並不明確。我嘗試顯示與我的主要產品相關的屬於特定類別的產品列表(其中我的主要產品不是)。 – Djouuuuh