Получить текущий настраиваемый идентификатор продукта в Magento 2
Если у меня есть настраиваемый продукт, и я выбираю красный цвет, то как я могу получить идентификатор выбранного виртуального продукта?
Мне нужно было бы делать это каждый раз, когда на странице продукта выбирается новый цвет, чтобы получить идентификатор нового выбранного виртуального продукта.
Спасибо!
1
Author: Amrit Pal Singh, 2017-07-19
1 answers
Предлагая решение, к которому я пришел, не уверен, что это лучший способ сделать это, но тем не менее работает.
При нажатии на опцию продукта вызовите функцию ajax с идентификатором продукта и идентификатором опции, которая выбрана в данный момент.
var id = <?php echo $_product->getId() ?>;
var option_id = $('.swatch-option.selected').attr('option-id');
$.ajax({
url: "module_route/index/class_name",
data: { id : id, option_id : option_id},
type: "POST",
success: function(result){
console.log(result);
}
});
В контроллере вашего модуля
namespace Module\Name\Controller\Index;
class StockLevel extends \Magento\Framework\App\Action\Action
{
public function execute()
{
// Get info sent from ajax
$id = $_POST['id'];
$option_id = $_POST['option_id'];
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$product = $objectManager->get('Magento\Catalog\Model\Product')->load($id);
$StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
$productTypeInstance = $product->getTypeInstance();
$usedProducts = $productTypeInstance->getUsedProducts($product);
foreach ($usedProducts as $child) {
// get all the child info
echo "<pre>";
print_r($child->getData());
echo "<pre>";
$child_option = $child->getData('option you are comparing color ect');
if ($child_option == $option_id) {
$stock = $StockState->getStockQty($child->getId(), $child->getStore()->getWebsiteId());
echo $stock;
}
}
}
}
3
Author: Nathaniel Meyer, 2017-07-21 00:06:38