获取选定的multiselect属性的值


14

采取以下“汽车”产品:大众高尔夫

它具有multiselect属性,car_options其中包含以下可能的选项及其ID:

  • 的Airco(ID = 123)中选择
  • 无线电(ID = 124)中选择
  • 蓝牙(id = 125)
  • 导航(id = 126)

为此产品选择了Radio和Airco。如何获得这两个值(radio,airco)并显示它们?$ _product被给出。

Answers:


19

尝试这个:

echo $_product->getResource()->getAttribute('car_options')->getFrontend()->getValue($_product);

我没有输出!这不是下拉列表,而是multiselect属性!
SPRBRN 2014年

它仍然可以与多选功能一起使用,我自己尝试过。尝试var_dump($_product->getData('car_options');检查输出。它应该是一个逗号分隔的字符串,如果不是,那么我只能想象一个第三方模块正在干扰。
Mayers 2014年

仍然没有输出。我们使用了几个模块,但是我不知道有什么与属性混淆的模块。
SPRBRN 2014年

如果$_product->getData('car_options')返回NULL,则表示未将其添加到您的产品集中。我们将需要了解有关您尝试在何处访问此属性的更多信息
Mayers 2014年

我找到了解决方案-请参阅我的答案。
SPRBRN 2014年

2
$ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance(); $ product = $ objectManager-> get('Magento \ Catalog \ Model \ Product')-> load($ product_id);

$ attributevalues = $ product-> getResource()-> getAttributeRawValue($ product_id,'my_custom_attribute_code',$ storeid);

它有效..希望它对您有帮助..


太棒了...它就像一个魅力!!!!!
Sneha Panchal '18 -10-31

很高兴知道:) @SnehaPanchal
Sameer Bhayani,

0

以下代码

  1. 返回此产品的所选选项的值id:123,124
  2. 把它变成一个数组:array(123,124)
  3. 然后找到这些选项的标签:123 => Airco124 => Radio
  4. 并返回文本字符串中的值:Airco,Radio
$ _attribute_code ='汽车选项';
$ car_options_csv = Mage :: getResourceModel('catalog / product')-> getAttributeRawValue($ productId,$ _attribute_code,$ storeId); //返回值:123,124
$ car_options = explode(',',$ car_options_csv);
$ attributeId = Mage :: getResourceModel('eav / entity_attribute')-> getIdByCode('catalog_product',$ _ attribute_code);
$ attribute = Mage :: getModel('catalog / resource_eav_attribute')-> load($ attributeId);
$ attributeOptions = $ attribute-> getSource()-> getAllOptions();

$ res ='';
foreach($ attributeOptions as $ a)
{
    $ l = $ a ['label'];
    $ m = $ a ['value'];
    如果(strlen(trim($ l))> 0 && in_array($ m,$ car_options))
    {
        $ res。= trim($ l)。',';
    }
}
echo substr($ res,0,-2);;

哎呀-您通常不想走那条路。尤其是因为上述Mayer的答案很好用。我也不确定您是否不以这种方式绕过Magento的翻译系统-尚未检查。
工作流程

0

感谢@Mayers,他的解决方案太好了,无法覆盖本地的getAttributeText:

 public function getAttributeText($attributeCode)  
 {
    return $this->getResource()
        ->getAttribute($attributeCode)
        ->getFrontend()
        ->getValue($this);
 }

并添加到客户模型中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.