2012-10-19 68 views
4

我從Web服務獲取magento ID的列表。我加載到這些和數組$product_ids,所以我有這樣的事情:Magento - 獲取結果視圖爲產品集合的HTML

Array 
(
    [0] => 1965 
    [1] => 3371 
    [2] => 1052 
) 

然後我就可以使之成爲一個集這樣的:

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

使用我的Magento的檢查,我見過的類別頁面使用類Mage_Catalog_Block_Product_List來顯示產品列表。我想在班上做類似的事情。我已經試過裝:

$ProductList = new Mage_Catalog_Block_Product_List(); 
$ProductList->setCollection($collection); 

然後我試過如下加載結果的HTML:

$CollectionHTML = $ProductList->_toHtml(); 

$CollectionHTML是空的。

我該如何獲得你在列表視圖中看到的HTML(即生成的前端/ base/default/template/catalog/product/list.phtml的輸出,但給定我的收藏)?

+0

爲什麼要繞過LAYOUT圖層(xml佈局文件)?在magento中,你不應該直接實例化一個PHP Block類..你必須通過$ this-> getLayout() - > createBlock('catalog/product_list')加載它,或讓Layout文件去做(這是他們的目的)。我建議你閱讀/學習magento教程/書籍 –

+0

@Bixi我同意關注點的分離,我原則上同意你的看法,並感謝提出這一點,因爲其他用戶不應該認爲這不是理想的解決方案。但我不想在這裏進行哲學辯論。我必須維護一個腳本並按照自己的方式(正確的方式)執行操作,這將涉及大量的重構。因此我的問題。 – Fuser97381

回答

3

讓代碼以正確的方式工作在Magento中要比嘗試使用醜陋的遺留代碼更容易。當您有特定問題時,我很樂意幫助您制定正確的代碼。而且,從長期來看,技術債務的成本會更高。

無論如何,回到你的問題。

在Magento塊沒有實例化,就像在任何應用程序$myvar = new className ...幾乎從來沒有。 This tutorial可以幫助您更好地理解Magento的佈局和區塊。

但是,如果你想創建一個塊的方式來做到這一點是:

$block = Mage::getSingleton('core/layout')->createBlock('catalog/product_list') 

現在與您的產品集合,你應該檢查如何Mage_Catalog_Block_Product_List::_getProductCollection實際工作,因爲它使用了分層導航,而不是一個簡單的產品集合。

另外,假定至少您使用的Magento控制器和你是一個函數內,下面的代碼將顯示的產品的第一頁爲指定類別:

//$category_id needs to be set 
$layout = Mage::getSingleton('core/layout'); 
$toolbar = $layout->createBlock('catalog/product_list_toolbar'); 
$block = $layout->createBlock('catalog/product_list'); 
$block->setChild('toolbar', $toolbar); 
$block->setCategoryId($category_id); 
$block->setTemplate('catalog/product/list.phtml'); 
$collection = $block->getLoadedProductCollection(); 
$toolbar->setCollection($collection); 
//render block object 
echo $block->renderView(); 

顯示特定的ID:

  • 您使用$ CATEGORY_ID根類別id變量(也確保顯示器根類別設置(或包含您的產品ID,其他類別的ID)
  • 你可以掛接到catalog_block_product_list_collection事件到您的ID過濾器添加到集合(這就是所謂的_beforeToHtml功能)

但是,這一切的建設不紮實且仍有需要注意(其它子模塊,濾波器等一些點)

+0

非常感謝您的幫助! – Fuser97381