我想要实现的目标: 单击产品链接/图像(至少在某些区域)以打开包含完整产品信息的弹出窗口(基本上是产品视图页面的所有内容)。
到目前为止我做了什么/尝试过:
http://test.com/index.php/ajaxproductview/ajax/index/id/2
的链接访问)。尝试在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
答案 0 :(得分:8)
产品控制器使用帮助程序来设置活动产品。您应该能够在控制器中执行相同操作!
在进行布局之前试试这个:
$productId = (int) $this->getRequest()->getParam('id');
Mage::helper('catalog/product')->initProduct($productId, $this);
另一件要注意的事情是: 如果添加类似product.info块的块。如果它在模板文件中调用它们,则需要额外的子块。
使用自定义布局xml文件最简单。然后,您可以为操作句柄添加特定布局(您的操作句柄包含模块的<frontend><routers>
下的etc / config.xml文件中的路由器节点,例如<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();