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 đó?
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 đó?
Câu trả lời:
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::getById
phương pháp để lấy sản phẩm theo id
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:
Trên lớp của bạn thêm dòng này:
use Magento\Catalog\Model\ProductFactory;
Bây giờ tạo thuộc tính lớp:
protected $productFactory;
Trong hàm tạo của bạn, thêm phụ thuộc:
public function __construct(
ProductFactory $productFactory
) {
$this->productFactory = $productFactory;
}
Bây giờ tải sản phẩm như dưới đây:
$_product = $this->productFactory->create()->load(<product_id>);
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 skuCá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);
}
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();