Answers:
您可以像magento 1一样进行操作
有关详细信息的更多信息,请访问,从可配置产品中获取选项ID和标签
//根据产品对象的选项ID获取选项标签
$optionId = 10;
$attr = $_product->getResource()->getAttribute('color');
if ($attr->usesSource()) {
$optionText = $attr->getSource()->getOptionText($optionId);
}
//get option text ex. Red
//根据选项标签获取选项ID
$attr = $_product->getResource()->getAttribute('color');
if ($attr->usesSource()) {
$option_id = $attr->getSource()->getOptionId("Red");
}
//get option id ex. 10
magento的最佳实践是通过xml做到这一点。
为了获得类似的标准属性,brand
您可以在catalog_product_view.xml
以下示例中执行以下操作:
<referenceBlock name="product.info.main">
<block class="Magento\Catalog\Block\Product\View\Description" name="product.info.brand" template="product/view/attribute.phtml" before="-">
<arguments>
<argument name="at_call" xsi:type="string">getBrand</argument>
<argument name="at_code" xsi:type="string">brand</argument>
<argument name="css_class" xsi:type="string">brand</argument>
<argument name="at_label" xsi:type="string">none</argument>
<argument name="add_attribute" xsi:type="string">itemprop="brand"</argument>
</arguments>
</block>
</referenceBlock>
这将获取输入属性或textarea的值。如果有下拉菜单,则应使用文本类型,因此请在参数列表中添加以下行:
<argument name="at_type" xsi:type="string">text</argument>
无需创建文件或编写任何php代码即可获得属性。这样,您将具有一致性,并对所有属性使用相同的attribute.phtml文件。如果有什么变化,您只需要在一个地方进行更改。
为我工作
$_product->getResource()->getAttribute('your_attribute_code')->getFrontend()->getValue($_product);
使用工厂方法
protected $_attributeLoading;
public function __construct(
.....
\Magento\Catalog\Model\ResourceModel\ProductFactory $attributeLoading,
....
) {
parent::__construct($context);
....
$this->_attributeLoading = $attributeLoading;
....
}
public function getAttributeOptionId($attribute,$label)
{
$poductReource=$this->_attributeLoading->create();
$attr = $poductReource->getAttribute($attribute);
if ($attr->usesSource()) {
return $option_id = $attr->getSource()->getOptionId($label);
}
}
public function getAttributeOptionText($attribute,$label)
{
$poductReource=$this->_attributeLoading->create();
$attr = $poductReource->getAttribute($attribute);
if ($attr->usesSource()) {
return $option_Text = $attr->getSource()->getOptionText($label);
}
}
在phtml文件中
$this->getAttributeOptionId('color','//optionLabel');
$this->getAttributeOptionText('color','//optionId');
$product->getResource()
关于至少在v2.2.2中已弃用了DocBlock注释,因此我很犹豫使用它进行编码。提出此解决方案,而不是受到此页面上已有的启发:
$optionId = $product->getDataByKey('attribute_code');
$optionText = null;
$attributes = $product->getAttributes();
if ($optionId && array_key_exists('attribute_code', $attributes)) {
$attr = $attributes['attribute_code'];
if ($attr->usesSource()) {
$optionText = $attr->getSource()->getOptionText($optionId);
}
}
if ($optionText) {
//do something with $optionText
}
供参考,这是AbstractModel.php中的方法
/**
* Retrieve model resource
*
* @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
* @deprecated 101.0.0 because resource models should be used directly
*/
public function getResource()
{
return $this->_getResource();
}
getResource()
:在这个模型方法github.com/magento/magento2/blob/2.3-develop/app/code/Magento/...
getResource()
是以前存在的一种方法。正如我所提到的,在v2.2.2中已将其弃用。我怀疑在2.3开发分支中它已经完成。因此,我的示例不需要该功能。
每个人都来这里。
如果您没有任何产品实体,则可以通过以下步骤检索选项值。
注入\Magento\Eav\Api\AttributeRepositoryInterface
你的班级
public function __construct(
...
\Magento\Eav\Api\AttributeRepositoryInterface $attributeRepository,
...
) {
...
$this->attributeRepository = $attributeRepository;
...
}
使用仓库获取属性实例
// 4 is the default entity_type_id for product
$attribute = $this->attributeRepository->get('4', '[attribute_code]');
用于$attribute
从选项值中获取选项ID
$optionId = $attribute->getSource()->getOptionId('[option_value]');
您可以用来获取属性标签
$product->getResource()->getAttribute($key)->getFrontend()->getLabel($product);
您可以使用对象管理器:
$pid = 1;
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$pdata = $objectManager->create('Magento\Catalog\Model\Product')->load($pid);
$getlable = $pdata->getResource()->getAttribute($key)->getFrontend()->getLabel($pdata);
请尝试此代码
步骤1)首先,您必须加载产品
$_productCollection = $block->getLoadedProductCollection();
步骤2)在产品列表页面中,会有一个foreach循环,用于列出这样的产品
foreach ($_productCollection as $_product)
步骤3)您的代码将在此循环内。将下面的代码放在要显示属性标签的任何地方。
$_product->getResource()->getAttribute('your_attribute_code')->getFrontend()->getValue($_product);
只需将您的属性命名为your_attribute_code即可。