开发者

Magento - Query for Product Options

I want to write a controller that finds the different options for a given product (eg. Large, Medium, Small, Red, Blue etc...).

Can anyone show me the code I would write into my controller?

Additional details

I'm getting closer, but I still can't figure it out. Here's the code I wrote in my controller

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

But when I do the print_r() on the second line, the getOptions returns an empty array. The third line echo's the value 1, which means there SHOULD BE options.

Additional Details I tried clockworkgeek's solution of $db->getProductOptions(), that returned nothing. I tried $db->getProductOptionsCollection(), and got this output

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

)

What's wrong with my code such that it is not returning the allowable product options?


Instead of getOptions() please try getCustomOptions() or getProductOptionsCollection() or getProductOptionsCollection()->load().

Edit
I tried this on a product I knew had options.

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

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

And got something like this:

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
)

However, getOptions() also worked for me so I don't know what's going on.

Post-edit
The confusion was one of semantics. A simple product can have "custom options", they allow creation of a few form fields which are recorded as part of the order. A configurable product uses "associated products" to create a form with conditional fields.

For example you might be selling socks that are large-green, small-green or large-blue - but no small-blue ones. With a simple product you would have a field for large/small and a field for blue/green - which allows the customer to select small-blue and that is wrong.

So to find the component parts of a configurable you might do something like this:

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

To find the equivalent of getOptions() you need this:

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 doesn't have much to reveal about itself.


The above solution is perfect and I solved my problem using it. I was trying to display the colors on the list. Here is my solution

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>       

    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