Получить Выбранные Пользовательские параметры элемента предложения


Я пытаюсь изменить вес продукта в зависимости от того, какие пользовательские параметры выбраны. На данный момент у меня есть плагин для Magento\Quote\Model\Quote\Weight с этой функцией:

Публичная функция перед выпуском продукта(\Magento\Цитата\Модель\Цитата\Товар $тема, $продукт) {}

..В котором я могу успешно получить/установить вес продукта. На данный момент, однако, мне нужно выбрать вес из выбранной настраиваемой опции, и я не знаю, как это сделать тот. Любые мысли/идеи будут оценены по достоинству.

Author: brackfost, 2019-03-12

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();
        } 
    }
}
 1
Author: HelgeB, 2019-03-13 15:13:09

Гораздо проще:

$options = $item->getProduct()->getTypeInstance(true)->getOrderOptions($item->getProduct());
 0
Author: Michael Leiss, 2020-10-06 09:33:45