如何在Magento中以编程方式获取自定义选项

Dav*_*veC 13 php magento

我在结账时有几个产品,我需要能够通过代码获取为他们选择的所有自定义选项.

任何帮助深表感谢!

Kno*_*ing 23

我将举例说明一种产品.假设您知道所需产品的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>';
}
Run Code Online (Sandbox Code Playgroud)

我想这会让你开始.

根据变量" $optionType"中选项的类型,您需要调用另一个嵌套的" foreach"循环.我曾经处理过文本框,文本字段,下拉列表,但没有处理其他类型.所以我想你需要自己做更多的RnD.


jaz*_*kat 7

对于那些希望稍后在Order/Invoice/Shipment/Creditmemo的管理面板中查看所选自定义选项的人,找到文件:/ app/design/adminhtml/[default]/default/template/sales/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 /订单/发货/查看/ items/renderer/default.phtml /app/design/adminhtml/[default]/default/template/sales/order/creditmemo/view/items/renderer/default.phtml PS:我没有改变configmented.phtml文件的发票/发货/ creditmemo

<?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:---------------                  
    ?>        
Run Code Online (Sandbox Code Playgroud)

另请注意,在代码中有一行(如果句子)仅适用于default.phtml文件,第二句if语句适用于invoice/shipping/creditmemo文件.这取决于您发布代码的位置,确保正确的句子被注释掉.

希望这有帮助,也要感谢知识渴望,其代码帮助了我很多:-) jazkat


mar*_*ler 7

请注意

$product->hasCustomOptions()
Run Code Online (Sandbox Code Playgroud)

在"知识渴望"的解决方案总是返回错误(至少在我的情况下,Magento 1.6.2).因此,永远不会满足if条件,并且不执行下面的块.