2010-05-13 22 views
13

Ich habe ein paar Produkte an der Kasse, die ich in der Lage sein muss, alle benutzerdefinierten Optionen, die für sie durch Code ausgewählt werden.So erhalten Sie benutzerdefinierte Optionen programmgesteuert in Magento

Jede Hilfe wird sehr geschätzt!

+0

Es gibt eine Menge Möglichkeiten (built-in, Module, etc.) eine benutzerdefinierte zu erhalten Option an ein Produkt in Magento angehängt. Wenn Sie der Community mitteilen, wie Sie die Optionen hinzufügen, haben Sie eine bessere Chance, eine Antwort zu erhalten. –

+0

Einfach nur eine Produkt-ID in PHP und in der Lage, die benutzerdefinierten Optionen zu erhalten, die an dieses Produkt angehängt sind. – DaveC

+0

Es ist der Begriff "benutzerdefinierte Optionen", der Verwirrung verursacht. Wie wurden die benutzerdefinierten Optionen zum Produkt hinzugefügt? Durch Magento? Durch eine kommerzielle Erweiterung? Durch eine benutzerdefinierte Erweiterung? –

Antwort

21

Ich gebe Ihnen nur ein Beispiel für ein Produkt. Angenommen, Sie kennen den Sku (z. B. "ABCDE") Ihres gewünschten Produkts. So können Sie die ID des Produkts erhalten.

Der Code wird so etwas wie sein: -

$productSku = "ABCDE"; 
$product = Mage::getModel('catalog/product'); 
$productId = $product->getIdBySku($productSku); 
$product->load($productId); 

/** 
* In Magento Models or database schema level, the product's Custom Options are 
* executed & maintained as only "options". So, when checking whether any product has 
* Custom Options or not, we should check by using this method "hasOptions()" only. 
*/ 
if($product->hasOptions()) { 
    echo '<pre>'; 

    foreach ($product->getOptions() as $o) { 
     $optionType = $o->getType(); 
     echo 'Type = '.$optionType; 

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

      foreach ($values as $k => $v) { 
       print_r($v); 
      } 
     } 
     else { 
      print_r($o); 
     } 
    } 

    echo '</pre>'; 
} 

Ich denke, das wird Sie loslegen.

Abhängig von der Art der Option in den Variablen „$optionType“, müssen Sie eine weitere verschachtelte „foreach“ Schleife nennen. Ich habe an Textfeldern, Textfeldern, Dropdowns gearbeitet, aber nicht an anderen Typen. Ich nehme an, du musst mehr RnD selbst machen.

+0

Ich habe ein Problem beim Abfragen von benutzerdefinierten Optionen. Bei einem Produkt mit variablen Größen (Large, Medium, Small) möchte ich dem Benutzer die Optionen anzeigen. Ich habe eine verwandte Frage hier gepostet: http://stackoverflow.com/questions/5033427/magento-query-for-product-options – John

+0

Danke! Es funktioniert für mich :) Allerdings habe ich dies in einer PHP-Datei verwendet und sogar das Produkt geladen, gab es keine Optionen, bis ich es wieder geladen habe. Seltsam, aber funktioniert! – s3v3n

+0

@Knowledge Craving, wenn ich versuche, dies zu tun, bekomme ich einen Fehler, können Sie bitte helfen? Dies ist der Fehler: 'Schwerwiegender Fehler: Aufruf einer Member-Funktion hasOptions() auf einem Nicht-Objekt' Vielen Dank! – Abude

7

Für diejenigen, die ausgewählte benutzerdefinierte Optionen später in Admin-Panel in Bestellung/Rechnung/Versand/Creditmemo sehen möchten, Dateien: /app/design/adminhtml/[Standard]/default/template/Vertrieb/order/view/items/renderer/default.phtml
/app/design/adminhtml/[default]/default/template/sales/order/invoice/view/items/renderer/default.phtml /app/design/adminhtml /[default]/default/template/sales/order/shipment/view/items/renderer/default.phtml /app/design/adminhtml/[Standard]/Standard/Vorlage/Verkauf/Bestellung/creditmemo/Ansicht/Artikel/Renderer/default.phtml PS: Ich habe configured.phtml Dateien für Rechnung/Versand nicht geändert/creditmemo

und einfügen Code irgendwo nach <?php echo $_item->getSku(); ?></div> und bevor es dem schließenden Tag der Zeile </td> (Vorsicht, es ist anders für jede Datei)

