วิธีรับค่าตัวเลือกตามรหัสตัวเลือกใน Magento หรือรับรหัสตัวเลือกตามรหัสตัวเลือก
ตัวอย่าง:วิธีรับตัวเลือกแอตทริบิวต์สี id 10 จากป้ายกำกับ "สีแดง" และรับค่า "สีแดง" หากรหัสตัวเลือกคือ 10
วิธีรับค่าตัวเลือกตามรหัสตัวเลือกใน Magento หรือรับรหัสตัวเลือกตามรหัสตัวเลือก
ตัวอย่าง:วิธีรับตัวเลือกแอตทริบิวต์สี id 10 จากป้ายกำกับ "สีแดง" และรับค่า "สีแดง" หากรหัสตัวเลือกคือ 10
คำตอบ:
คุณสามารถทำได้เช่นเดียวกับ magento 1
ข้อมูลเพิ่มเติมในรายละเอียดเยี่ยมชมรับรหัสตัวเลือกและฉลากจากผลิตภัณฑ์ที่กำหนดค่าได้
// รับเลเบลตัวเลือกโดยยึดตามรหัสตัวเลือกจากวัตถุผลิตภัณฑ์
$optionId = 10;
$attr = $_product->getResource()->getAttribute('color');
if ($attr->usesSource()) {
$optionText = $attr->getSource()->getOptionText($optionId);
}
//get option text ex. Red
// รับรหัสตัวเลือกตามฉลากตัวเลือก
$attr = $_product->getResource()->getAttribute('color');
if ($attr->usesSource()) {
$option_id = $attr->getSource()->getOptionId("Red");
}
//get option id ex. 10
แนวทางปฏิบัติที่ดีในวีโอไอพีคือการทำผ่าน xml
ในการรับแอตทริบิวต์มาตรฐานเช่นbrand
คุณทำสิ่งนี้ใน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>
สิ่งนี้จะได้รับค่าของคุณลักษณะการป้อนข้อมูลหรือ textarea หากคุณมีรายการแบบหล่นลงคุณควรใช้ประเภทข้อความดังนั้นเพิ่มบรรทัดนี้ในรายการอาร์กิวเมนต์:
<argument name="at_type" xsi:type="string">text</argument>
ไม่จำเป็นต้องสร้างไฟล์หรือเขียนโค้ด php ใด ๆ เพื่อรับคุณสมบัติ วิธีนี้คุณจะมีความสอดคล้องและใช้ไฟล์ attribute.phtml เดียวกันสำหรับแอตทริบิวต์ทั้งหมด หากมีการเปลี่ยนแปลงบางอย่างคุณจำเป็นต้องเปลี่ยนแปลงในที่เดียวเท่านั้น
ทำงานให้ฉัน
$_product->getResource()->getAttribute('your_attribute_code')->getFrontend()->getValue($_product);
ฉันได้คำตอบง่ายๆ สิ่งนี้จะแสดงค่าคุณลักษณะพร้อมรหัสแอตทริบิวต์สำหรับผลิตภัณฑ์เท่านั้น ฉันตรวจสอบในหน้าแคตตาล็อกและรายละเอียดแล้ว
รหัสคือ
<?php echo $_product->getAttributeText('size'); ?>
ขนาดที่นี่คือชื่อแอตทริบิวต์
การอ้างอิง: ผู้ขาย / magento / โมดูลแคตตาล็อก / ดู / ส่วนหน้า / แม่แบบ / ผลิตภัณฑ์ / ดู / attribute.phtml บรรทัด: 35
ใช้วิธีการจากโรงงาน
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
$this->getAttributeOptionId('color','//optionLabel');
$this->getAttributeOptionText('color','//optionId');
$product->getResource()
มีโน้ต DocBlock เกี่ยวกับการคัดค้านอย่างน้อยใน v2.2.2 และฉันลังเลที่จะใช้รหัส มาด้วยวิธีนี้แทนแรงบันดาลใจจากคนที่มีอยู่แล้วในหน้านี้:
$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
}
สำหรับการอ้างอิงนี่เป็นวิธีการใน 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()
วิธีการในรุ่นนี้ได้: github.com/magento/magento2/blob/2.3-develop/app/code/Magento/
getResource()
เป็นวิธีการที่มีอยู่ก่อนหน้านี้ ใน v2.2.2 ตามที่ฉันกล่าวถึงมันถูกกำหนดไว้แล้วสำหรับการคัดค้าน ในสาขาพัฒนา 2.3 ฉันสงสัยว่ามันเสร็จสมบูรณ์แล้ว ดังนั้นตัวอย่างของฉันซึ่งไม่ต้องการฟังก์ชันนั้น
สำหรับทุกคนมาที่นี่
หากคุณไม่มีเอนทิตีผลิตภัณฑ์ใด ๆ คุณสามารถเรียกคืนค่าตัวเลือกด้วยขั้นตอนนี้
ฉีด\Magento\Eav\Api\AttributeRepositoryInterface
เข้าชั้นเรียนของคุณ
public function __construct(
...
\Magento\Eav\Api\AttributeRepositoryInterface $attributeRepository,
...
) {
...
$this->attributeRepository = $attributeRepository;
...
}
ใช้ repo เพื่อรับอินสแตนซ์ของแอตทริบิวต์
// 4 is the default entity_type_id for product
$attribute = $this->attributeRepository->get('4', '[attribute_code]');
ใช้$attribute
เพื่อรับรหัสตัวเลือกจากค่าตัวเลือก
$optionId = $attribute->getSource()->getOptionId('[option_value]');
คุณสามารถใช้เพื่อรับป้ายกำกับแอตทริบิวต์
$product->getResource()->getAttribute($key)->getFrontend()->getLabel($product);
คุณสามารถใช้ตัวจัดการวัตถุ:
$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);
กรุณาลองรหัสนี้
ขั้นตอนที่ 1) ก่อนอื่นคุณต้องโหลดผลิตภัณฑ์
$_productCollection = $block->getLoadedProductCollection();
ขั้นตอนที่ 2) ในหน้ารายการผลิตภัณฑ์จะมีลูป foreach สำหรับแสดงรายการผลิตภัณฑ์เช่นนี้
foreach ($_productCollection as $_product)
ขั้นตอนที่ 3) โค้ดของคุณจะอยู่ในลูปนี้วางโค้ดด้านล่างนี้ไว้ตรงไหนก็ได้ที่คุณต้องการแสดงฉลากแอททริบิวต์
$_product->getResource()->getAttribute('your_attribute_code')->getFrontend()->getValue($_product);
เพียงแทนที่your_attribute_codeด้วยชื่อของคุณ