一尘不染

magento中的Ajax(加载产品视图块)

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

阅读 249

收藏
2020-07-26

共1个答案

一尘不染

产品控制器使用助手来设置活动产品。您应该能够在控制器中执行相同的操作!

在进行布局之前,请尝试以下操作:

$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),如下所示:

<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();
2020-07-26