Magento 2 - Як отримати інформацію про товар


18

Я хочу використовувати такі функції, як getName()і getPrice()т.д. продукту, щоб отримати інформацію про продукт у Magento 2.

Хтось може мені показати, як я можу цього досягти?


@JJohn, це працює нижче відповідей. Якщо так прийняти, це стане в нагоді іншим користувачам. Якщо ні, не дайте мені знати, щоб ми могли надати рішення.
Боджая

Відповіді:


22

У Magento 2 запропонували використовувати для цього рівень обслуговування. Спробуйте скористатися \Magento\Catalog\Model\ProductRepository::getByIdметодом, щоб отримати продукт за ідентифікатором


1
Ви повинні використовувати \ Magento \ Каталог \ Api \ ProductRepositoryInterface :: getById.
Тіаго Ліма

не рекомендується використовувати ProductRepository в Magneto 2
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 \ Каталог \ Модель \ ProductFactory в Magento 2.1.7
shahir hajir

2
Більшість заводських класів у модулі не існує. Вони генеруються у var / generation для інстанціювання класів за допомогою диспетчера об'єктів. Ви не повинні використовувати фабрики для завантаження продуктів. Використовуйте \ Magento \ Каталог \ Api \ ProductRepositoryInterface, як пропонують інші. Або принаймні використовувати Magento \ Каталог \ Модель \ ProductRepository :: getById ($ id)
Франк

Використання ProductRepository не створює нових об'єктів, як-от використання фабрики
Raul Sanchez

10

На додаток до інших відповідей, я настійно пропоную використовувати наступні методи контрактів на послуги:

  • \Magento\Catalog\Api\ProductRepositoryInterface::getById : завантажити продукт за ідентифікатором
  • \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);
}

Правильна, найкраща і правильна відповідь
Маттіас Кляйн

є проблема Marketplace з використанням productRepository в Magento 2
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

Не корисно - просто заплутано
Маттіас Кляйн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.