Magento 2 - Cách lấy thông tin sản phẩm


18

Tôi muốn sử dụng các chức năng như getName(), getPrice()v.v. của sản phẩm để lấy thông tin sản phẩm trong Magento 2.

Bất cứ ai có thể chỉ cho tôi làm thế nào tôi có thể đạt được điều đó?


@JJohn, nó hoạt động dưới câu trả lời. Nếu có, nó sẽ hữu ích cho những người dùng khác. Nếu không cho tôi biết, để chúng tôi có thể cung cấp giải pháp.
Bojjaiah

Câu trả lời:


22

Trong Magento 2 đề xuất sử dụng lớp dịch vụ cho việc này. Hãy thử sử dụng \Magento\Catalog\Model\ProductRepository::getByIdphương pháp để lấy sản phẩm theo id


1
Bạn nên sử dụng \ Magento \ Catalog \ Api \ ProductRep repositoryInterface :: getById để thay thế.
Thiago Lima

không nên sử dụng ProductRep repository trong Magneto 2
Waqar Ali

12

Magento 2 khuyên bạn nên sử dụng Factoriesđể tải tất cả các Model. Đây là cách bạn nên làm:

  1. Trên lớp của bạn thêm dòng này:

    use Magento\Catalog\Model\ProductFactory;
  2. Bây giờ tạo thuộc tính lớp:

    protected $productFactory;
  3. Trong hàm tạo của bạn, thêm phụ thuộc:

    public function __construct(
       ProductFactory $productFactory
    ) {
       $this->productFactory = $productFactory;
    }
  4. Bây giờ tải sản phẩm như dưới đây:

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

không có lớp \ Magento \ Catalog \ Model \ ProductFactory trong Magento 2.1.7
shahir hajir

2
Hầu hết các lớp nhà máy không tồn tại trong mô-đun. Chúng được tạo trong var / Generation để khởi tạo các lớp bằng trình quản lý đối tượng. Bạn không nên sử dụng các nhà máy để tải sản phẩm nào. Sử dụng \ Magento \ Catalog \ Api \ ProductRep repositoryInterface theo đề xuất của người khác. Hoặc ít nhất hãy sử dụng Magento \ Catalog \ Model \ ProductRep repository :: getById ($ id)
Frank

Sử dụng ProductRep repository không tạo ra các đối tượng mới, chẳng hạn như sử dụng một nhà máy
Raul Sanchez

10

Ngoài các câu trả lời khác, tôi khuyên bạn nên sử dụng các phương pháp hợp đồng dịch vụ sau:

  • \Magento\Catalog\Api\ProductRepositoryInterface::getById : để tải sản phẩm theo id
  • \Magento\Catalog\Api\ProductRepositoryInterface::get : để tải sản phẩm bằng sku

1
Đây là câu trả lời đúng, nó tuân theo chỉ thị magento devdocs.magento.com/guides/v2.1/extension-dev-guide/ Kẻ
LucScu

6

Cách Magento hơn để đạt được điều này, mặc dù thật khó để nói vì hầu hết các vị trí trong toàn bộ mã lõi đều làm khác đi là sử dụng kho lưu trữ sản phẩm.

use Magento\Catalog\Model\ProductRepository;

protected $productRepository;

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

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

Câu trả lời đúng, tốt nhất và đúng
Matthias Kleine

có vấn đề về Thị trường với việc sử dụng sản phẩm Lưu trữ trong Magento 2
Waqar Ali

0

Đối với điều này, bạn phải sử dụng dưới đây

sử dụng \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

Tôi đã tìm nạp chi tiết sản phẩm bằng cách sử dụng chức năng trong trang xem sản phẩm như bên dưới.

Ở đây Sm / Sawyer là chủ đề của tôi.

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

câu trả lời rất tệ
LucScu

Không hữu ích - chỉ khó hiểu
Matthias Kleine
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.