Frage

Ich erweitere die Datenbank von Catalog_Product_Option_Type_Value. Ich habe meine eigene Tabelle erstellt, my_catalog_product_option_type_value und es gibt einen Verweis auf die Option_Type_id. Ich habe das funktioniert und meine Klasse funktioniert, aber ich habe dem benutzerdefinierten Optionsraster eine Tabellenspalte hinzugefügt und kann nicht herausfinden, wie ich meinen benutzerdefinierten Feldwert erhält.

enter image description here

Wenn ich auf die Schaltfläche "Speichern und fortfahren" klicke, möchte ich in der Lage sein, die ID der neu erstellten oder vorhandenen Option_Type_id abzurufen und diese ID und "My Value" dann zu verwenden, um einen Datensatz in meine Tabelle my_catalog_product_option_type_value einzufügen oder zu aktualisieren. Ich habe einen Beobachter erstellt, der das Ereignis catalog_product_prepare_save aufnimmt. Das funktioniert, aber es gibt nur ein Produkt und seine Optionen zurück. Ich kann meinen Wert nicht bekommen. Ich habe diesen Code in der ProductController -Klasse gefunden:

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

Also, ich könnte in der Lage sein, so etwas zu tun

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

Das funktioniert jedoch nicht, da die Postdaten [Optionen] [ID] [Werte] [ID] [my_Value] sind. Ich weiß nicht, wie ich den Ausweis dieser Optionen bekommen würde. Also stecke ich ein wenig fest und hoffe, dass mich jemand in die richtige Richtung verweisen kann

War es hilfreich?

Lösung

Sieht so aus, als müssten Sie einige Array -Itterationen und Schlüsselüberprüfungen durchführen, um Ihre Werte zu ziehen.

Versuchen Sie dies in Ihrem Beobachter.

$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
              } 
          }
      }
  } 

}

Ich hoffe, das hilft.

Andere Tipps

Im CATALOG_PRODUCT_PREPARE_SAVE -Beobachter sollten Sie den Code verwenden

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

Anstatt von

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

& verweisen Sie den verbleibenden Teil in der Antwort von Proxiblue!

Ich habe es mit Magento 1.8.1.0 -Version getestet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top