Magento2: วิธีรับรหัสผลิตภัณฑ์ไปยังโมดูลที่กำหนดเองของฉัน


11

ฉันยังใหม่กับ magento2 และตอนนี้ฉันกำลังสร้างโมดูลที่กำหนดเองและฉันต้องการรับผลิตภัณฑ์ID/SKUจากแคตตาล็อก ฉันพยายามโทรโดยใช้ฟังก์ชั่นที่อยู่ในโฟลเดอร์ Block กรุณาแนะนำ!

คำตอบ:


36

ลองสิ่งนี้:

<?php 
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $product = $objectManager->get('Magento\Framework\Registry')->registry('current_product');//get current product
    echo $product->getId();
    echo $product->getName();
?>

หรือ

เพิ่มรหัสตะโกนในไฟล์บล็อกของคุณ

ตัวอย่างเช่น app/code/AR/CustomModule/Block/CustomBlock.php

<?php
namespace AR\CustomModule\Block;
class CustomBlock extends \Magento\Framework\View\Element\Template
{
    protected $_registry;

    public function __construct(
        \Magento\Backend\Block\Template\Context $context,       
        \Magento\Framework\Registry $registry,
        array $data = []
    )
    {       
        $this->_registry = $registry;
        parent::__construct($context, $data);
    }

    public function _prepareLayout()
    {
        return parent::_prepareLayout();
    }

    public function getCurrentCategory()
    {       
        return $this->_registry->registry('current_category');
    }

    public function getCurrentProduct()
    {       
        return $this->_registry->registry('current_product');
    }   

}
?>

การพิมพ์ข้อมูลผลิตภัณฑ์ปัจจุบันในไฟล์เทมเพลตของคุณ (custom.phtml)

if ($currentProduct = $block->getCurrentProduct()) {
    echo $currentProduct->getName() . '<br />';
    echo $currentProduct->getSku() . '<br />';
    echo $currentProduct->getId() . '<br />';       
}

งานนี้มีเสน่ห์เหมือนกัน! คุณต้องการอธิบายเกี่ยวกับรีจิสทรีนี้หรือไม่? มีคู่มือนักพัฒนาในพื้นที่นี้หรือไม่?
ming

2
มีวิธีอื่นในการรับรหัสผลิตภัณฑ์นอกเหนือจากรีจิสทรีหรือไม่
Sushivam

0
<?php 
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$product = $objectManager->get('Magento\Framework\Registry')->registry('current_product');//get current product
echo $product->getId();
echo $product->getName();
?>

มันใช้งานได้สำหรับฉัน

.


อย่าใช้ตัวจัดการวัตถุโดยตรง
Lorenzo

0
<?php
     $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
     $productid = $this->getRequest()->getParam('id');                                       
     $product = $objectManager->create('Magento\Catalog\Model\Product')->load($productid);
     echo $product;
?>                                                                          

ใช้รหัสนี้เพื่อรับรหัสผลิตภัณฑ์ปัจจุบัน


0

คุณสามารถลอง $product = $this->abstractProduct->getProduct();

กับ \Magento\Catalog\Block\Product\AbstractProduct $abstractProduct

ทำงานให้ฉัน :)


มันไม่ทำงานสำหรับหน้ารายการผลิตภัณฑ์
Amit Naraniwal

-3

ลองสิ่งนี้:

<?php  
   $productId = 8;
   $objectManager =  \Magento\Framework\App\ObjectManager::getInstance();
   $currentproduct = $objectManager->create('Magento\Catalog\Model\Product')->load($productId);
   echo $currentproduct->getName(); 
?>

เฮ้ขอบคุณสำหรับการตอบกลับ! ฉันคิดว่าฉันใช้คำถามของฉันผิด โมดูลปัจจุบันของฉันเป็นเพียงการเพิ่มข้อมูลสำหรับผลิตภัณฑ์สิ่งที่ฉันหมายถึงจริงๆคือฉันจะรับ ID ของผลิตภัณฑ์หน้าปัจจุบันได้อย่างไร ตัวอย่างใน "localhost / test / product-A.html" ฉันจะดึงข้อมูล id สำหรับผลิตภัณฑ์นี้ได้อย่างไร
ming

ฉันหา Class 'Magento \ Framework \ App \ ObjectManager ไม่พบ
Sushivam

ฉันพยายามที่จะได้รับในรูปแบบที่กำหนดเองของฉันเป็น: $ productId = 1; $ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance (); $ currentproduct = $ objectManager-> create ('Vendor \ Module \ Model \ Queue') -> load ($ productId); echo '<pre>'; print_r ($ currentproduct-> getEntityId ()); die; ฉันได้รับการเรียกร้องให้ส่ง () โดยเปล่าประโยชน์ .. กรุณาช่วยเหลือ
Sushivam

วิธีรับ $ productId = 8 แบบไดนามิก
Sushivam
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.