2012-04-03 6 views
11

Ich habe einige interessante zu Custom Options Produktfragen: -Magento - Get Benutzerdefinierte Option Wert Details von Optionswert ID

  1. Gibt es einen Unterschied zwischen Optionen & Benutzerdefinierte Optionen? Das ist, weil ich zwei verschiedene Eigenschaften für jede Produktdetails gefunden haben, in fast allen produktbezogenen Module: -

    • options
    • custom_options

    Allerdings gibt es nur eine Klasse nur für die Produktoption, die sich um die benutzerdefinierten Optionen kümmert. Bitte jemanden diesen Punkt klären.

  2. Ich versuche, die benutzerdefinierten Optionen eines geordneten Elements, einschließlich der benutzerdefinierten Optionspreis und Preistyp abrufen. Das Problem ist, dass Magento nur den Optionswert für das entsprechende Bestellelement speichert und nicht alle Details (wie Preis für benutzerdefinierte Option & Preistyp).
    Also habe ich ein Objekt dieser Klasse Mage_Catalog_Model_Product_Option_Value erstellt, unter Berücksichtigung nur des benutzerdefinierten Optionstyps drop_down. Ich habe meinen Code unten angegeben, aber es ist immer noch vergeblich und bringt nicht die gewünschten Ergebnisse. Kann jemand bitte diesen Code korrigieren und mir helfen?

-Code für den Punkt # 2: -

echo "<pre>"; 
// $collection contains the whole Order Collection 
foreach ($collection as $order) { 
    foreach ($order->getAllItems() as $item) { 
     $customOptions = $item->getProductOptions(); 

     foreach ($customOptions['options'] as $_eachOption) { 
      // Value ID is stored in this field "option_value" 
      $objModel = Mage::getModel('catalog/product_option_value')->load($_eachOption['option_value']); 

      // This should provide all the details of this particular Option Value as chosen by the Customer when ordering this Product, but unfortunately it doesn't 
      print_r($objModel->getData()); 

      /** 
      * This gives the output as, without any details on Price and Price Type:- 
      * Array 
      * { 
      *  [option_type_id] => 13014 
      *  [option_id] => 4921 
      *  [sku] => XBPS22 
      *  [sort_order] => 0 
      * } 
      */ 

      unset($objModel); 
     } 
    } 
} 
echo "</pre>"; 

Nachdem einige Kontrollen zu tun, fand ich, dass der Preis auf jede Option Werte bezogen in catalog_product_option_type_price Datenbanktabelle gespeichert ist, und der Preis mit jedem im Zusammenhang Optionen sind in catalog_product_option_price Datenbanktabelle gespeichert. Es muss also eine Möglichkeit geben, wie Magento die entsprechenden Preise für den benutzerdefinierten Optionswert abruft. Bitte erleuchte mich und korrigiere den obigen Code?

Vielen Dank an alle, im Voraus!

Antwort

15

Ich weiß, dass dies eine alte Frage ist, aber es fehlt eine Antwort und nach einer wahnsinnigen Suche nach einer Antwort, während ich das gleiche Problem hatte, dachte ich, ich würde hier meine Antwort für andere Personen geben, die das finden könnten.

In diesem Code, ich das Produkt nach ID laden, erhalten die Option Sammlung, die in meinen Tests nur die benutzerdefinierten Optionen für ein Produkt, keine Attribute oder andere Optionen enthält, durchlaufen die Optionen und laden Sie die Werte Sammlung für jedes Möglichkeit. Dieser Democode sollte praktisch überall testbar sein, solange Sie eine Produkt-ID haben.

<?php 

$productID = $this->getProductId(); //Replace with your method to get your product Id. 

$product = Mage::getModel('catalog/product')->load($productID); 
$options = Mage::getModel('catalog/product_option')->getProductOptionCollection($product); 

foreach ($options as $option) { 
    Mage::log('Name: ' . $option->getDefaultTitle()); 
    Mage::log(' Type: ' . $option->getType()); 
    Mage::log(' Class: ' . get_class($option)); 
    Mage::log(' Price/Type: ' . ($option->getPrice() ? $option->getPrice() : '0.00') . '/' . $option->getType()); 

    if ($option->getType() === 'drop_down') { 
     $values = Mage::getSingleton('catalog/product_option_value')->getValuesCollection($option); 
     Mage::log(' Values: (name/price/type)'); 

     foreach ($values as $value) { 
      Mage::log('  ' . $value->getTitle() . '/' . $value->getPrice() . '/' . $value->getPriceType());; 
     } 
    } 
} 
?> 

Beispiel Protokollausgabe:

2014-02-18T20:15:25+00:00 DEBUG (7): Name: Turtle Color 
2014-02-18T20:15:25+00:00 DEBUG (7):  Type: drop_down 
2014-02-18T20:15:25+00:00 DEBUG (7):  Class: Mage_Catalog_Model_Product_Option 
2014-02-18T20:15:25+00:00 DEBUG (7):  Price/Type: 0.00/drop_down 
2014-02-18T20:15:25+00:00 DEBUG (7):  Values: (name/price/type) 
2014-02-18T20:15:25+00:00 DEBUG (7):   Red/0.0000/fixed 
2014-02-18T20:15:25+00:00 DEBUG (7):   White/0.0000/fixed 
2014-02-18T20:15:25+00:00 DEBUG (7):   Blue/0.0000/fixed 

Beispiel verfügbaren Daten für $ Option Mage :: log (Option- $> toArray());

Hinweis: price_type und price_type sind nur für die Optionswerte für Optionen vom Typ drop_down verfügbar.

