У меня есть несколько продуктов при оформлении заказа, что мне нужно получить все пользовательские параметры, которые выбираются для них через код.
Любая помощь высоко ценится!
Я просто приведу вам пример одного продукта. Предположим, что вы знаете Sku (например, пусть это будет «ABCDE») вашего требуемого продукта. Таким образом, вы сможете получить идентификатор этого продукта.
Код будет примерно таким:
$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.
Для тех, кто хочет увидеть выбранные пользовательские параметры позже в панели администратора в 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 / order / shipment /view/items/renderer/default.phtml /app/design/adminhtml/[default]/default/template/sales/order/creditmemo/view/items/renderer/default.phtml PS: я не изменил configurated.phtml файлы для счета-фактуры / отгрузки / creditmemo
и вставить код где-нибудь после <?php echo $_item->getSku(); ?></div>
<?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 ' <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. Это зависит от того, где вы отправляете код, убедитесь, что правильное предложение закомментировано.
надеюсь, что это помогает, спасибо также Знанию Травничество, чей код мне очень помог 🙂 jazkat
Обратите внимание, что
$product->hasCustomOptions()
в решении «Knowledge Craving» всегда возвращает false (по крайней мере, в моем случае Magento 1.6.2). Поэтому if-условие никогда не выполняется, а блок ниже не выполняется.
$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; } } }
Чтобы получить доступ к пользовательским опциям продукта в корзине покупок, вы можете использовать этот код.
Я надеюсь, что это будет полезно для вас, чтобы получить только пользовательские значения Dropdown на странице Product
Просто вставьте следующий код в этот файл
приложение / дизайн / интерфейс / базы / по умолчанию / шаблон / Каталог / продукта / вид / 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 />"; } } ?>
Мы также можем решить такие задачи, которые могут отображаться на странице проверки.
$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']; } } }
Вы можете попробовать этот код в шаблоне / 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 ); }