Magento - запрос параметров продукта - PullRequest
2 голосов
/ 17 февраля 2011

Я хочу написать контроллер, который находит различные опции для данного продукта (например, Большой, Средний, Маленький, Красный, Синий и т. Д.).

Может кто-нибудь показать мне код, который я бынаписать в мой контроллер?

Дополнительные детали

Я все ближе, но все еще не могу понять.Вот код, который я написал в моем контроллере

$db = Mage::getModel('catalog/product')->load($productId);
print_r($db->getOptions());  // returns an empty array
echo $db->getHasOptions();  // echos 1

Но когда я выполняю print_r () во второй строке, getOptions возвращает пустой массив.Третья строка отображает значение 1, что означает, что здесь ДОЛЖНЫ БЫТЬ опции.

Дополнительные детали Я попробовал решение Clockworkgeek $db->getProductOptions(), которое ничего не возвращало.Я попытался $db->getProductOptionsCollection(), и получил этот вывод

Array
(
    [totalRecords] => 0
    [items] => Array
        (
        )

)

Что не так с моим кодом, что он не возвращает допустимые параметры продукта?

Ответы [ 2 ]

6 голосов
/ 18 февраля 2011

Вместо getOptions(), пожалуйста, попробуйте getCustomOptions() или getProductOptionsCollection() или getProductOptionsCollection()->load().

Редактировать
Я попробовал это на продукте, который, как я знал, имел варианты.

<?php
require 'app/Mage.php';
Mage::app();

$product = Mage::getModel('catalog/product')->load($productId);
foreach ($product->getProductOptions() as $option) {
    print_r($option->debug());
}

И получил что-то вроде этого:

Array
(
    [option_id] => 37
    [product_id] => 8
    [type] => multidate
    [is_require] => 1
    [sku] => 
    [image_size_x] => 0
    [image_size_y] => 0
    [sort_order] => 1
    [default_title] => Dates
    [title] => Dates
)

Однако, getOptions() также работал для меня, поэтому я не знаю, что происходит.

после редактирования
Путаница была одной из семантики. Простой продукт может иметь «пользовательские параметры», они позволяют создавать несколько полей формы, которые записываются как часть заказа. Конфигурируемый продукт использует «связанные продукты» для создания формы с условными полями.

Например, вы можете продавать носки большого зеленого, маленького зеленого или большого синего цвета, но не мелкие синие. С простым продуктом у вас будет поле для большого / маленького размера и поле для синего / зеленого цвета, которое позволяет клиенту выбирать маленький синий цвет, и это неправильно.

Таким образом, чтобы найти составные части настраиваемого объекта, вы можете сделать что-то вроде этого:

if ($product->isConfigurable()) {
    $configurable = $product->getTypeInstance();
    $childProducts = $product->getUsedProducts($product);
    foreach ($childProducts as $child) {
        // You have a $child now
    }
}

Чтобы найти эквивалент getOptions(), вам нужно:

if ($product->isConfigurable()) {
    $configurable = $product->getTypeInstance();
    $attributes = $configurable->getConfigurableAttributes($product);
    // $attributes is a Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Type_Configurable_Attribute_Collection
    foreach ($attributes as $attribute) {
        // $attribute is a Mage_Catalog_Model_Product_Type_Configurable_Attribute
        print $attribute->getLabel();
    }
}

Mage_Catalog_Model_Product_Type_Configurable_Attribute мало что может рассказать о себе.

0 голосов
/ 16 октября 2013

Приведенное выше решение идеально, и я решил свою проблему, используя его. я был пытаясь отобразить цвета в списке. Вот мое решение

if ($_product->isConfigurable()) {
$configurable = $_product->getTypeInstance();
$childProducts = $configurable->getUsedProducts($_product);

foreach ($childProducts as $child) {
    $sku = $child->getSku();
    $skuarr = explode('-',$sku);
    $col = trim($skuarr[1]);
?>
<span class="colorbar" style="background:<?php echo $col?>;" title="<?php echo $col?>">&nbsp;</span>       

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...