Yanıtlar:
magento 1 ile aynı şeyi yapabilirsiniz,
Ayrıntılı bilgi , Yapılandırılabilir üründen Ziyaret, Seçenek kimliği ve Etiket Al
// ürün nesnesindeki seçenek kimliğine dayalı seçenek etiketi al
$optionId = 10;
$attr = $_product->getResource()->getAttribute('color');
if ($attr->usesSource()) {
$optionText = $attr->getSource()->getOptionText($optionId);
}
//get option text ex. Red
// seçenek etiketine göre seçenek kimliğini al
$attr = $_product->getResource()->getAttribute('color');
if ($attr->usesSource()) {
$option_id = $attr->getSource()->getOptionId("Red");
}
//get option id ex. 10
Magento'daki en iyi uygulama xml ile yapmaktır.
brand
Sizin gibi standart bir özellik elde etmek için aşağıdaki gibi bir şey yapın catalog_product_view.xml
:
<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>
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 tutarlılığınız olur ve tüm öznitelikler için aynı attribute.phtml dosyasını kullanırsınız. Bir şey değişirse, yalnızca tek bir yerde değiştirmeniz gerekir.
Benim için çalıştı
$_product->getResource()->getAttribute('your_attribute_code')->getFrontend()->getValue($_product);
Basit bir çözüm elde ediyorum. bu yalnızca bir ürünün özellik koduyla özellik değerini gösterir. katalog ve ayrıntılar sayfasında check-in yaptım.
kod
<?php echo $_product->getAttributeText('size'); ?>
burada boyut öznitelik adıdır.
başvuru: satıcı / magento / modül-katalog / görünüm / kullanıcı arabirimi / şablonlar / ürün / görünüm / özellik.phtml satır: 35
Fabrika Yöntemini Kullan
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);
}
}
phtml dosyasında
$this->getAttributeOptionId('color','//optionLabel');
$this->getAttributeOptionText('color','//optionId');
$product->getResource()
en azından v2.2.2'de kullanımdan kaldırılma hakkında bir DocBlock notu var ve bu yüzden onu kullanarak kodlamak için tereddüt vardı. Bunun yerine, bu sayfada zaten bulunanlardan ilham alarak bu çözümü buldum:
$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
}
Referans için bu AbstractModel.php yöntemidir
/**
* 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()
Bu modelde bile yöntem bulamıyorum : github.com/magento/magento2/blob/2.3-develop/app/code/Magento/…
getResource()
daha önce var olan bir yöntemdi. Daha önce de belirttiğim gibi v2.2.2'de kullanımdan kaldırılmıştı. 2.3-gelişim dalında tamamlandığından şüpheleniyorum. Böylece bu işlevi gerektirmeyen örneğim.
Çünkü herkes buraya geliyor.
Herhangi bir ürün varlığınız yoksa, bu adımlarla bir seçenek değeri alabilirsiniz.
\Magento\Eav\Api\AttributeRepositoryInterface
Sınıfınıza enjekte edin
public function __construct(
...
\Magento\Eav\Api\AttributeRepositoryInterface $attributeRepository,
...
) {
...
$this->attributeRepository = $attributeRepository;
...
}
Özellik örneğini almak için repo'yu kullanın
// 4 is the default entity_type_id for product
$attribute = $this->attributeRepository->get('4', '[attribute_code]');
$attribute
Seçenek kimliğini seçenek değerinden almak için kullanın
$optionId = $attribute->getSource()->getOptionId('[option_value]');
özellik etiketi almak için kullanabilirsiniz
$product->getResource()->getAttribute($key)->getFrontend()->getLabel($product);
nesne yöneticisini kullanarak şunları yapabilirsiniz:
$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);
Lütfen bu kodu deneyin
Adım 1) Önce ürünleri yüklemelisiniz
$_productCollection = $block->getLoadedProductCollection();
Adım 2) Ürün listeleme sayfasında, bunun gibi ürünleri listelemek için bir ön döngü olacak
foreach ($_productCollection as $_product)
Adım3) Kodunuz bu döngünün içinde olacaktır. Aşağıdaki kodu, özellik etiketini görüntülemek istediğiniz yere yerleştirin.
$_product->getResource()->getAttribute('your_attribute_code')->getFrontend()->getValue($_product);
Sadece yerine your_attribute_code sizin nitelik olarak adlandırılır ne olursa olsun.