Помощь с добавлением пользовательского поля значения типа опции

magento.stackexchange https://magento.stackexchange.com/questions/1231

Вопрос

Я расширяю базу данных CATALOG_PRODUCT_OPTION_TYPE_VALUE. Я создал свою собственную таблицу, my_catalog_product_option_type_value, и она имеет ссылку на Option_type_id. У меня есть это работа, и мой класс работал, но я добавил столбец таблицы в сетку пользовательских параметров, и я не могу понять, как получить мое пользовательское значение поля.

enter image description here

Когда я нажимаю кнопку «Сохранить и продолжить», я хочу иметь возможность получить идентификатор вновь созданного или существующего 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top