Решение для программной загрузки продукта в простом 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 рекомендуемый способ загрузки продукта - использование 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);
}
}
In 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