Magento 2-製品情報を取得する方法


18

私のような機能を利用したいgetName()getPrice()Magentoの2に製品情報を取得するために、商品等のを。

誰も私にそれを達成する方法を教えてもらえますか?


@JJohn、答えの下で働いていますか?「はい」を選択すると、他のユーザーに役立ちます。私に解決策を提供できるように、私に知らせていない場合。
ボイジャー

回答:


22

Magento 2では、このためにサービスレイヤーを使用することを提案しました。\Magento\Catalog\Model\ProductRepository::getByIdメソッドを使用してIDで製品を取得してください


1
代わりに、\ Magento \ Catalog \ Api \ ProductRepositoryInterface :: getByIdを使用する必要があります。
チアゴ・リマ

Magneto 2でProductRepositoryを使用することはお勧めしません
Waqar Ali

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の2.1.7にはクラス\ Magentoの\カタログ\モデル\ ProductFactoryありません
シャヒアhajir

2
ほとんどのファクトリクラスはモジュールに存在しません。オブジェクトマネージャを使用してクラスをインスタンス化するために、var / generationで生成されます。とにかく製品をロードするために工場を使用しないでください。他の人が提案する\ Magento \ Catalog \ Api \ ProductRepositoryInterfaceを使用します。または、少なくともMagento \ Catalog \ 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

これを実現するMagentoのより多くの方法は、コアコード全体のほとんどの場所で異なる方法で行われているためわかりにくいですが、製品リポジトリを使用することです。

use Magento\Catalog\Model\ProductRepository;

protected $productRepository;

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

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

正解、最良の正解
マティアスクレーネ

Magento 2でproductRepositoryを使用すると、マーケットプレイスの問題が発生します
Waqar Ali

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

役に立たない-ただ紛らわしい
マティアスクライン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.