我想要实现的目标: 单击产品链接/图像(至少在某些区域)以打开包含完整产品信息的弹出窗口(基本上是产品查看页面的所有内容)。
到目前为止我做过/尝试过的事情:
- 创建了 ajax php 代码之外的所有内容(模块、链接、模板、重写)
- 创建了 ajax Controller (可以通过类似于
http://test.com/index.php/ajaxproductview/ajax/index/id/2
的链接访问)。 - 遵循各种教程(例如 this 或 this)——帮助我走到这一步。但我不想加载我的自定义 block ,我想要默认的产品 View block 。
尝试在 indexAction() 中添加一些代码。它到达那里,但代码失败。我没有收到任何错误/通知/报告,只是似乎无限循环杀死了我的处理器。
$body = $this ->getLayout() ->createBlock('product.info') // taken from catalog.xml ->toHtml(); $this->getResponse()->setBody($body);
所有其他页面都工作正常,这是一个新的 magento,只安装并激活了 magneto 和我的模块。
我的 AJAX 函数只是获取此 HTML 响应,将其放入一个 div 中,然后打开一个弹出窗口。
我的问题是(是)- 如何设置产品 ID,以便 block 知道要加载什么产品,以及如何正确加载该 block 。我也试过类似的东西:
谢谢。
PS:我也试过这个:
$layout = $this->getLayout();
$update = $layout->getUpdate();
$update->load('catalog_product_view');
$layout->generateXml();
$layout->generateBlocks();
$output = $layout->getOutput(); // $output is an empty string
最佳答案
产品 Controller 使用助手来设置事件产品。您应该能够在您的 Controller 中执行相同的操作!
在你做布局之前试试这个:
$productId = (int) $this->getRequest()->getParam('id');
Mage::helper('catalog/product')->initProduct($productId, $this);
还有一点需要注意: 如果你添加一个像 product.info block 这样的 block 。如果它在其模板文件中调用它们,则需要额外的子 block 。
使用自定义布局 xml 文件是最简单的方法。然后,您可以为操作句柄添加特定布局(您的操作句柄由模块的 etc/config.xml 文件中的路由器节点组成,位于 <frontend><routers>
下,例如 <Yourmodule>
节点,确保将其小写!然后使用下划线添加 Controller 名称和操作名称,在您的情况下为 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 方法呈现自身的根 block 。 因此,在您的 Controller 操作中,您只需要上面的两行,然后:
$this->loadLayout();
$this->renderLayout();
关于php - magento 中的 Ajax(加载产品 View block ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14394960/