Magento2 - Newbie Выберите продукт - PullRequest
0 голосов
/ 07 июня 2018

У меня есть сайт под управлением Magento 2.2.1.Мне нужно создать очень простую страницу PHP, которая будет искать данный продукт.Я хочу посмотреть продукт на основе SKU и просто распечатать цену и URL продукта.

Я понятия не имею, как вообще начать это.Я пытался использовать это для проверки загрузки продукта с идентификатором = 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?Или укажете мне какую-нибудь полезную документацию?

Ответы [ 2 ]

0 голосов
/ 13 июля 2018

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

0 голосов
/ 13 июля 2018

Вы не можете просто загрузить страницу простым PHP-файлом в magento. Вот процедура 1) создать файл макета в вашей теме 2) зарегистрировать его в layout.xml 3) добавить phtml в файл макета 4) добавить код (в твоем вопросе) в этом phtml файле

2-й способ вполне укомплектован, создай модуль и в контроллере модуля выдай свой код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...