У меня есть несколько продуктов при оформлении заказа, что мне нужно получить все пользовательские параметры, выбранные для них с помощью кода.
Любая помощь очень ценится!
У меня есть несколько продуктов при оформлении заказа, что мне нужно получить все пользовательские параметры, выбранные для них с помощью кода.
Любая помощь очень ценится!
Я приведу вам пример одного продукта. Скажите, что вы знаете 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 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>
и перед этим тегом закрытия строки </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. Это зависит от того, где вы публикуете код, убедитесь, что правильное предложение прокомментировано.
надеюсь, что это поможет, спасибо также Knowledge Craving, чей код мне очень помог:-) 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;
}
}
}
Чтобы получить доступ к пользовательским опциям продукта в корзине покупок, вы можете использовать этот код.
Я надеюсь, что это будет полезно для вас, чтобы получить только пользовательские значения раскрывающегося списка на странице продукта
Просто вставьте следующий код в этот файл
приложение/дизайн/интерфейс/базы/по умолчанию/шаблон/Каталог/продукта/вид/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 );
}