2013-01-18 57 views
2

我想要實現的內容: 點擊產品鏈接/圖像(至少在特定區域)打開彈出窗口,其中包含完整的產品信息(基本上包含所有內容產品查看頁面)。magento中的Ajax(加載產品視圖塊)

我做什麼/到目前爲止已經試過:

  • 創造了所有的東西AJAX的PHP代碼之外(模塊,鏈接,模板,改寫)
  • 創建Ajax控制器(可以用訪問類似於:http://test.com/index.php/ajaxproductview/ajax/index/id/2)的鏈接。
  • 按照各種教程(如thisthis) - 這幫助我得到這一點。但我不想加載我的自定義塊,我想要默認的產品視圖塊。
  • 試圖在indexAction()中添加一些代碼。它到達那裏,但代碼失敗。我沒有收到任何錯誤/通知/報告,就像是殺死我的處理器的無限循環。

    $body = $this 
        ->getLayout() 
        ->createBlock('product.info') // taken from catalog.xml 
        ->toHtml(); 
    $this->getResponse()->setBody($body); 
    

所有其他網頁正常工作,這是一個新鮮的Magento只有磁和安裝並激活了我的模塊。

我的AJAX函數只是獲取此HTML響應,將其放入div中,並打開一個彈出窗口。

我的問題是 - 如何設置產品ID,以便塊知道要加載的產品,以及如何正確加載此塊。我也試過類似的東西:

謝謝。

PS:我也試過這樣:

$layout = $this->getLayout(); 
    $update = $layout->getUpdate(); 
    $update->load('catalog_product_view'); 
    $layout->generateXml(); 
    $layout->generateBlocks(); 
    $output = $layout->getOutput(); // $output is an empty string 

回答

8

產品控制器使用一個輔助設置活動的產物。你應該可以在你的控制器中做同樣的事情!

試試這個,你做你以前布點:如果添加了塊像product.info塊 :

$productId = (int) $this->getRequest()->getParam('id'); 
Mage::helper('catalog/product')->initProduct($productId, $this); 

另一件事是知道的。如果在模板文件中調用它們,它需要額外的子塊。

這將是最容易使用自定義佈局xml文件。然後,您可以爲您的動作句柄添加一個特定的佈局(您的動作句柄由模塊的etc/config.xml文件<frontend><routers>下的您的路由器節點組成,例如<Yourmodule>節點,請確保將其小寫!然後用下劃線添加控制器名稱和動作名稱,你的情況index_index)是這樣的:

<yourmodule_index_index> 
    <remove name="right"/> 
    <remove name="left"/> 
    <block type="catalog/product_view" name="root" output="toHtml" template="catalog/product/view.phtml"> 
    <!-- Add all the child blocks you need --> 
    </block> 
</yourmodule_index_index> 

這使得view.phtml根塊這使得本身使用其toHtml方法。 因此,在你的控制器動作,你需要的是我的上方,然後兩行:

$this->loadLayout(); 
$this->renderLayout(); 
+0

好吧,所以基本上我需要添加這些塊爲好,基本上覆制在XML結構化控制器,正確嗎? –

+0

@ VladPreda是的,正確的。最簡單的方法是在模塊中添加自己的xml佈局文件。然後將塊添加到特定的操作句柄中,如「 ...」。我會就此更新我的問題。 – mpaepper

+0

@ VladPreda在此詳細闡述。 – mpaepper