0

我有一个运行 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 查找单个产品?或者指出一些有用的文档的方向?

4

2 回答 2

1

使用 以编程方式在简单的 PHP 文件中加载产品的解决方案ObjectManager,但 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 中,推荐的加载产品的方法是使用适当的自定义模块而不是简单的 PHP 文件ProductRepositoryProductFactory好吧,通过使用以下(推荐)代码,您可以在自定义块中加载产品。

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-13T08:48:10.427 回答
-1

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

第二种方法是非常复杂的创建模块并在模块控制器中呈现您的代码

于 2018-07-13T07:15:04.917 回答