代码之家  ›  专栏  ›  技术社区  ›  Phil

Magento2-新手精选产品

  •  0
  • Phil  · 技术社区  · 6 年前

    我有一个运行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的exeception。所以我试着把 /app/bootstrap.php 文件,这会引发一个错误,即objectmanager未初始化。

    有谁能给我提供一个简单的例子,我可以进入我的网站的根,将允许我查找一个单一的产品的SKU?或者告诉我一些有用的文档的方向?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Adeel Kirti Nariya    6 年前

    使用 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中,建议使用 ProductRepository ProductFactory 在一个合适的自定义模块而不是简单的php文件中。好吧,通过使用下面(推荐)的代码,您可以在自定义块中加载产品。

    产品工厂 解决方案

    <?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中

    产品存储库 解决方案

    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
  •  -1
  •   Maverik    6 年前

    在magento中不能只通过简单的php文件加载页面 1)在主题中创建布局文件 2)在layout.xml中注册 3)将phtml添加到布局文件中 4)在phtml文件中添加您的代码(在您的问题中)

    第二条路很复杂 创建模块并在模块控制器中呈现代码