【问题标题】:Magento - Query for Product OptionsMagento - 查询产品选项
【发布时间】:2011-02-17 19:11:14
【问题描述】:

我想编写一个控制器,为给定的产品找到不同的选项(例如,大、中、小、红色、蓝色等...)。

谁能告诉我我要写入控制器的代码吗?

其他详情

我越来越近了,但我还是想不通。这是我在控制器中编写的代码

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

但是当我在第二行执行 print_r() 时,getOptions 返回一个空数组。第三行 echo 的值是 1,这意味着应该有选项。

其他详情 我尝试了clockworkgeek 的$db->getProductOptions() 解决方案,但没有返回任何结果。我试过$db->getProductOptionsCollection(),得到了这个输出

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

)

我的代码出了什么问题,导致它没有返回允许的产品选项?

【问题讨论】:

  • 如果$dbcatalog/product 模型,为什么要使用$db->getProduct()$db 不应该已经是产品了吗?
  • 哎呀,这是一个打字错误。我将其更正为 $db->getOptions()。我的问题仍未解决。我不明白为什么我会得到上面的结果。

标签: magento controller


【解决方案1】:

请尝试getCustomOptions()getProductOptionsCollection()getProductOptionsCollection()->load(),而不是getOptions()

编辑
我在一个我知道有选择的产品上试过这个。

<?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 没有太多可以透露的信息。

【讨论】:

  • getCustomOptions 不返回任何内容。 getProductOptionsCollection() 返回一个 2 级嵌套数组,其中“items”行包含一个空数组。还有其他建议吗?
  • 你能确认我看的是否正确吗?我有一个可配置的产品。当我转到后端目录 > 可配置产品 > 关联产品时,我列出了几个关联产品:大、中、小尺寸。您提出的解决方案应该可以帮助我检索这些选项吗?
  • 啊!可配置产品没有选项,它们有关联的产品。我认为答案类似于$product-&gt;getTypeInstance()-&gt;getUsedProducts()
  • 是的!你的评论奏效了!您可以将您的评论添加到您的答案中吗?那我会接受的。所以现在我想知道什么是“选项”以及它们是如何使用的?一直以来都被误导了。
  • 如果$product-&gt;isConfigurable() 为真,那么$product-&gt;getTypeInstance() 可能是Mage_Catalog_Model_Product_Type_Configurable 的一个对象,并且具有有用的方法,例如getConfigurableAttributes()
【解决方案2】:

上述解决方案是完美的,我使用它解决了我的问题。我曾是 试图在列表中显示颜色。这是我的解决方案

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>       

    }
}

【讨论】:

  • 好奇(无法判断:-) - 与之前的答案相比有什么新的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多