Получить Выбранные Пользовательские параметры элемента предложения
Я пытаюсь изменить вес продукта в зависимости от того, какие пользовательские параметры выбраны. На данный момент у меня есть плагин для Magento\Quote\Model\Quote\Weight с этой функцией:
Публичная функция перед выпуском продукта(\Magento\Цитата\Модель\Цитата\Товар $тема, $продукт) {}
..В котором я могу успешно получить/установить вес продукта. На данный момент, однако, мне нужно выбрать вес из выбранной настраиваемой опции, и я не знаю, как это сделать тот. Любые мысли/идеи будут оценены по достоинству.
2 answers
Добавьте следующий код в функцию плагина, и вы получите выбранное значение параметра (я предполагаю, что у вас есть раскрывающийся список, и вы определяете значение своего пользовательского веса по метке выбранного параметра). Вы можете найти некоторое объяснение происходящему в комментариях. Вам нужно только изменить название вашей пользовательской опции в коде.
$customOptions = $product->getCustomOptions();
if (isset($customOptions['option_ids'])){
$optionIds = $customOptions['option_ids'];
foreach (explode(',', $optionIds->getValue()) as $optionId) {
$option = $product->getOptionById($optionId);
if (isset($customOptions['option_'.$optionId])){
//load the corrsponding quote item option object fo the given id
$itemOption = $subject->getOptionByCode('option_'.$optionId);
//create a model of the type of this option and load the data for the selected option value
$group = $option->groupFactory($option->getType())
->setOption($option)
->setConfigurationItem($subject)
->setConfigurationItemOption($itemOption);
//change here with the title of your custom option
if ($option->getTitle() == "your_custom_weight_title"){
//get the selected value, e.g. the label for drop down options
$selectedWeightValue = $group->getPrintableOptionValue($itemOption->getValue());
}
//get the order value object to access it's data like price or sku
$optionValue = $group->getOption()->getValueById($itemOption->getValue());
$sku = $optionValue->getSku();
$price = $optionValue->getPrice();
}
}
}
Гораздо проще:
$options = $item->getProduct()->getTypeInstance(true)->getOrderOptions($item->getProduct());