Nhận giá trị của thuộc tính sản phẩm trên trang giỏ hàng thậm chí không được gán cho sản phẩm cụ thể đó Magento 2


8

Tôi nhận được thuộc tính sản phẩm từ trích dẫn. Có vẻ như có giá trị sai đến. Vui lòng kiểm tra mã dưới đây của tôi.

 $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
 $cart = $objectManager->get('\Magento\Checkout\Model\Cart');
 $itemsCollection = $cart->getQuote()->getItemsCollection();
 $itemsVisible = $cart->getQuote()->getAllVisibleItems();
 $items = $cart->getQuote()->getAllItems();

 $product_object = $objectManager->create('Magento\Catalog\Model\Product');

 foreach($itemsVisible as $item){                
      if($option = $item->getOptionByCode('simple_product')) {
           $productId = $option->getProduct()->getId();
           $item_s = $product_object->load($productId);
           echo $screen_size =   $productId."/".$item_s->getScreenFrameSize()."/".$item_s->getFiberglassScreenRollSize()."/".$item_s->getScreenCornerSize()."<br>";
      }
 }

Vui lòng kiểm tra hình ảnh dưới đây để hiểu rõ hơn. Có bất kỳ lỗi trong bộ sưu tập hoặc vòng lặp của tôi?

nhập mô tả hình ảnh ở đây

Làm ơn giúp tôi!!!


Tôi đã sử dụng chức năng hủy đặt này trước $ item_s = $ product_object-> load ($ productId);. Không may mắn!! Có bất kỳ vấn đề trong mã của tôi? tôi không biết tại sao điều này lại xảy ra !!
Sunny Rahevar

Bạn cần tạo đối tượng $objectManager->create('Magento\Catalog\Model\Product');trong vòng lặp foreach. Kiểm tra câu trả lời của tôi
Hoàng tử Patel

Câu trả lời:


3

Becuase bạn sử dụng cùng một đối tượng mỗi lần trong foreach. YOu cần tạo đối tượng mới trong vòng lặp foreach. Vì vậy, mã cuối cùng của bạn trông như thế này:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$cart = $objectManager->get('\Magento\Checkout\Model\Cart');
$itemsCollection = $cart->getQuote()->getItemsCollection();
$itemsVisible = $cart->getQuote()->getAllVisibleItems();
$items = $cart->getQuote()->getAllItems();

foreach($itemsVisible as $item){                
  if($option = $item->getOptionByCode('simple_product')) {
       $productId = $option->getProduct()->getId();
       $product_object = $objectManager->create('Magento\Catalog\Model\Product');
       $item_s = $product_object->load($productId);
       echo $screen_size =   $productId."/".$item_s->getScreenFrameSize()."/".$item_s->getFiberglassScreenRollSize()."/".$item_s->getScreenCornerSize()."<br>";
  }
}

LƯU Ý: Không sử dụng trình quản lý đối tượng trực tiếp trong mã. Sử dụng nhà máy sản xuất nhà máy becuase sẽ tạo đối tượng mới mỗi lần.


2

Hãy thử một cái gì đó như thế này

....

function productData($pro_id)
{   
       $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
       $product_object = $objectManager->create('Magento\Catalog\Model\Product');
       $item_s = $product_object->load($pro_id);
       return $item_s;
}

....

$item_s = productData($productId); //In foreach loop

Vâng, tôi đã làm theo cách tương tự như bạn đã đề cập và nó hoạt động với tôi!
Sunny Rahevar

1

Tôi đoán bạn phải tạo một đối tượng sản phẩm mới thay vì sử dụng lại nó trong vòng lặp foreach của bạn. Bằng cách sử dụng lại đối tượng sản phẩm, bạn có thể nhận được các tác dụng phụ như vậy ngay cả khi phương thức "tải" gợi ý, rằng mọi dữ liệu sẽ bị ghi đè. Kiểm tra việc sử dụng các thuộc tính tùy chỉnh trongAbstractExtensibleModel

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.