Magento 2 - Ürün niteliği nasıl alınır?


Yanıtlar:


16

Özel nitelikler için başka bir yol: getCustomAttribute () kullanarak değeri alabiliriz

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

19

Magento'daki en iyi uygulama xml ile yapmaktır.

Standart bir özellik elde etmek için aşağıdakine benzer bir şey yaparsınız catalog_product_view.xml:

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

Bu, bir girdi özniteliğinin veya metin alanının değerini alır. Bir açılır listeniz varsa metin türünü kullanmalısınız, bu nedenle bu satırı bağımsız değişkenler listesine ekleyin:

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

Bir özellik almak için dosya oluşturmaya veya herhangi bir php kodu yazmaya gerek yok. Bu şekilde, herhangi bir özellik için aynı varsayılan php kodunu kullanırsınız ve gerekirse yalnızca bir kez değiştirmeniz gerekir.


3
Çözümünüz gibi, <referenceBlock'u <referenceContainer olarak değiştirin ve "product.info.main" bir kapsayıcı olarak çalıştı :)
Devtype

12

Sorunum için çözüm buldum:

$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');

Umarım yardımcı olur


1
Lütfen, "Magento \ Catalogue \ Block \ Product \ View \ Description" gibi bir blok sınıfı kullanmayı deneyin ancak son çare olmadıkça Magento 2'de Nesne Yöneticisi'ni kullanmamanızı tavsiye ederim.
Dynomite

5

Phtml dosyalarında başka bir yol:

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

de olduğu gibi: vendor/magento/module-catalog/view/frontend/templates/product/view/description.phtml


bu, neredeyse her zaman cesaret kırılmış nesne yöneticisini kullanmaktan daha iyi bir yoldur. +1
Dynomite

bulduğum en iyi çözüm. +1: D
jehzlau

1

Catalog_product_view.xml içinde bir Blok oluşturma ve istediğiniz herhangi bir kabın içine ekleme veya etrafında bir kap oluşturma.

<!-- 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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.