2010-05-13 43 views
13

我在結帳時有幾件產品需要能夠獲取通過代碼爲其選擇的所有自定義選項。如何在Magento中以編程方式獲取自定義選項

任何幫助非常感謝!

+0

有很多的方式(內置,模塊等)來得到一個定製選項附加到Magento中的產品。如果您讓社區知道您如何添加選項,您將有更好的機會獲得答案。 – 2010-05-13 18:41:05

+0

只需簡單地在php中製作一個產品,並能夠獲得附加到該產品的自定義選項。 – DaveC 2010-05-13 18:54:37

+0

這是導致混淆的術語「自定義選項」。自定義選項如何添加到產品中?通過Magento?通過商業擴展?通過自定義擴展? – 2010-05-13 21:15:22

回答

21

我只給你一個產品的例子。假設您知道所需產品的Sku(例如,讓它爲「ABCDE」)。所以你將能夠獲得該產品的ID。

的代碼將是有點像: -

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

我認爲這將讓你上手。

根據變量「$optionType」中選項的類型,您需要調用另一個嵌套的「foreach」循環。我曾在文本框,文本字段,下拉菜單上,但沒有在其他類型上。所以我想你需要自己做更多的RnD。

+0

我在查詢自定義選項時也遇到了問題。對於可變尺寸的產品(大,中,小),我想向用戶顯示選項。我在這裏發佈了一個相關的問題:http://stackoverflow.com/questions/5033427/magento-query-for-product-options – John 2011-02-18 17:06:15

+0

謝謝!它適用於我:)然而,我用這個phtml文件,甚至有產品加載,沒有選擇,直到我再次加載它。奇怪,但有效! – s3v3n 2011-07-07 10:37:21

+0

@知識渴望,當我試圖做到這一點,我得到一個錯誤,你能幫助嗎?這是錯誤:'致命錯誤:調用一個非對象的成員函數hasOptions()'非常感謝! – Abude 2013-03-18 18:21:27

7

對於那些誰希望看到所選的自定義選項後面管理面板在訂單/發票/發貨/貸記通知單, 查找文件: /應用/設計/ adminhtml/[默認] /默認/模板/銷售/ 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/[default]/default/template/sales/order/creditmemo/view/items/renderer/default.phtml PS:我沒有更改configurated.phtml文件的發票/發貨/貸記通知單

<?php echo $_item->getSku(); ?></div> ,它的行的結束標記</td>在什麼地方插入代碼(注意,這是每個文件不同)

插入代碼:

 <?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:---------------     
    ?>   

還要注意的是,在代碼中有一行(如果是句子)只能用於default.phtml文件, ,第二個如果在發票/運輸/貸記憑證文件中起作用。這取決於你發佈代碼的位置,確保正確的句子被註釋掉。

希望這有助於 還要感謝知識渴求其代碼幫了我不少:-) jazkat

7

請注意,

$product->hasCustomOptions() 

在「知識渴求」的解決方案總是做返回false(至少在我的情況下,Magento 1.6.2)。因此if條件永遠不會滿足,下面的塊不會被執行。

+1

非常感謝您的回答。是的,我不得不承認,從Magento v1.5.x開始,它不起作用,但我忘了更新這個答案。所以再次感謝您向我展示正確的方式! – 2012-06-10 15:30:57

+0

@KnowledgeCraving好像你忘了再次更新它:D仍然沒有在你的答案中看到任何提及... – OZZIE 2014-09-12 14:28:23

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

       } 

      } 

要訪問購物車上的產品自定義選項,您可以使用此代碼。

+1

只是一個說明 - 你正在加載產品兩次 – 2016-09-13 18:36:48

1

我希望它能對你有用的獲得產品頁面只自定義下拉值

只需粘貼在該文件下面的代碼在最後

應用程序/設計/前端/基/默認/模板/目錄/產品/查看/ 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

對不起現在我有這個解決方案 – Naresh 2013-08-23 09:54:37

1

我們也可以這樣解決,可以顯示在結帳頁面上。

$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

你可以嘗試在模板/結帳/車/項目/如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); 
      } 
相關問題