我有一个运行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查找单个产品吗?或者指点一些有用的文档?
答案 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中,建议的加载产品的方法是在适当的自定义模块中使用ProductRepository
和ProductFactory
而不是简单的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文件中添加代码(在您的问题中)
第二种方法相当复杂 创建模块并在模块控制器中呈现代码