Помощь с добавлением пользовательского поля значения типа опции
-
16-10-2019 - |
Вопрос
Я расширяю базу данных CATALOG_PRODUCT_OPTION_TYPE_VALUE. Я создал свою собственную таблицу, my_catalog_product_option_type_value, и она имеет ссылку на Option_type_id. У меня есть это работа, и мой класс работал, но я добавил столбец таблицы в сетку пользовательских параметров, и я не могу понять, как получить мое пользовательское значение поля.
Когда я нажимаю кнопку «Сохранить и продолжить», я хочу иметь возможность получить идентификатор вновь созданного или существующего Option_type_id, а затем использовать этот идентификатор и «мое значение», чтобы вставить или обновить запись в мою таблицу MY_CATALOG_PRODUCT_OPTION_TYPE_VALUE. Я создал наблюдателя, который собирает событие Catalog_product_prepare_save. Это работает, но он только возвращает продукт и его варианты. Я не могу получить свою ценность. Я нашел этот код в классе ProductController:
if (isset($productData['options']) && !$product->getOptionsReadonly()) {
$product->setProductOptions($productData['options']);
}
Итак, я, хотя я смог бы сделать что -то вроде
$productData['options']['my_value']
Но это не работает, потому что данные о сообщении - это [options] [id] [значения] [id] [my_value]. Я не знаю, как я бы получил удостоверение личности этих вариантов. Итак, я немного застрял и надеюсь, что кто -то сможет указать мне в правильном направлении
Решение
Похоже, вам придется сделать несколько массивов и проверить ключ, чтобы вытащить ваши значения.
Попробуйте это в своем наблюдателе.
$options = $observer->getEvent()->getProduct()->getOptions();
if (is_array($options)) {
foreach ($options as $key => $option) {
if (is_array($option) && array_key_exists('values',$option)) {
foreach ($option['values'] as $value) {
if (is_array($value) && array_key_exists('YOUR FIELD NAME',$value)) {
$result = $value['YOUR FIELD NAME'];
// do something with the $result
}
}
}
}
}
Надеюсь, это поможет.
Другие советы
В Catalog_product_prepare_save Observer вы должны использовать код
$ options = $ stemver-> getevent ()-> getProduct ()-> getProductoptions ();
вместо
$ options = $ stemver-> getevent ()-> getProduct ()-> getOptions ();
& Проведите оставшуюся часть в ответе Proxiblue!
Я проверил это работать с версией Magento 1.8.1.0.