Magento 2:如何在目录中显示自定义属性?


13

我创建了一个新的textfield属性,并将以下设置设置为yes:

Visible on Catalog Pages on Storefront
Used in Product Listing

该属性已分配给一个属性集,并按预期显示在产品视图中。

但是,它在目录视图中不可见,我使用的是默认的Luma主题,并且清除了缓存并重新建立了索引。如果我查看模板文件:

magento-catalog/view/frontend/templates/product/list.phtml

我找不到任何获得自定义属性的代码,因此默认情况下Luma主题似乎不支持此功能。

如何在list.phtml中获得产品自定义属性标签和值?

Answers:


22

我们可以得到如下的自定义属性值

属性值

<?php /* @escapeNotVerified */ echo $_product->getResource()->getAttribute('c_address')->getFrontend()->getValue($_product); ?>

标签

$address =$_product->getResource()->getAttribute('c_address')->getStoreLabel();

注意:在上面的行c_address是我的自定义属性代码。

参考: Magento/Catalog/templates/product/view/attribute.phtml


如果attribute是media image类型,则不起作用。
LucScu

@Bilal,对我来说,自定义属性在list.phtml中显示“严重错误getFrontend”。你能告诉我如何避免这个错误吗?如果有任何想法的话
Hitesh Balpande

11

我创建了一篇有关此的文章,只需执行以下五个步骤即可:

1-在商店>属性>产品中创建属性。

2-在“默认”组中设置属性,转到“ 商店”>“属性”>“属性集”

3-在产品中设置此属性的值。

4-在自定义主题中打开以下相对文件:

app/design/frontend/CUSTOM/THEME/Magento_Catalog/templates/product/list.phtml

5-在foreach函数之间,将此代码粘贴到下面,但更改正确属性的代码:

$_getMyAttr = $_product->getResource()->getAttribute('my_attribute');

if ($_getMyAttr){

    // Get Value
    $attrTestValue = $_getMyAttr->getFrontend()->getValue($_product);

    // Get Label
    $attrTestLabel = $_getMyAttr->getStoreLabel();
}

重要

确保店面“属性下的在前端的产品视图页面上可见”“在产品列表中使用”选项设置为“是”。

参考:https : //rafaelstz.github.io/magento/magento2-display-custom-attribute-catalog-list-products.html


随着media image属性“可见在产品视图页面上前端”和“使用过的产品清单中”不设定。
LucScu

价格属性相同
CompactCode

在哪里可以找到默认的list.phtml?
mikebertiean '18年

你好,属性标签对我
有用,

6

用这个

$attribute = $_product->getResource()->getAttribute('identifier'); 
if ($attribute) 
{ 
$attr_value = $attribute ->getFrontend()->getValue($_product); 
}

1

@mikebertiean要查找默认列表。phtml导航至

<Magento base>/vendor/magento/module-catalog/view/frontend/templates/product

复制并更改它并将其添加到Rafael提到的路径后,您只需要刷新缓存即可使用。


0

打开

app/design/frontend/CUSTOM/THEME/Magento_Catalog/templates/product/list.phtml

在foreach循环之间添加以下内容。

<?php

$brand_attribute = $_product->getResource()->getAttribute('brand');

if ($brand_attribute){

    // Get Value
    $brand_value = $brand_attribute->getFrontend()->getValue($_product);

    // Get Label
    $brand_lable = $brand_attribute->getStoreLabel();
    echo $brand_lable." : ".$brand_value;
}

?>
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.