【问题标题】:How to get product information from product id in magento 2如何从magento 2中的产品ID获取产品信息
【发布时间】:2020-01-01 18:07:00
【问题描述】:

我想从 magento 2 中的产品 ID 中获取我们在下面代码中使用但不起作用的所有产品类型的价格和特价

    <?php
namespace Namespace\Module\Model;

use Magento\Framework\Model\AbstractModel;
use Magento\Framework\Model\Context;
use Magento\Store\Model\ScopeInterface;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory;
use Namespace\Module\Model\ResourceModel\Subscription\CollectionFactory as SubscriptionCollectionFactory;

class Observer extends AbstractModel{

      protected $_storeManager;
      protected $_productCollectionFactory;
      protected $_objectManager;
      protected $_currency;

      public function __construct(
    Context $context,
    \Magento\Store\Model\StoreManagerInterface $storeManager,
        \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
    \Magento\Framework\ObjectManagerInterface $objectManager,
    ProductCollectionFactory $productCollectionFactory,
    SubscriptionCollectionFactory $subscriptionCollectionFactory,
    \Magento\Directory\Model\Currency $currency
     ) 
     {  
    $this->_scopeConfig = $scopeConfig;
    $this->_storeManager = $storeManager;   
    $this->_objectManager = $objectManager;
    $this->_productCollectionFactory = $productCollectionFactory;
        $this->subscriptionCollectionFactory  = $subscriptionCollectionFactory;
    $this->_currency = $currency;
     }

     public function sendalert() { 

    $data = $this->subscriptionCollectionFactory->create()
        ->addFieldToSelect('*')
        ->addFieldToFilter('subscription_status', 0);



    $collection = $this->_productCollectionFactory->create()
              ->addAttributeToFilter('status', 1)
              ->addAttributeToFilter('visibility', 4)
              ->addAttributeToSelect('*');
    $prodIds = $collection->getAllIds();



    foreach($prodIds as $productId)
    {
        $om =   \Magento\Framework\App\ObjectManager::getInstance();
        $pdata = $this->_objectManager()->create('Magento\Catalog\Model\Product')->load($productId);
        echo '>>'.$pdata->getPrice();
    }

      }


}

【问题讨论】:

标签: magento2


【解决方案1】:

其他答案告诉你直接使用ObjectManager,但你不应该这样做,因为你会解决Dependency Injection 模式。 ObejctManager 应该只在引导过程中使用,或者如果你真的有理由使用它。

更好的方法是使用\Magento\Catalog\Model\ProductRepository::getById 方法。您可以像使用其他构造函数参数一样使用自动构造函数注入来注入 ProductRepository

$productRepository; 
public function __construct(
    Context $context,
    \Magento\Catalog\Api\ProductRepositoryInterface $pr
    // ...
    ) 
{  
    $this->productRepository = $pr;
    // ....
}

然后使用

$productRepository->getById(1234);

如果您需要有关如何使用存储库的更多信息,也许this tutorial 会帮助您。

【讨论】:

  • 但出现此错误:- main.CRITICAL: 异常 'Magento\Framework\Exception\LocalizedException' 与 /var/www/html/magento25/vendor/magento 中的消息 'Area code is not set' /framework/App/State.php:139
  • 如果你没有在开发者模式下运行清除生成文件夹并清除缓存:rm -rf var/generation/* var/cache/*.
  • 您能解释一下什么是商家测试版吗?
  • 在稳定版 2.0.0 之前发布的 Magento 2 的公开版本
【解决方案2】:

试试这个

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

【讨论】:

    【解决方案3】:

    以下代码对我有用

    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $productObject = $objectManager->create('Magento\Catalog\Model\Product');
    $product      = $productObject->load('enter product id');

    这里的 ObjectManager 类类似于服务类或工厂类,用于创建产品模型的对象。

    如果你有双份的话请告诉我

    【讨论】:

    • 但在 exception.log:-main.CRITICAL 中显示此错误:异常 'Magento\Framework\Exception\LocalizedException' 并在 /var/www/html/magento23 中显示消息 'Area code is not set' /vendor/magento/framework/App/State.php:139
    【解决方案4】:

    试试下面

    use Magento\Catalog\Model\ProductFactory;
    /**
     * @var ProductFactory
     */
    protected $_modelProductFactory;
    public function __construct(
        ...      
        ProductFactory $modelProductFactory,  
        ...
    )
    {           
        $this->_modelProductFactory = $modelProductFactory; 
        ...
    }
    
    public function getProductInformation($productId)
    {
        return $this->_modelProductFactory->create()->load($productId);
    }
    

    【讨论】:

    • 欢迎来到 Stack Overflow 。请在答案中添加更多解释。每个答案都必须在本站有充分的解释。
    【解决方案5】:

    使用 ObjectManager。

    <?php $product_id = 45; // product id
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        $product = $objectManager->create('Magento\Catalog\Model\Product')->load($product_id);
    ?>
    

    使用工厂方法。

    <?php
    namespace Test\Module\Block;
    
    class Product extends \Magento\Framework\View\Element\Template
    {
    
      protected $_productloader;  
    
    
      public function __construct(
            \Magento\Framework\View\Element\Template\Context $context,
            \Magento\Catalog\Model\ProductFactory $_productloader
    
        ) {
    
    
        ) {
    
    
            $this->_productloader = $_productloader;
            parent::__construct($context);
        }
        public function getLoadProduct($id)
        {
            return $this->_productloader->create()->load($id);
        }
    
    }
            $this->_productloader = $_productloader;
            parent::__construct($context);
        }
        public function getLoadProduct($id)
        {
            return $this->_productloader->create()->load($id);
        }
    
    }
    

    在 phtml 文件中使用。

    <?php
        $product_id = 45; // product id
        $product=$this->getLoadProduct($product_id);
        echo $product->getName();
    ?>
    

    谢谢。

    【讨论】:

      【解决方案6】:

      在 Magento 2 中建议为此使用服务层。尝试使用 \Magento\Catalog\Model\ProductRepository::getById 方法通过 id 获取产品

      试试下面的代码

      $prod_id = "Your product id goes here";
      $om =   \Magento\Framework\App\ObjectManager::getInstance();
      $pdata = $om->create('Magento\Catalog\Model\Product')->load($prod_id);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-25
        • 1970-01-01
        • 2016-03-09
        • 1970-01-01
        • 2015-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多