Aide avec l'ajout d'une option personnalisée champ de valeur de type
-
16-10-2019 - |
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é.
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
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.