gpt4 book ai didi

ajax - Magento - 在当前模板设计中通过 ajax 加载产品

转载 作者:行者123 更新时间:2023-12-04 06:35:27 25 4
gpt4 key购买 nike

我正在构建一个 magento 扩展,其中我需要在左侧栏上按树形顺序显示所有产品,然后单击每个类别将通过发送 ajax 请求加载类别的产品。为了显示类别树,我使用了一个块。

我是 magento 的新手,所以我想向我的 Controller 发送 ajax 请求,将所有产品数据获取为 JSON并在前端创建 HTML 以显示产品。

我用 2 column left bar 获取了基本主题的 HTML产品列表并在 ajax 方法中使用。我用过

function loadCategoryProducts(categoryId) {
jQuery.ajax({
url: '/myModule/index/loadcategoryproduct',
type: 'post',
data: {categoryId: categoryId},
success: function(products) {
products = jQuery.parseJSON(products);
if (products != '') {
var html = '';
html += '<div class="page-title category-title">';
// blah blah blah blah blah to draw html from ajax request
}
html += '</ul>';
html += '</div>' // end of category-products product
jQuery('.col-main').html(html);
}
}
});

}

还有我的 Controller 代码
public function loadcategoryproductAction() {
$id = $this->getRequest()->getParam('categoryId');
if ($id) {
$_category = Mage::getModel('catalog/category')->load($id);
$product = Mage::getModel('catalog/product');

//load the category's products as a collection
$_productCollection = $product->getCollection()
->addAttributeToSelect('*')
->addCategoryFilter($_category)
->load();



// build an array for conversion
$json_products = array();
foreach ($_productCollection as $_product) {
$_product->getData();
$json_products[] = array(
'name' => $_product->getName(),
'url' => $_product->getProductUrl(),
'description' => nl2br($_product->getShortDescription()),
'price' => $_product->getFormatedPrice(),
'image' => $_product->getImageUrl());
}

$data = json_encode($json_products);

echo $data;
die;
}
}

它工作得很好,但我知道这只是一个静态的东西,因为我使用的是基本主题的 HTML 和 CSS。它只适用于这个主题。如果magento商店的主题改变了怎么办?

那么我正在寻找的是如何在当前事件主题中显示产品?我只是向我的 Controller 发送 ajax 请求,获取产品并且这些产品必须以当前主题布局呈现?必须有一种方法可以做到这一点,但我仍然无法找到。我用谷歌搜索,但都是徒劳的。我不喜欢为它使用任何内置扩展。我希望我的扩展程序能做到这一切。请指导。

最佳答案

好的,我已经找到了解决方案。您只需要获取类别并在注册表中设置为当前类别。然后您需要获取当前事件模板。对于列出 Magento 的产品,请始终检查 list.phtml当前事件主题的文件。所以这里是步骤

  • 获取分类
  • 将您的类别注册为当前类别。
  • 获取当前模板 list.phtml 文件并将您的类别传递给该文件
  • 剩下的交给Magento,它可以处理,因为It is Magento :-)

  • 这是将替换我的 Controller 代码的代码
     $id = $this->getRequest()->getParam('categoryId');
    $category = Mage::getModel('catalog/category') ->setStoreId(Mage::app()->getStore()->getId()) ->load($id);
    Mage::unregister('current_category');
    Mage::register('current_category', $category);
    echo $this->getLayout() ->createBlock('catalog/product_list') ->setTemplate('catalog/product/list.phtml') ->setCategoryId($id) ->toHtml();
    die;

    这将返回产品 HTML,我只需要将 HTML 放入 success function我的ajax请求。
    success : function(products) {
    jQuery('col-main').html(products)
    }

    就是这样。 :-)

    关于ajax - Magento - 在当前模板设计中通过 ajax 加载产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24647161/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com