Magento 2 - Comment obtenir l'attribut du produit?


Réponses:


15

Une autre façon, pour les attributs personnalisés: nous pouvons simplement obtenir la valeur en utilisant getCustomAttribute ()

if (null !== $product->getCustomAttribute('your_custom_attribute')) {
   echo $product->getCustomAttribute('your_custom_attribute')->getValue();
}

19

La meilleure pratique dans magento est de le faire via xml.

Pour obtenir un attribut standard, vous faites quelque chose comme ceci dans catalog_product_view.xmlpar exemple:

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

Cela obtiendra la valeur d'un attribut d'entrée ou d'une zone de texte. Si vous avez une liste déroulante, vous devez utiliser le type de texte, alors ajoutez cette ligne dans la liste des arguments:

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

Pas besoin de créer de fichiers ou d'écrire un code php pour obtenir un attribut. De cette façon, vous utiliserez le même code php par défaut pour n'importe quel attribut et vous ne devrez le modifier qu'une seule fois si nécessaire.


3
Comme votre solution, changé <referenceBlock en <referenceContainer et cela a fonctionné comme "product.info.main" est un conteneur :)
Devtype

12

J'avais une solution à mon problème:

$product = $this->productRepository->getById($product);
$attr = $product->getData('status');

7
$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
$_product = $objectManager->get('Magento\Catalog\Model\Product')->load($product_id);
$_product->getData('attr_code');

J'espère que cela aide


1
Veuillez essayer d'utiliser une classe de bloc telle que "Magento \ Catalog \ Block \ Product \ View \ Description" mais je recommanderais de ne pas utiliser le Gestionnaire d'objets dans Magento 2 sauf en dernier recours.
Dynomite

5

Une autre façon dans les fichiers phtml:

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

un péché: vendor/magento/module-catalog/view/frontend/templates/product/view/description.phtml


c'est une meilleure façon de le faire que d'utiliser le gestionnaire d'objets qui est presque toujours déconseillé. +1
Dynomite

meilleure solution que j'ai trouvée. +1: D
jehzlau

1

Créer un bloc à l'intérieur du catalog_product_view.xml et ajouter à l'intérieur de n'importe quel conteneur que vous voulez ou créer un conteneur autour de lui.

<!-- 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>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.