Question

Je l'extension de la base de données de catalog_product_option_type_value. J'ai créé ma propre table, my_catalog_product_option_type_value et il a une référence à la option_type_id. J'ai que le travail, et mon travail de classe, mais j'ajouté une colonne de table à la grille des options personnalisées et je ne peux pas comprendre comment obtenir ma valeur de champ personnalisé.

entrer image description ici

Lorsque je clique sur le « bouton Enregistrer et continuer », je veux être en mesure d'obtenir l'ID du option_type_id nouvellement créé ou existant, puis utiliser cet identifiant et « ma valeur » pour insérer ou mettre à jour un enregistrement dans ma table my_catalog_product_option_type_value . J'ai créé un observateur qui capte l'événement catalog_product_prepare_save. Ce fonctionne, mais il retourne seulement un produit et ses options. Je ne peux pas obtenir ma valeur. J'ai trouvé ce code dans la classe ProductController:

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

Alors, je pensais que je serais capable de faire quelque chose comme

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

mais cela ne fonctionne pas parce que les données post est [options] [id] [valeurs] [id] [MY_VALUE]. Je ne sais pas comment j'obtenir l'ID de ces options. Donc, je suis un peu coincé et en espérant que quelqu'un peut me diriger dans la bonne direction

Était-ce utile?

La solution

On dirait que vous devrez faire quelques itérations du tableau et la vérification de clés pour tirer vos valeurs.

Essayez dans votre observateur.

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

}

L'espoir qui aide.

Autres conseils

Dans l'observateur catalog_product_prepare_save, vous devez utiliser le code

  

$ options = $ observateur-> GetEvent () -> getProduct () -> getProductOptions ();

au lieu de

  

$ options = $ observateur-> GetEvent () -> getProduct () -> getOptions ();

& consulter la partie restante dans la réponse ProxiBlue!

Je l'ai testé avec la version 1.8.1.0 magento.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top