首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Magento2 -菜鸟选择产品

Magento2 -菜鸟选择产品
EN

Stack Overflow用户
提问于 2018-06-07 20:01:00
回答 2查看 812关注 0票数 0

我有一个网站运行Magento2.2.1。我需要创建一个非常简单的PHP页面来查找给定的产品。我想查找基于SKU的产品,只需打印价格和产品URL。

我都不知道该怎么开始。我试着用它来测试用ID =1加载产品

代码语言:javascript
复制
//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?或者指给我一些有用的文档的方向?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-13 08:48:10

使用ObjectManager以编程方式在简单的PHP文件中加载产品的解决方案,但Magento2不推荐此解决方案。

代码语言:javascript
复制
<?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 解决方案

代码语言:javascript
复制
<?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 解决方案

代码语言:javascript
复制
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文件应该如下所示:

代码语言:javascript
复制
$productId = 1;
$product = $this->getLoadProduct($productId);

echo $product->getName();

我希望,您已经知道如何在Magento 2中创建自定义模块,或者如果您愿意的话,只需阅读这篇博文如何在Magento 2中创建基本模块

票数 1
EN

Stack Overflow用户

发布于 2018-07-13 07:15:04

您只需在magento中按简单的PHP文件加载页面,步骤1)在主题中创建布局文件,2)在layout.xml中注册它,3)将phtml添加到布局文件中,4)在phtml文件中添加代码(在您的问题中)

第二种方法是相当复杂的创建模块,在模块控制器中呈现您的代码。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50749345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档