Magento2 - 新手选择产品

时间:2018-06-07 20:01:00

标签: php magento magento2 magento2.2

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

我不知道如何开始这个。我尝试使用它来测试加载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查找单个产品吗?或者指点一些有用的文档?

2 个答案:

答案 0 :(得分:1)

使用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中创建自定义模块,或者如果您愿意的话,只需阅读此博客文章How to create a basic module in Magento 2

答案 1 :(得分:-1)

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

第二种方法相当复杂 创建模块并在模块控制器中呈现代码