【问题标题】:Magento - Get Product options from $itemMagento - 从 $item 获取产品选项
【发布时间】:2013-10-21 12:25:41
【问题描述】:

在购物车页面上有以下 foreach 循环:

foreach($this->getItems() as $_item) {

}

我需要获取这些项目的产品选项,我尝试了几种方法,但无法检索到所需的结果。

我试过了:

foreach($this->getItems() as $_item) {
    print_r($_item->getProductOptions());
}

还有:

foreach($this->getItems() as $_item) {
    print_r($_item->getOptionList());
}

还有其他功能可以使用吗?

【问题讨论】:

  • 不知道答案,但是如果您正在寻找方法,请尝试:var_dump(get_class_methods(get_class($item))); - 您将获得该类的所有方法(不是魔术方法)的数组。跨度>
  • 很方便知道,谢谢@StefanBrendle
  • @Karl:将类型(即类名)添加到您的问题中以改进它。

标签: php magento


【解决方案1】:

尝试使用:

$_item->getProduct()->getTypeInstance(true)->getOrderOptions($_item->getProduct());

【讨论】:

    【解决方案2】:

    这可能会让你朝着正确的方向开始......

    $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>';
    }
    

    【讨论】:

    • $product->hasOptions() 中的空白
    【解决方案3】:

    可能是这样的:

    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'];
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      目前的答案对我来说是不行的。无论$_item 是什么,都可能没有getProduct() 方法。

      另一方面,您可能有一个id 可用,您可以直接从中加载。在我的示例中,我需要从 $_items = $this-&gt;helper('catalog/product_compare')-&gt;getItemCollection() 中的项目中获取产品对象。

      这使我能够使用:&lt;?php $product = Mage::getModel('catalog/product')-&gt;load($_item-&gt;getId()) ?&gt;

      【讨论】:

        【解决方案5】:

        您无法在 cart.phtml 上获取选项列表,您必须更新/编辑下面的选项列表文件:

        app\design\frontend\YOUR_PACKAGE_NAME\YOUR_TEMPLATE_NAME\template\checkout\cart\item\default.phtml
        

        希望对您有所帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-02
          • 1970-01-01
          • 2013-08-02
          • 1970-01-01
          • 2016-11-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多