Magento 2: Jak wyświetlić niestandardowy atrybut w katalogu?

13

Utworzyłem nowy atrybut pola tekstowego z następującymi ustawieniami ustawionymi na tak:

Visible on Catalog Pages on Storefront
Used in Product Listing

Atrybut jest przypisany do zestawu atrybutów i pojawia się w widoku produktu zgodnie z przeznaczeniem.

Jednak nie jest to widoczne w widoku katalogu, używam domyślnego motywu Luma , wyczyściłem pamięć podręczną i ponownie zindeksowałem. Jeśli wyświetlę plik szablonu:

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

Nie mogę znaleźć żadnego kodu, który uzyska niestandardowe atrybuty, więc motyw Luma domyślnie nie obsługuje tego.

Jak uzyskać niestandardową etykietę i wartość atrybutu produktów w pliku list.phtml ?

oscarpas
źródło

Odpowiedzi:

22

Możemy uzyskać niestandardową wartość atrybutu jak poniżej

Wartość atrybutu

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

Etykieta

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

Uwaga: w powyższej linii c_address to mój niestandardowy kod atrybutu.

Odniesienie: Magento/Catalog/templates/product/view/attribute.phtml

Bilal Usean
źródło
nie działa, jeśli atrybut jest media imagetypem.
LucScu,
@Bilal, dla mnie niestandardowe atrybuty pokazują „fatal error getFrontend” w list.phtml. czy możesz powiedzieć, jak uniknąć tego błędu, jeśli masz jakiś pomysł
Hitesh Balpande
11

Stworzyłem artykuł na ten temat, który ma tylko 5 kroków :

1 - Utwórz swój atrybut w Sklepy> Atrybuty> Produkt .

2 - Ustaw atrybut w grupie Domyślne, przejdź do Sklepy> Atrybuty> Zestaw atrybutów .

3 - Ustaw wartości tych atrybutów w swoich produktach.

4 - Otwórz w swoim motywie niestandardowym plik względny poniżej:

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

5 - Pomiędzy funkcją foreach wklej poniższy kod, ale zmieniając kod swojego poprawnego atrybutu:

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

if ($_getMyAttr){

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

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

Ważny

Upewnij się, że opcje „Widoczny na stronie widoku produktu w interfejsie” i „Używany na liście produktów” w oknie Właściwości sklepu są ustawione na Tak.

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

Rafael Corrêa Gomes
źródło
Z media imageatrybutem „Widoczny na stronie widoku produktu w interfejsie” i „Używany na liście produktów” nie można ustawić.
LucScu,
to samo dla atrybutu ceny
CompactCode,
gdzie mogę znaleźć domyślny list.phtml?
mikebertiean
cześć, etykieta atrybutu działa dla mnie, ale nie wartość atrybutu
Sarvesh Tiwari
6

Użyj tego

$attribute = $_product->getResource()->getAttribute('identifier'); 
if ($attribute) 
{ 
$attr_value = $attribute ->getFrontend()->getValue($_product); 
}
Zeeshan Khuwaja
źródło
1

@ Mikebertiean Aby znaleźć domyślny list.phtml, przejdź do

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

Po skopiowaniu go i zmianie i dodaniu go do ścieżki, o której wspomniał Rafael, wystarczy opróżnić pamięć podręczną i będzie działać.

SYPOMark
źródło
0

otwarty

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

Dodaj następujące elementy między pętlą 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;
}

?>
Teja Bhagavan Kollepara
źródło