2012-04-03 8 views
11

Ho alcune domande interessanti relativi a opzioni personalizzate di prodotto: -Magento - Get personalizzati dettagli value option da Valore opzione ID

  1. v'è alcuna differenza tra Opzioni & Opzioni personalizzate? Questo è perché ho trovato due proprietà diverse per ogni dettaglio del prodotto, in quasi tutti i moduli relativi al prodotto: -

    • options
    • custom_options

    tuttavia v'è una sola classe per solo il Opzione di prodotto, che tende a occuparsi delle Opzioni personalizzate. Per favore qualcuno chiarisca questo punto.

  2. Sto cercando di recuperare le opzioni personalizzate di un articolo ordinato, inclusi il prezzo dell'opzione personalizzata e il tipo di prezzo. Il problema è che Magento memorizza solo il valore dell'opzione per il corrispondente articolo ordinato, e non tutti i suoi dettagli (come il prezzo di opzione personalizzato & Tipo di prezzo).
    Quindi ho creato un oggetto di questa classe Mage_Catalog_Model_Product_Option_Value, considerando solo il tipo di opzione personalizzata drop_down. Ho fornito il mio codice qui sotto, ma è ancora invano e non sta recuperando i risultati desiderati. Qualcuno può rettificare questo codice e aiutarmi?

codice per il punto # 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>"; 

Dopo aver fatto qualche verifica, ho trovato che il prezzo relativa a ciascuna valori delle opzioni sono memorizzate in catalog_product_option_type_price tabella del database, e il prezzo relativo ad ogni Le opzioni sono memorizzate nella tabella del database catalog_product_option_price. Quindi ci deve essere un modo per capire come Magento recupera i prezzi dei prezzi delle opzioni personalizzate corrispondenti. Per favore chiariscimi e rettifica il codice sopra?

Grazie a tutti, in anticipo!

risposta

15

So che questa è una domanda vecchia, ma non ha una risposta e dopo aver cercato furiosamente una risposta avendo lo stesso problema ho pensato di fornire la mia risposta per altre persone che potrebbero trovarlo.

In questo codice, carico il prodotto per id, ottenere la raccolta di opzioni, che nei miei test contiene solo le opzioni personalizzate per un prodotto, non gli attributi o altre opzioni, scorrere tra le opzioni e caricare la raccolta di valori per ogni opzione. Questo codice demo dovrebbe essere testabile praticamente ovunque purché si disponga di un ID prodotto.

<?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());; 
     } 
    } 
} 
?> 

Esempio registro di output:

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 

Esempio dati disponibili per $ opzione Mage :: log ($ Option-> toArray());

nota: prezzo e price_type sono disponibili solo sui valori di opzione per le opzioni di tipo drop_down.

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 
) 

Esempio disponibili i dati per $ Valori Mage :: log ($ VALORI> 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

Ehi, come posso usare '$ value-> setPrice()' Voglio cambiare il prezzo delle opzioni grazie. –

+0

Vedo che stai emettendo i valori dai tipi di opzioni a discesa, che ne dici di mostrare i valori dei campi di testo? Sto cercando di raccogliere i miei dati dopo che l'articolo è stato aggiunto al carrello. Grazie in anticipo. – NotJay

3

primo carico i prodotti della collezione allora ciclo come segue:

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

* Modificato *

$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

Grazie per aver provato, ma questo ho già provato, che mi ha fornito valori vuoti per Custom Option Value Prezzo e tipo di prezzo. Ecco perché ho continuato a caricare un'istanza separata di Custom Option Value, in modo che potesse fornirmi il prezzo effettivo e il tipo di prezzo di tale valore dell'opzione; ma anche in questo modo non mi fornisce nulla. Scusa, ma grazie ancora per aver provato! –

+0

Fornisce valori vuoti – Muk

+0

@Muk Ho modificato il codice, la prego di provare anche questo? –

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();       
     } 

    } 
} 

È possibile utilizzare questo codice al fine di ottenere il prezzo impostato per le opzioni personalizzate per i prodotti nel carrello.

0

Una domanda simile è stato chiesto qui:

get selected custom option price for simple product in observer

ho dato la seguente risposta c'è:


Se avete la ID valore di opzione si può anche fare dirigo query per ottenere il prezzo dell'opzione. So che questo non è del tutto il modo in Magento e potrebbe essere necessario fare un po 'personalizzato calcolo (per i prezzi procent per esempio), ma si potrebbe fare qualcosa di simile:

$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 
    ) 
); 

Purtroppo, Magento non sembra avere un modello per caricare separatamente un singolo prezzo di opzione.