Как получить пользовательские параметры программно в Magento - PullRequest
13 голосов
/ 13 мая 2010

У меня есть пара продуктов на кассе, и мне нужно иметь возможность получить все пользовательские опции, выбранные для них через код.

Любая помощь очень ценится!

Ответы [ 7 ]

23 голосов
/ 22 июня 2010

Я просто приведу пример одного продукта. Допустим, вы знаете Sku (например, пусть это будет «ABCDE») вашего требуемого продукта. Таким образом, вы сможете получить идентификатор этого продукта.

Код будет выглядеть примерно так: -

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

Я думаю, что это позволит вам начать.

В зависимости от типа параметра в переменной "$optionType", вам необходимо вызвать другой вложенный цикл "foreach". Я работал над текстовыми полями, текстовыми полями, раскрывающимися списками, но не над другими типами. Поэтому я полагаю, вам нужно сделать еще несколько RnD самостоятельно.

7 голосов
/ 05 апреля 2012

Обратите внимание, что

$product->hasCustomOptions()

в решении "Пристрастия к знаниям" всегда возвращает false (по крайней мере в моем случае, Magento 1.6.2) Поэтому условие if никогда не выполняется, а блок ниже не выполняется.

7 голосов
/ 02 марта 2011

Для тех, кто хочет просмотреть выбранные пользовательские параметры позже в админ-панели в Заказе / Счет-фактуре / Отгрузке / 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/order/shipment/view/items/renderer/default.phtml /app/design/adminhtml/[default]/default/template/sales/order/creditmemo/view/items/renderer/default.phtml PS: я не менял файлы configulated.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:---------------                  
    ?>        

Также обратите внимание, что в коде есть строка (если предложение), которая работает только в порядке файла default.phtml, и второе, если предложение работает в файлах счетов / отправлений / creditmemo. Это зависит от того, где вы разместили код, убедитесь, что правильное предложение закомментировано.

надеюсь, это поможет, спасибо также Knowledge Craving, чей код помог мне совсем немного :-) jazkat

3 голосов
/ 04 июня 2013
    $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;                      
                        }

               } 

          }

Для доступа к пользовательским настройкам продукта в корзине вы можете использовать этот код.

2 голосов
/ 23 августа 2013

Надеюсь, вам будет полезно получить только пользовательские выпадающие значения на странице продукта

Просто вставьте следующий код в этот файл, наконец

приложение / дизайн / интерфейс / базы / по умолчанию / шаблон / Каталог / продукта / вид / 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 />";
        }
    }
?>
1 голос
/ 04 сентября 2013

Мы также можем решить, что может отображаться на странице оформления заказа.

 $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 голосов
/ 22 апреля 2014

Вы можете попробовать этот код в template / checkout / cart / 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 ); 
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...