我有一个网站运行Magento2.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?或者指给我一些有用的文档的方向?
发布于 2018-07-13 08:48:10
使用ObjectManager以编程方式在简单的PHP文件中加载产品的解决方案,但Magento2不推荐此解决方案。
<?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中,推荐的加载产品的方法是在适当的自定义模块中使用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中创建自定义模块,或者如果您愿意的话,只需阅读这篇博文如何在Magento 2中创建基本模块。
发布于 2018-07-13 07:15:04
您只需在magento中按简单的PHP文件加载页面,步骤1)在主题中创建布局文件,2)在layout.xml中注册它,3)将phtml添加到布局文件中,4)在phtml文件中添加代码(在您的问题中)
第二种方法是相当复杂的创建模块,在模块控制器中呈现您的代码。
https://stackoverflow.com/questions/50749345
复制相似问题