【问题标题】:Magento2 - Newbie Select productMagento2 - 新手选择产品
【发布时间】:2018-06-07 20:01:00
【问题描述】:

我有一个运行 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 magento2 magento2.2


    【解决方案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)

    在 Magento 2 中,推荐的加载产品的方法是在适当的自定义模块中使用 ProductRepositoryProductFactory 而不是简单的 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

    【讨论】:

      【解决方案2】:

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

      第二种方式相当复杂 创建模块并在模块控制器中渲染您的代码

      猜你喜欢
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 1970-01-01
      相关资源
      最近更新 更多