Jawaban:
Anda dapat melakukannya sama seperti Magento 1,
Informasi lebih lanjut, Kunjungi, Dapatkan id Opsi dan Label dari produk yang dapat dikonfigurasi
// dapatkan label opsi berdasarkan id opsi dari objek produk
$optionId = 10;
$attr = $_product->getResource()->getAttribute('color');
if ($attr->usesSource()) {
$optionText = $attr->getSource()->getOptionText($optionId);
}
//get option text ex. Red
// dapatkan id opsi berdasarkan label opsi
$attr = $_product->getResource()->getAttribute('color');
if ($attr->usesSource()) {
$option_id = $attr->getSource()->getOptionId("Red");
}
//get option id ex. 10
Praktik terbaik di Magento adalah melakukannya melalui xml.
Untuk mendapatkan atribut standar seperti brand
Anda melakukan sesuatu seperti ini catalog_product_view.xml
misalnya:
<referenceBlock 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>
</referenceBlock>
Ini akan mendapatkan nilai atribut input atau textarea. Jika Anda memiliki dropdown, Anda harus menggunakan jenis teks, jadi tambahkan baris ini dalam daftar argumen:
<argument name="at_type" xsi:type="string">text</argument>
Tidak perlu membuat file atau menulis kode php apa pun untuk mendapatkan atribut. Dengan cara ini Anda akan memiliki konsistensi dan menggunakan file atribut.phtml yang sama untuk semua atribut. Jika ada perubahan, Anda perlu mengubahnya di satu tempat saja.
Bekerja untukku
$_product->getResource()->getAttribute('your_attribute_code')->getFrontend()->getValue($_product);
Gunakan Metode Pabrik
protected $_attributeLoading;
public function __construct(
.....
\Magento\Catalog\Model\ResourceModel\ProductFactory $attributeLoading,
....
) {
parent::__construct($context);
....
$this->_attributeLoading = $attributeLoading;
....
}
public function getAttributeOptionId($attribute,$label)
{
$poductReource=$this->_attributeLoading->create();
$attr = $poductReource->getAttribute($attribute);
if ($attr->usesSource()) {
return $option_id = $attr->getSource()->getOptionId($label);
}
}
public function getAttributeOptionText($attribute,$label)
{
$poductReource=$this->_attributeLoading->create();
$attr = $poductReource->getAttribute($attribute);
if ($attr->usesSource()) {
return $option_Text = $attr->getSource()->getOptionText($label);
}
}
dalam file phtml
$this->getAttributeOptionId('color','//optionLabel');
$this->getAttributeOptionText('color','//optionId');
saya mendapatkan solusi sederhana. ini hanya akan menampilkan nilai atribut dengan kode atribut untuk suatu produk. Saya telah memeriksa halaman katalog dan detail.
kodenya
<?php echo $_product->getAttributeText('size'); ?>
di sini ukuran adalah nama atribut.
referensi: vendor / magento / modul-katalog / view / frontend / templates / produk / view / attribute.phtml baris: 35
$product->getResource()
memiliki catatan DocBlock tentang menjadi usang setidaknya di v2.2.2 dan jadi saya ragu untuk menggunakannya. Datang dengan solusi ini dan bukannya terinspirasi dari yang sudah ada di halaman ini:
$optionId = $product->getDataByKey('attribute_code');
$optionText = null;
$attributes = $product->getAttributes();
if ($optionId && array_key_exists('attribute_code', $attributes)) {
$attr = $attributes['attribute_code'];
if ($attr->usesSource()) {
$optionText = $attr->getSource()->getOptionText($optionId);
}
}
if ($optionText) {
//do something with $optionText
}
Untuk referensi, ini adalah metode di AbstractModel.php
/**
* Retrieve model resource
*
* @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
* @deprecated 101.0.0 because resource models should be used directly
*/
public function getResource()
{
return $this->_getResource();
}
getResource()
metode dalam model ini: github.com/magento/magento2/blob/2.3-develop/app/code/Magento/…
getResource()
adalah metode yang sebelumnya ada. Dalam v2.2.2 seperti yang saya sebutkan itu sudah dijadwalkan untuk penghinaan. Di cabang 2,3-berkembang saya menduga itu telah selesai. Demikian contoh saya yang tidak membutuhkan fungsi itu.
Karena semua orang datang ke sini.
Jika Anda tidak memiliki entitas produk apa pun, Anda dapat mengambil nilai opsi dengan langkah-langkah ini.
Suntikkan \Magento\Eav\Api\AttributeRepositoryInterface
ke kelas Anda
public function __construct(
...
\Magento\Eav\Api\AttributeRepositoryInterface $attributeRepository,
...
) {
...
$this->attributeRepository = $attributeRepository;
...
}
Gunakan repo untuk mendapatkan instance atribut
// 4 is the default entity_type_id for product
$attribute = $this->attributeRepository->get('4', '[attribute_code]');
Gunakan $attribute
untuk mendapatkan id opsi dari nilai opsi
$optionId = $attribute->getSource()->getOptionId('[option_value]');
Anda dapat menggunakan untuk mendapatkan label atribut
$product->getResource()->getAttribute($key)->getFrontend()->getLabel($product);
Anda bisa menggunakan manajer objek:
$pid = 1;
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$pdata = $objectManager->create('Magento\Catalog\Model\Product')->load($pid);
$getlable = $pdata->getResource()->getAttribute($key)->getFrontend()->getLabel($pdata);
Silakan coba kode ini
Langkah 1) Pertama, Anda harus memuat produk
$_productCollection = $block->getLoadedProductCollection();
Langkah 2) Di halaman daftar produk, akan ada loop foreach untuk daftar produk seperti ini
foreach ($_productCollection as $_product)
Langkah 3) Kode Anda akan berada di dalam loop ini. Tempatkan kode di bawah ini di tempat di mana Anda ingin menampilkan label atribut.
$_product->getResource()->getAttribute('your_attribute_code')->getFrontend()->getValue($_product);
Cukup ganti your_attribute_code Anda dengan apa pun nama atribut Anda.