Magento 2: Как отобразить пользовательский атрибут в каталоге?

13

Я создал новый атрибут текстового поля со следующими настройками, установленными на yes:

Visible on Catalog Pages on Storefront
Used in Product Listing

Атрибут назначается набору атрибутов, и он отображается в представлении продукта, как и предполагалось.

Однако это не отображается в представлении каталога, я использую стандартную тему Luma , очистил кэш и переиндексировал. Если я просматриваю файл шаблона:

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

Я не могу найти никакого кода, получающего пользовательские атрибуты, поэтому тема Luma, по-видимому, не поддерживает это по умолчанию.

Как я могу получить метку и значение настраиваемого атрибута продукта в list.phtml ?

oscarpas
источник

Ответы:

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

Билал Усеан
источник
это не работает, если атрибут является media imageтипом.
LucScu
@Bilal, для меня пользовательские атрибуты показывают "фатальную ошибку getFrontend" в list.phtml.
Подскажите
11

Я создал статью об этом, в которой всего 5 шагов :

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
привет, у меня работает метка атрибута, но не значение атрибута
Сарвеш Тивари
6

Использовать это

$attribute = $_product->getResource()->getAttribute('identifier'); 
if ($attribute) 
{ 
$attr_value = $attribute ->getFrontend()->getValue($_product); 
}
Зеешан Хуваджа
источник
1

@mikebertiean Чтобы найти список по умолчанию list.phtml, перейдите к

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

Как только вы скопировали его, изменили и добавили к пути, указанному Рафаэлем, вам просто нужно очистить кеш, и он заработает.

SYPOMark
источник
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;
}

?>
Теджа Бхагаван Коллепара
источник