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

Vla*_*eda 2 php ajax magento

我想要实现的目的:点击产品链接/图像(至少在某些区域)打开包含完整产品信息的弹出窗口(基本上是产品视图页面的所有内容).

到目前为止我做了什么/尝试过:

  • 创建了ajax php代码之外的所有东西(模块,链接,模板,重写)
  • 创建了ajax控制器(可以使用类似于的链接访问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);
    
    Run Code Online (Sandbox Code Playgroud)

所有其他页面工作正常,它是一个新的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
Run Code Online (Sandbox Code Playgroud)

mpa*_*per 8

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

在进行布局之前尝试这样做:

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

另一件需要注意的事情是:如果添加像product.info块这样的块.如果它在模板文件中调用它们,则需要额外的子块.

最简单的方法是使用自定义布局xml文件.然后,您可以为操作句柄添加特定的布局(您的操作句柄由模块的etc/config.xml文件中的路由器节点组成<frontend><routers>,例如<Yourmodule>节点,请确保小写它!然后使用下划线添加控制器名称和操作name,在你的情况下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>
Run Code Online (Sandbox Code Playgroud)

这使得view.phtml成为使用其toHtml方法呈现自身的根块.因此,在您的控制器操作中,您只需要我上面的两行,然后:

$this->loadLayout();
$this->renderLayout();
Run Code Online (Sandbox Code Playgroud)