Magento2 - 新手 Select 产品

Magento2 - Newbie Select product

我有一个站点 运行 Magento 2.2.1。我需要创建一个非常简单的 PHP 页面来查找给定的产品。我想根据SKU查找产品,然后将价格和产品URL打印出来。

我什至不知道如何开始。我曾尝试使用它来测试加载 ID = 1

的产品
//Get Object Manager Instance
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

//Load product by product id
$product = $objectManager->create('Magento\Catalog\Model\Product')->load(1);

但所做的只是抛出找不到 ObjectManager 的异常。所以我尝试预先包含 /app/bootstrap.php 文件,这会引发 ObjectManager 未初始化的错误。

谁能给我一个简单的例子,我可以把它放到我网站的根目录中,这样我就可以按 sku 查找单个产品?或者为我指明一些有用文档的方向?

你不能只通过简单的 PHP 文件在 magento 中加载页面这是程序 1)在你的主题中创建一个布局文件 2)在layout.xml里面注册 3)将 phtml 添加到您的布局文件 4)在那个phtml文件中添加你的代码(在你的问题中)

第二种方式比较复杂 创建模块并在模块控制器中呈现您的代码

使用 ObjectManager 以编程方式在简单的 PHP 文件中加载产品的解决方案,但 Magento 2 不推荐此解决方案。

<?php

include('app/bootstrap.php');
use Magento\Framework\App\Bootstrap;

$bootstrap = Bootstrap::create(BP, $_SERVER);

$objectManager = $bootstrap->getObjectManager();

$state = $objectManager->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');    

$productId = 1;
$product = $objectManager->create('Magento\Catalog\Model\Product')->load($productId);

echo $product->getName();

?>

推荐的解决方案 (Magento 2)

在 Magento 2 中,推荐的加载产品的方法是在适当的自定义模块中使用 ProductRepositoryProductFactory 而不是简单的 PHP 文件。那么,通过使用以下(推荐)代码,您可以在自定义块中加载产品。

ProductFactory解决方案

<?php
namespace [Vendor_Name]\[Module_Name]\Block;

use Magento\Catalog\Model\ProductFactory;

class Product extends \Magento\Framework\View\Element\Template
{    
    protected $_productloader;

    public function __construct(
        ProductFactory $_productloader    
    ) {  
        $this->_productloader = $_productloader;
    }

    public function getLoadProduct($id)
    {
        return $this->_productloader->create()->load($id);
    }    
}

在 Magento 2.1 中

ProductRepository 解决方案

namespace [Vendor_Name]\[Module_Name]\Block;

use Magento\Catalog\Api\ProductRepositoryInterface;

class Product extends \Magento\Framework\View\Element\Template
{
    protected $_productRepository;        

    public function __construct(
        ProductRepositoryInterface $productRepository
    ) {
        $this->_productRepository = $productRepository;
    }

    public function getProduct($id)
    {
        return $product = $this->productRepository->getById($id);
    }
}

并且,您的 .phtml 文件应如下所示:

$productId = 1;
$product = $this->getLoadProduct($productId);

echo $product->getName();

我希望,您已经知道如何在 Magento 2 中创建自定义模块,或者如果您需要,请阅读此博客 post How to create a basic module in Magento 2