Magento 2 - Как получить информацию о продукте


18

Я хочу использовать такие функции , как getName(), getPrice()и т.д. продукт для получения информации о продукте в Magento 2.

Может кто-нибудь показать мне, как я могу этого достичь?


@JJohn, это работает ниже ответов. Если да, примите это будет полезно для других пользователей. Если нет, дайте мне знать, чтобы мы могли предоставить решение.
Божжаия

Ответы:


22

В Magento 2 предложено использовать сервисный слой для этого. Попробуйте использовать \Magento\Catalog\Model\ProductRepository::getByIdметод, чтобы получить продукт по идентификатору


1
Вы должны использовать \ Magento \ Catalogue \ Api \ ProductRepositoryInterface :: getById.
Тьяго Лима

Не рекомендуется использовать ProductRepository в Magneto 2
Вакар Али

12

Magento 2 рекомендует использовать Factoriesдля загрузки всех моделей. Вот как вы должны это сделать:

  1. Над своим классом добавьте эту строку:

    use Magento\Catalog\Model\ProductFactory;
  2. Теперь создайте свойство класса:

    protected $productFactory;
  3. В вашем конструкторе добавьте зависимость:

    public function __construct(
       ProductFactory $productFactory
    ) {
       $this->productFactory = $productFactory;
    }
  4. Теперь загрузите продукт, как показано ниже:

    $_product = $this->productFactory->create()->load(<product_id>);

нет класса \ Magento \ Каталог \ Модель \ ProductFactory в Magento 2.1.7
Шахир Хаджир,

2
Большинство фабричных классов не существует в модуле. Они генерируются в var / generation для создания экземпляров классов с помощью менеджера объектов. Вы не должны использовать фабрики для загрузки продуктов в любом случае. Используйте \ Magento \ Catalogue \ Api \ ProductRepositoryInterface, как предложено другими. Или, по крайней мере, используйте Magento \ Catalogue \ Model \ ProductRepository :: getById ($ id)
Франк

Использование ProductRepository не создает новые объекты, как, например, использование фабрики
Рауль Санчес

10

Помимо других ответов, я настоятельно рекомендую использовать следующие методы контрактов на обслуживание:

  • \Magento\Catalog\Api\ProductRepositoryInterface::getById : загрузить товар по id
  • \Magento\Catalog\Api\ProductRepositoryInterface::get : загрузить товар по sku

1
Это правильный ответ, он следует директиве magento devdocs.magento.com/guides/v2.1/extension-dev-guide/…
LucScu

6

Более магенто-способ достижения этого, хотя трудно сказать, так как большинство мест в основном коде делают это по-разному, это использовать репозиторий продукта.

use Magento\Catalog\Model\ProductRepository;

protected $productRepository;

public function __construct(
   ProductRepository $productRepository
) {
   $this->productRepository = $productRepository;
}

public function getMyProduct($productId)
{
    return $this->productRepository->getById($productId);
}

Правильный, лучший и правильный ответ
Матиас Кляйн

есть проблема Marketplace с использованием productRepository в Magento 2
Вакар Али

0

для этого вы должны использовать ниже

использование \Magento\Catalog\Model\Resource\Product\CollectionFactory

$prod_id = "Your product id goes here";
$om         =   \Magento\Framework\App\ObjectManager::getInstance();
$pdata =   $om->create('Magento\Catalog\Model\Product')->load($prod_id);

-1

Я получил информацию о продукте, используя функцию на странице просмотра продукта, как показано ниже.

Вот Sm / Sawyer моя тема.

$_config = $this->helper('Sm\Sawyer\Helper\Data');
$productId = $this->getProduct()->getId();
$name = $this->getProduct()->getName();
$stock1 = $this->getProduct()->getQty();
$price = $this->getProduct()->getPrice();

очень плохой ответ
LucScu

Не полезно - просто сбивает с толку
Матиас Кляйн
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.