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>);
Arvind07
источник
нет класса \ 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);
Rushvi
источник
-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
Не полезно - просто сбивает с толку
Матиас Кляйн