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 中,推荐的加载产品的方法是在适当的自定义模块中使用 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 中创建自定义模块,或者如果您需要,请阅读此博客 post How to create a basic module in Magento 2
我有一个站点 运行 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 中,推荐的加载产品的方法是在适当的自定义模块中使用 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 中创建自定义模块,或者如果您需要,请阅读此博客 post How to create a basic module in Magento 2