2010-05-13 27 views
13

Ödeme sırasında, ürünler için kod aracılığıyla seçilen tüm özel seçenekleri alabilmem gereken birkaç ürünüm var.Magento'da Programlanabilir Özel Seçenekler Nasıl Kullanılır

Herhangi bir yardım çok takdir edilmektedir!

+0

Magento'da bir ürüne eklenmiş seçenek. Topluluğa seçeneklerin nasıl eklendiğini bilmenizi sağlarsanız, yanıt alma şansınız daha yüksektir. –

+0

Sadece php'de bir productid'e sahip olmak ve bu ürüne eklenen özel seçenekleri elde edebilmek. – DaveC

+0

Bu, karışıklığa neden olan "özel seçenekler" terimidir. Ürüne eklenen özel seçenekler nasıldı? Magento'dan mı? Ticari bir uzantı ile mi? Özel bir uzantı ile mi? –

cevap

21

Size sadece bir ürün örneği vereceğim. İstediğiniz ürünün Sku'yu (örneğin, "ABCDE" olsun) bildiğini varsayalım. Yani o ürünün kimliğini alabileceksiniz.

kod biraz gibi olacak: -

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

Bu başlamanıza izin verir mi.

"$optionType" değişkenindeki seçeneğin türüne bağlı olarak, başka bir iç içe geçmiş "foreach" döngüsünü aramanız gerekir. Metin kutuları, metin alanları, açılır pencereler üzerinde çalıştım ancak diğer türlerde çalıştım. Bu yüzden kendi başına biraz daha RnD yapmanız gerektiğini düşünüyorum. Düzende yönetici paneli seçilen özel seçenekleri sonradan/Fatura/Sevk/Alacak Dekontu görmek isteyenler için

+0

Özel seçenekler için de sorgularken sorun yaşıyorum. Değişken boyutlarda (Büyük, Orta, Küçük) bir ürün için, seçenekleri kullanıcıya göstermek istiyorum. Burada ilgili bir soru gönderdim: http://stackoverflow.com/questions/5033427/magento-query-for-product-options – John

+0

Teşekkürler! Benim için çalışıyor :) Ancak bunu bir phtml dosyasında kullandım ve hatta ürün yüklendikten sonra tekrar yükleyene kadar seçenek yoktu. Garip ama işe yarıyor! – s3v3n

+0

@Knowledge Craving, bunu yapmaya çalıştığımda bir hata alıyorum, lütfen yardımcı olabilir misiniz? Bu hatadır: Ölümcül hata: Nesne olmayan bir işlevin hasOptions() işlevine çağrı yapın Çok teşekkürler! – Abude

7

, dosyaları bulmak: /app/tasarım/adminhtml/[varsayılan]/default/şablon/satış/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/tasarım/adminhtml/[default]/default/template/sales/order/creditmemo/view/items/renderer/default.phtml PS: Fatura/sevkiyat için configurated.phtml dosyalarını değiştirmedim/kodunda

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

Ayrıca not olduğunu:

Alacak Dekontu ve yere <?php echo $_item->getSku(); ?></div> sonra ve en satırın kapanış etiketinin </td> önce kodu eklemek

Kod ekleme (Dikkatli ol, her dosya için farklı) Sadece default.phtml dosyasında çalışan bir satır (cümle varsa), ve ikincisi ise fatura/gönderim/creditmemo dosyalarında çalışır. Kodu nereye gönderiyorsunuz, doğru cümlenin yorumlandığından emin olun.

umut bu kimin kod jazkat :-) bana biraz yardımcı

7

"Bilgi özlemi" içinde

$product->hasCustomOptions() 

'ın çözümü her zaman yapar unutmayınız Bilgi özlemi de, sayesinde yardımcı olur false iadesi (en azından benim durumumda Magento 1.6.2). Bu nedenle, if koşul asla yerine getirilmez ve aşağıdaki blok yürütülür.

+1

Cevabınız için çok teşekkürler. Evet, bunu Magento v1.5.x'ten itiraf etmeliyim, işe yaramadı, ama bu cevabı güncellemeyi unuttum. Bu yüzden bana doğru yolu gösterdiğiniz için tekrar teşekkürler! –

+0

@KnowledgeCraving, bir kez daha güncellemeyi unutmuş gibi görünüyor: D Yine de cevabınızda bunlardan hiç bahsedilmiyor ... – 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;      
         } 

       } 

      } 

Alışveriş sepetindeki ürün özel seçeneklerine erişmek için bu kodu kullanabilirsiniz.

+1

Sadece bir not - ürünü iki kez yüklüyorsun –

1

Ben

Sadece geçen

uygulama/tasarım/kullanıcı arayüzü/baz/default/şablonuyla bu dosyada aşağıdaki kodu yapıştırın Ürün sayfasında sadece Özel Açılır değerleri sizin için yararlı olacaktır umut/katalog/ürün/görünüm/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

Üzgünüm Şimdi bunun için bir çözümüm var – Naresh

1

Ayrıca, ödeme sayfasında görüntülenebilecek şekilde de çözebiliriz.

$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

Şablon/ödeme/araba/madde/default.php Bu kodu deneyebilirsiniz: Bir özel almaya (vb yerleşik, modüllerin) pek çok yolu var

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); 
      } 
İlgili konular