我正在扩展catalog_product_option_type_value数据库。我创建了自己的表格,my_catalog_product_option_type_value,并具有对option_type_id的引用。我有工作,我的课程正常工作,但是我在自定义选项网格中添加了一个表列,我不知道如何获得自定义字段值。

enter image description here

当我单击“保存并继续按钮”时,我希望能够获取新创建的或现有option_type_id的ID,然后使用该ID并使用“我的值”来插入或更新记录中的记录中的MY_CATALOG_PRODUCT_OPTION_TYPE_VALUE TABLE。我创建了一个观察者,该观察者拾取了catalog_product_prepare_save事件。那是有效的,但它只能返回产品,并且是选项。我无法获得我的价值。我在ProductController类中找到了此代码:

if (isset($productData['options']) && !$product->getOptionsReadonly()) {
        $product->setProductOptions($productData['options']);
    }

所以,我虽然我能够做类似的事情

$productData['options']['my_value']

但这是行不通的,因为帖子数据是[options] [id] [values] [id] [my_value]。我不知道如何获得这些选项的ID。所以,我有点卡住,希望有人可以指向我正确的方向

有帮助吗?

解决方案

看起来您必须进行一些数组迭代和键检查才能提取您的值。

在观察者中尝试一下。

$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观察者中,您应该使用代码

$ options = $ observer-> getEvent() - > getProduct() - > getProductOptions();

代替

$ options = $ observer-> getEvent() - > getProduct() - > getOptions();

并在Proxiblue答案中参考其余部分!

我测试了它与Magento 1.8.1.0版本一起使用的。

许可以下: CC-BY-SA归因
scroll top