Magento 2 - Jak zdobyć atrybut produktu?

Odpowiedzi:

15

Innym sposobem dla niestandardowych atrybutów: możemy po prostu uzyskać wartość za pomocą getCustomAttribute ()

if (null !== $product->getCustomAttribute('your_custom_attribute')) {
   echo $product->getCustomAttribute('your_custom_attribute')->getValue();
}
Khoa TruongDinh
źródło
19

Najlepszą praktyką w Magento jest robienie tego przez xml.

Aby uzyskać standardowy atrybut, robisz coś takiego catalog_product_view.xmlna przykład:

<referenceContainer 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>
</referenceContainer>

Otrzyma wartość atrybutu wejściowego lub pola tekstowego. Jeśli masz listę rozwijaną, powinieneś użyć typu tekstu, więc dodaj ten wiersz na liście argumentów:

<argument name="at_type" xsi:type="string">text</argument>

Nie trzeba tworzyć plików ani pisać kodu php, aby uzyskać atrybut. W ten sposób użyjesz tego samego domyślnego kodu php dla dowolnego atrybutu i będziesz musiał go zmienić tylko raz, jeśli zajdzie taka potrzeba.

Claudiu Creanga
źródło
3
Podobnie jak twoje rozwiązanie, zmieniłem <referenceBlock na <referenceContainer i działało jako „product.info.main” to kontener :)
Devtype
12

Mam rozwiązanie mojego problemu:

$product = $this->productRepository->getById($product);
$attr = $product->getData('status');
MrTo-Kane
źródło
7
$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
$_product = $objectManager->get('Magento\Catalog\Model\Product')->load($product_id);
$_product->getData('attr_code');

Mam nadzieję, że to pomoże

Saurabh Taletiya
źródło
1
Spróbuj użyć klasy blokowej, takiej jak „Magento \ Catalog \ Block \ Product \ View \ Description”, ale odradzam używanie Menedżera obiektów w Magento 2, chyba że w ostateczności.
Dynomite
5

Inny sposób w plikach phtml:

echo $this->helper('Magento\Catalog\Helper\Output')->productAttribute($block->getProduct(), $block->getProduct()->getDescription(), 'description')

jak w: vendor/magento/module-catalog/view/frontend/templates/product/view/description.phtml

waltr
źródło
jest to lepszy sposób na zrobienie tego niż używanie menedżera obiektów, co prawie zawsze jest odradzane. +1
Dynomite
najlepsze rozwiązanie, które znalazłem. +1: D
jehzlau
1

Tworzenie bloku w katalogu katalog_produktu_widok.xml i dodawanie dowolnego kontenera lub utworzenie wokół niego kontenera.

<!-- Get a attribute -->
<block class="Magento\Catalog\Block\Product\View\Description" name="product.attributes.Height" template="product/view/attribute.phtml" before="-">
    <arguments>
        <argument name="at_call" xsi:type="string">getHeight</argument>
        <argument name="at_code" xsi:type="string">height</argument>
        <argument name="css_class" xsi:type="string">height</argument>
        <argument name="at_label" xsi:type="string">none</argument>
        <argument name="add_attribute" xsi:type="string">itemprop="Height"</argument>
    </arguments>
</block>
Nathaniel Meyer
źródło