如何在Magento 2.3.x中输出多选属性值?

cgyqldqp  于 2022-11-12  发布在  其他
关注(0)|答案(2)|浏览(114)

在一个Magento 2.3.3商店,我试图输出一个多选自定义属性的值在一个类别页面,但没有任何运气。我已经设置了该属性在产品列表中使用,并试图输出它在catalog/product/listing.phtml模板页面在我的自定义主题。我正在使用使用以下代码:<?php /* @escapeNotVerified */ echo $_product->getResource()->getAttribute('custom_attribute')->getFrontend()->getValue($_product); ?>这适用于下拉属性,但不适用于多选属性。有点卡在这里...

hkmswyz6

hkmswyz61#

您可以使用以下代码获取MultiSelect属性值
在“catalog_product_view. xml”中创建块

<referenceBlock name="product.info.main">
    <block class="Magento\Catalog\Block\Product\View" name="attribue.name" template="Magento_Catalog::product/view/attribute_name.phtml" after="-"  /> 
</referenceBlock>

在“Magento_Catalog::产品/视图/属性名称.phtml”下创建“phtml”文件

<?php $product = $block->getProduct(); ?> 
<div>
  <?php 
    $data = explode(',',$product->getData('attribute_code'));
    foreach($data as $value):            
  ?>
  <?php 
    $attr = $product->getResource()->getAttribute('attribute_code');
    if ($attr->usesSource()): 
  ?>
        <?php 
            $option_value = $attr->getSource()->getOptionText($value);
        ?>
        <p><?php echo $option_value; ?></p>
    <?php endif;?>
 <?php endforeach;?>
</div>
jgzswidk

jgzswidk2#

下面是一个返回“Multiselect Attribute Values”的代码示例。该属性属于产品实体。由于从ProductModel获取ProductResource模型并不是一个好主意,并且考虑到可能需要在某个模板中获取它,因此只需创建一个ViewModel并在其中使用此示例。

use Magento\Catalog\Model\ResourceModel\Product as ProductResource;
...
public function __construct(
    ...
    ProductResource           $productResource
)
{
    ...
    $this->productResource = $productResource;
}

public function prepareProductAttributeOptions($product, $attributeCode)
{
    $result = [];
    $data = $product->getData($attributeCode);
    $optionsIds = [];
    if ($data) {
        $optionsIds = explode(',', $data);
    }

    foreach ($optionsIds as $optionId) {
        $attr = $this->productResource->getAttribute($attributeCode);
        if ($attr->usesSource()) {
            $option_value = $attr->getSource()->getOptionText($optionId);
            $result[] = $option_value;
        }
    }

    return implode(',', $result);

}

相关问题