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

Magento-在当前模板设计中通过ajax加载产品,ajax,magento,Ajax,Magento,我正在构建一个magento扩展,在这个扩展中,我需要在左栏上以树的顺序显示所有产品,然后单击每个类别,将通过发送ajax请求来加载该类别的产品。为了显示类别树,我使用了一个块 我是magento的新手,所以我想向我的控制器发送ajax请求,以JSON的形式获取所有产品数据,并在前端创建HTML以显示产品 我使用产品列表的2列左栏作为基本主题的HTML,并在ajax方法中使用。我以前喜欢 function loadCategoryProducts(categoryId) { jQuery.aja

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

我是magento的新手,所以我想向我的控制器发送ajax请求,以
JSON
的形式获取所有产品数据,并在前端创建HTML以显示产品

我使用产品列表的
2列左栏
作为基本主题的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);
        }
    }
});
它工作得很好,但我知道这只是一个静态的东西,因为我使用的是基本主题的HTML和CSS。它只适用于这个主题。如果magento商店的主题改变了怎么办


所以我要看的是如何在当前活动主题中显示产品?我只是向我的控制器发送ajax请求,获取产品,这些产品必须在当前的主题布局中呈现?一定有办法做到这一点,但我仍然找不到。我在谷歌上搜索,但都是徒劳的。我不喜欢为它使用任何内置的扩展。我想让我的分机做这一切。请指导。

好的,我已经想出了解决办法。您只需要获取类别并在注册表中设置为当前类别。然后您需要获取当前活动模板。对于列出Magento的产品,请始终选中当前活动主题的
list.phtml
文件。下面是步骤

  • 获取类别
  • 将您的类别注册为当前类别
  • 获取当前template list.phtml文件并将您的类别传递给该文件
  • 剩下的留给Magento,它可以处理,因为它是Magento
  • 这是将替换我的控制器代码的代码

    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;
        }
    }
    
     $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放入ajax请求的
    success函数中

    success : function(products) {
      jQuery('col-main').html(products)
    }
    

    就是这样。:-)

    这是一个很难回答的问题,因为没有人回答,还是太无聊了?太好了,你救了我一天,你有解决Magento2的办法吗@阿瓦伊斯