我要实现的目标:单击产品链接/图像(至少在某些区域)以打开一个弹出窗口,其中包含完整的产品信息(基本上是产品查看页面的所有内容)。
到目前为止,我做了/尝试过的是:
http://test.com/index.php/ajaxproductview/ajax/index/id/2
$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
产品控制器使用助手来设置活动产品。您应该能够在控制器中执行相同的操作!
在进行布局之前,请尝试以下操作:
$productId = (int) $this->getRequest()->getParam('id'); Mage::helper('catalog/product')->initProduct($productId, $this);
要注意的另一件事:如果添加诸如product.info块之类的块。如果在其模板文件中调用它们,则需要其他子块。
使用自定义布局xml文件将是最简单的。然后,您可以为操作句柄添加特定的布局(您的操作句柄由模块中的etc / config.xml文件中的routers节点组成<frontend><routers>,例如<Yourmodule>node,请确保将其小写!然后用下划线添加控制器名称和操作名称,在您的情况下为index_index),如下所示:
<frontend><routers>
<Yourmodule>
<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();