Как загрузить связанные продукты простого продукта с помощью ajax


У меня есть настраиваемый продукт, и при выборе его простого продукта мне нужны соответствующие сопутствующие продукты, загруженные через ajax. Любая помощь будет высоко оценена.

Вот как я называю свой ajax:

<script type="text/javascript">
require(["jquery"],function($) {
    $(document).ready(function() {
        var customurl = "<?php echo $this->getUrl().'custom/custom/index'?>";
        $.ajax({
            url: customurl,
            type: 'POST',
            dataType: 'json',
            data: {
                customdata1: 'test1',
                customdata2: 'test2',
            },
        complete: function(response) {

        },
            error: function (xhr, status, errorThrown) {
                console.log('Error happens. Try again.');
            }
        });
    });
});

И мой метод выполнения файла контроллера выглядит примерно так:

public function execute()
{        
    $resultRedirect = $this->pageFactory->create();          
        $blockInstance = $resultRedirect->getLayout()->getBlock('catalog.product.related');
        $message['html'] = $blockInstance->toHtml();

        /** Json Responce */
        $this->getResponse()->representJson(
            $this->jsonData->jsonEncode($message)
        );
}  

Однако я не могу получить продукты с помощью ajax, а также мне нужно знать, как я работаю с конкретным простым продуктом.

Author: Manoj Deswal, 2017-07-12

2 answers

Вам необходимо настроить реестр продуктов, чтобы получить текущий связанный продукт.

public function __construct(
    \Magento\Framework\App\Action\Context $context,
    \Magento\Catalog\Model\ProductFactory $_productloader,
    \Magento\Framework\Registry $registry)
{
    $this->registry = $registry;
    $this->_productloader = $_productloader;

}    




public function execute()
{
    $id=1; //pass current product id here        
    $product = $this->_productloader->create()->load($id);
    $this->registry->register('product', $product);
    $resultRedirect = $this->pageFactory->create();          

       $message['html']=$resultRedirect->getLayout()
                 ->createBlock("Magento\Catalog\Block\Product\ProductList\Related")
                 ->setTemplate("Magento_Catalog::product/list/items.phtml")
                 ->setData('type', 'related')
                 ->toHtml();


        /** Json Responce */
        $this->getResponse()->representJson(
            $this->jsonData->jsonEncode($message)
        );
} 
 1
Author: Qaisar Satti, 2017-07-12 10:03:36

Вы совершили какую-то ошибку.

1. Вы должны отправить идентификатор продукта/артикул в своем Ajax в качестве параметра Post

data: {
                customdata1: 'test1',
                customdata2: 'test2',
            },

Должны быть внесены изменения в :

data: {
    customdata1: 'test1',
    customdata2: 'test2',
    sku: '[PRODUCTSKU]'
    }, 

2. Вы должны отправить объект продукта в свой класс блоков из контроллера, используя реестр, как @Qaisar Satti.

3. Блок getBlock('catalog.product.related') доступен только , когда Текущая страница содержит сведения о продукте , а блок catalog.product.related определяется с помощью xml-документа макета. Решение: Вы должны добавить catalog_product_view обработчик для вашего обработчика ajax

 0
Author: Amit Bera, 2017-07-12 09:00:34