Insert Code:

 <?php 
    //---------start:---------------   
    // if ($allOptions = $_item->_getData('product_options')) {    // only for order item 
    if ($allOptions = $_item->getOrderItem()->getData('product_options')) { // for invoice, shipping, creditmemo 
     $options = unserialize($allOptions); 

     if (isset($options['options'])) { 
      foreach ($options['options'] as $optionValues) { 
       if ($optionValues['value']) { 
        echo '&nbsp;<strong><i>'. $optionValues['label'].'</i></strong>: '; 

        $_printValue = isset($optionValues['print_value']) ? $optionValues['print_value'] : strip_tags($optionValues['value']); 
        $values = explode(', ', $_printValue); 
        foreach ($values as $value) { 
         if (is_array($value)) 
          foreach ($value as $_value) 
           echo $_value; 
         else echo $value; 
        } 
        echo '<br />'; 
       } 
      }  
     } 
    } 
    //---------end:---------------     
    ?>   

Beachten Sie auch, dass es in Code eine Zeile (wenn Satz), die nur in der Reihenfolge default.phtml Datei funktioniert, und der zweite if Satz in Rechnung/Versand/creditmemo Dateien funktioniert. Es hängt davon ab, wo Sie den Code posten, stellen Sie sicher, dass der richtige Satz auskommentiert ist.

hoffe, das hilft, Dank auch an Wissen Craving, dessen Code half mir ziemlich viel :-) jazkat

7

Bitte beachten Sie, dass

$product->hasCustomOptions() 

in "Wissen Craving" 's Lösung tut immer return false (zumindest in meinem Fall, Magento 1.6.2). Daher ist die if-Bedingung niemals erfüllt und der nachfolgende Block wird nicht ausgeführt.

+1

Vielen Dank für Ihre Antwort. Ja, ich muss zugeben, dass es von Magento v1.5.x nicht funktioniert hat, aber ich habe vergessen, diese Antwort zu aktualisieren. Also nochmal Danke, dass du mir den richtigen Weg gezeigt hast! –

+0

@KnowledgeCraving scheint, dass Sie vergessen haben, es noch einmal zu aktualisieren: D Immer noch keine Erwähnung davon in Ihrer Antwort ... – OZZIE

2
$quote=$observer->getEvent()->getQuote(); 
    $quoteid=$quote->getId(); 
    $session= Mage::getSingleton('checkout/session'); 
    $getotal = Mage::helper('checkout')->getQuote()->getGrandTotal(); 

    foreach($session->getQuote()->getAllItems() as $item) 
     { 

     $sellcheck = Mage::getModel('catalog/product')->load($item->getProduct()->getId())->getissellbool(); 
     $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(); 
        echo 'options price: ' . $mydata;      
         } 

       } 

      } 

Um auf benutzerdefinierte Produktoptionen im Einkaufswagen zuzugreifen, können Sie diesen Code verwenden.

+1

Nur eine Anmerkung - Sie laden das Produkt zweimal –

1

Ich hoffe, es wird Ihnen nützlich für

einfach nur Gewohnheit Dropdown-Werte in Produktseite erhalten fügen Sie den folgenden Code in dieser Datei zuletzt

app/design/frontend/base/default/template/catalog/product/view/options.phtml

<?php 
    $product = Mage::getModel("catalog/product")->load($this->getProduct()->getId()); //product id 
    foreach ($product->getOptions() as $_option) { 
     $values = $_option->getValues(); 
     foreach ($values as $v) { 
      print_r($v->getTitle()); 
      echo "<br />"; 
     } 
    } 
?> 
+0

Entschuldigung Jetzt habe ich eine Lösung dafür – Naresh

1

Wir können auch so lösen, dass auf der Checkout-Seite angezeigt werden kann.

$items = Mage::getModel('checkout/cart')->getQuote()->getAllVisibleItems(); 
foreach($items as $product) { 
    $options = $product->getProduct()->getTypeInstance(true)->getOrderOptions($product->getProduct()); 
    if ($options) 
    { 
     if (isset($options['options'])) 
     { 
      $result = $options['options']; 
     } 
     if(count($result)>0){ 
      foreach($result as $key =>$value){ 
       $resultoption = $value['value']; 
      } 
     } 
    } 
0

Sie können diesen Code versuchen in template/Kasse/Warenkorb/item/default.php:

if($Product->hasOptions) 
      { 
       $optionsArr = $Product->getOptions(); 
       foreach ($optionsArr as $optionKey => $optionVal) 
       { 
          $optStr.= "<select style='display:block; clear:both;' name='options[".$optionVal->getId()."]'>";  
        foreach($optionVal->getValues() as $valuesKey => $valuesVal) 
        { 
          $optStr.= "<option value='".$valuesVal->getId()."'>".$valuesVal->getTitle()."</option>"; 
        } 
        $optStr.= "</select>"; 
        } 
    echo($optStr); 
      } 
Verwandte Themen