I created a custom page, where users can input SKU of product and after they submit the button, its load product details, like name, image and a configurable option for configurable product.
Here is the issue: I get the SKU from the input field, but product details are not loading on my view page, or details not successfully sent from the controller to view(Actually from block to view, as some page suggested).
I am following the answer: Magento 2 - Send form data to Controller using AJAX and return Result to PHTML
File: viewproduct.phtml
Path
SimpleMagento/AddBulkProduct/view/frontend/templates/viewproduct.phtml
<form data-mage-init='{"validation": {}}' id="load_product">
<div class="control">
<input type="text" name="get_product" id="get_product" class="input-text" placeholder="<?= __('Product SKU') ?>" data-validate="{required:true}" />
</div>
<button type="submit" class="action-primary"><?= _('Submit') ?></button>
</form>
<?php
echo $test = $block->getProductBySku();
//var_dump($test); exit();
?>
<script>
require(['jquery'],function(){
jQuery(document).ready(function() {
jQuery("#load_product").submit(function(){
var getProduct = jQuery("input[name='get_product']").val();
var url = "<?php echo $block->getBaseUrl().'AddBulkProduct/loadproduct/Index/' ?>";
jQuery.ajax({
url: url,
type: "POST",
data: {get_product:getProduct},
showLoader: true,
cache: false
success: function(response){
console.log(response.output);
}
});
return false;
});
});
});
</script>
File: viewproduct_loadproduct_index.xml
Path
SimpleMagento/AddBulkProduct/view/frontend/layout
<body>
<referenceContainer name="content">
<block class="SimpleMagento\AddBulkProduct\Block\Index" template="SimpleMagento_AddBulkProduct::viewproduct.phtml">
</block>
</referenceContainer>
</body>
File: Index.php (Controller)
Path
SimpleMagento/AddBulkProduct/Controller/loadproduct/Index.php
public function execute()
{
$getProduct = $this->getRequest()->getParam('get_product');
$result = $this->jsonFactory->create();
$resultPage = $this->pageFactory->create();
$block = $resultPage->getLayout()
->createBlock('SimpleMagento\AddBulkProduct\Block\Index')
->setTemplate('SimpleMagento_AddBulkProduct::viewproduct.phtml')
->setData('get_product',$getProduct)
->toHtml();
$result->setData(['output' => $block]);
return $resultPage;
}
File: Index.php (Block)
Path
SimpleMagento/AddBulkProduct/Block/Index.php
class Index extends Template
{
/**
* @var ProductRepositoryInterface
*/
protected $productRepository;
public function __construct(Template\Context $context, ProductRepositoryInterface $productRepository)
{
parent::__construct($context);
$this->productRepository = $productRepository;
}
public function getProductBySku($sku)
{
return $this->productRepository->get($sku);
}
}
Current Situation: As a new in Magento, Please tell me if I am using a correct flow or not?
As per my understanding, I am using the block to pass data from controller to my phtml file, but after using block, Magento's default layout is not showing just basic html input text and button, How can I restore my layout?
Currently after press submitting button, its just reloading with '?get_product=24-MB01' url.
Any help or suggestion would be appreciated.
Thanks