2014-02-18T20:19:44+00:00 DEBUG (7): Array 
(
    [option_id] => 135 
    [product_id] => 80 
    [type] => field 
    [is_require] => 0 
    [sku] => 
    [max_characters] => 25 
    [file_extension] => 
    [image_size_x] => 
    [image_size_y] => 
    [sort_order] => 90 
    [description] => 
    [default_title] => Turtle Name 
    [store_title] => 
    [title] => Turtle Name 
    [default_price] => 0.0000 
    [default_price_type] => fixed 
    [store_price] => 
    [store_price_type] => 
    [price] => 0.0000 
    [price_type] => fixed 
) 

Beispiel verfügbare Daten für $ -Werte Mage :: log ($ values-> toArray());

2014-02-18T20:25:21+00:00 DEBUG (7): Array 
(
    [totalRecords] => 2 
    [items] => Array 
     (
      [0] => Array 
       (
        [option_type_id] => 1149 
        [option_id] => 229 
        [sku] => 
        [sort_order] => 10 
        [default_price] => 0.0000 
        [default_price_type] => fixed 
        [store_price] => 0.0000 
        [store_price_type] => fixed 
        [price] => 0.0000 
        [price_type] => fixed 
        [default_title] => 31" 
        [store_title] => 31" 
        [title] => 31" 
       ) 
      [1] => Array 
       (
        [option_type_id] => 1150 
        [option_id] => 229 
        [sku] => 
        [sort_order] => 20 
        [default_price] => 0.0000 
        [default_price_type] => fixed 
        [store_price] => 0.0000 
        [store_price_type] => fixed 
        [price] => 0.0000 
        [price_type] => fixed 
        [default_title] => 31.5" 
        [store_title] => 31.5" 
        [title] => 31.5" 
       ) 
     ) 
) 
+0

Hey, wie kann ich '$ value-> setPrice()' Ich möchte den Preis der Optionen ändern Dank. –

+0

Ich sehe, dass Sie die Werte aus Drop-Down-Optionstypen ausgeben, wie sieht es mit den Textfeldwerten aus? Ich versuche meine Daten zu sammeln, nachdem der Artikel dem Warenkorb hinzugefügt wurde. Danke im Voraus. – NotJay

3

Laden Sie zunächst die Produkte aus der Kollektion dann die Schleife wie folgt:

$product = 100; // product id, you should get first 

foreach($product->getOptions() as $options) 
{ 
    $options->getType(); // get option type 

    $optionValues = $options->getValues(); 

    foreach($optionValues as $optVal) 
    { 
     print_r($optVal->getData()); 
     // or $optVal->getData('option_id') 
    } 
} 

* Modified *

$prdSku = 125; // sample sku 
$product = Mage::getModel('catalog/product'); 
$prdId = $product->getIdBySku($prdSku); 
$product->load($prdId); 

if ($product->getId()) { 
    if ($product->hasCustomOptions()) { 
    foreach ($product->getOptions() as $opt) { 
     $optionType = $opt->getType(); 

     if ($optionType == 'drop_down') { 
     $values = $opt->getValues(); 

     foreach ($values as $k => $v) { 
      Mage::log("Array Key = $k;"); 
      Mage::log("Array Value: $v"); 
     } 
     } 
    } 
} 
+0

Danke für den Versuch, aber das habe ich bereits ausprobiert, was mir leere Werte für Custom Option Value Preis & Preis Typ zur Verfügung gestellt hat. Aus diesem Grund habe ich eine separate Instanz des benutzerdefinierten Optionswertes geladen, um den tatsächlichen Preis- und Preistyp des Optionswertes anzugeben. Aber selbst dieser Weg liefert mir nichts. Entschuldigung, aber trotzdem danke fürs ausprobieren! –

+0

Dies gibt leere Werte – Muk

+0

@Muk Ich habe den Code geändert, können Sie dies bitte auch versuchen? –

1
$session= Mage::getSingleton('checkout/session'); 
$getotal = Mage::helper('checkout')->getQuote()->getGrandTotal(); 
foreach($session->getQuote()->getAllItems() as $item) 
{ 
$options = Mage::getModel('catalog/product')->load($item->getProduct()->getId())->getProductOptionsCollection(); 
    foreach ($options as $o) 
    { 
     $title = $o->getTitle(); 
     $values = $o->getValues(); 

     foreach($values as $v) 
     { 
     $mydata = $v->getPrice();       
     } 

    } 
} 

Sie diesen Code verwenden können, um zu Preis für benutzerdefinierte Optionen für Produkte im Einkaufswagen festlegen

0

Eine ähnliche Frage wurde hier gefragt:

get selected custom option price for simple product in observer

Ich gab es folgende Antwort:


Wenn Sie die Option Wert ID haben, können Sie auch tun, ich direkt Abfrage, um den Optionspreis zu erhalten. Ich weiß, das nicht vollständig die Magento Weg ist und Sie könnten einige benutzerdefinierte tun Berechnung müssen (für procent Preise zum Beispiel), aber man könnte so etwas tun:

$optionValueId = 1234; // replace with you option value ID 

$resource = Mage::getSingleton('core/resource'); 
$connection = $resource->getConnection('read'); 

$optionvaluePrice = $connection->fetchRow(
    sprintf('SELECT * FROM %1$s WHERE option_type_id = %2$d', 
     $resource->getTableName('catalog/product_option_type_price'), 
     $optionValueId 
    ) 
); 

Leider Magento scheint nicht zu haben ein Modell, um einen einzelnen Optionspreis separat zu laden.