I want to display not visible individually
simple products in the mini cart section.
This product displays inside the cart page, but it doesn't display inside the top minicart section.
Magento Stack Exchange is a question and answer site for users of the Magento e-Commerce platform. It only takes a minute to sign up.
Sign up to join this communityYou need to override
magento2\vendor\magento\module-checkout\CustomerData\Cart.php
Find getRecentItems() function replace
if (!isset($products[$productId])) {
continue;
}
with
if (!isset($products[$productId])) {
$items[] = $this->itemPoolInterface->getItemData($item);
continue;
}
Please let me know above code not work.
You can override customerdata using file di.xml:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Checkout\CustomerData\Cart"
type="Namespace\Module\CustomerData\Cart" />
</config>
You can override the function inside the Namespace\Module\CustomerData\Cart.php
file. Just create the file Cart.php
inside the Namespace\Module\CustomerData
folder.
namespace My\Module\CustomerData;
use Magento\Customer\CustomerData\SectionSourceInterface;
/**
* Cart source
*/
class Cart extends \Magento\Checkout\CustomerData\Cart
{
/**
* {@inheritdoc}
*/
public function getSectionData()
{
$totals = $this->getQuote()->getTotals();
return [
'summary_count' => $this->getSummaryCount(),
'subtotal' => isset($totals['subtotal'])
? $this->checkoutHelper->formatPrice($totals['subtotal']->getValue())
: 0,
'possible_onepage_checkout' => $this->isPossibleOnepageCheckout(),
'items' => $this->getRecentItems(),
'extra_actions' => $this->layout->createBlock('Magento\Catalog\Block\ShortcutButtons')->toHtml(),
'isGuestCheckoutAllowed' => $this->isGuestCheckoutAllowed(),
];
}
/**
* Get active quote
*
* @return \Magento\Quote\Model\Quote
*/
protected function getQuote()
{
if (null === $this->quote) {
$this->quote = $this->checkoutSession->getQuote();
}
return $this->quote;
}
/**
* Get shopping cart items qty based on configuration (summary qty or items qty)
*
* @return int|float
*/
protected function getSummaryCount()
{
if (!$this->summeryCount) {
$this->summeryCount = $this->checkoutCart->getSummaryQty() ?: 0;
}
return $this->summeryCount;
}
/**
* Check if one page checkout is available
*
* @return bool
*/
protected function isPossibleOnepageCheckout()
{
return $this->checkoutHelper->canOnepageCheckout() && !$this->getQuote()->getHasError();
}
/**
* Get array of last added items
*
* @return \Magento\Quote\Model\Quote\Item[]
*/
protected function getRecentItems()
{
$items = [];
if (!$this->getSummaryCount()) {
return $items;
}
foreach (array_reverse($this->getAllQuoteItems()) as $item) {
/* if (!$item->getProduct()->isVisibleInSiteVisibility()) {
$productId = $item->getProduct()->getId();
$products = $this->catalogUrl->getRewriteByProductStore([$productId => $item->getStoreId()]);
if (!isset($products[$productId])) {
continue;
}
$urlDataObject = new \Magento\Framework\DataObject($products[$productId]);
$item->getProduct()->setUrlDataObject($urlDataObject);
}*/
$items[] = $this->itemPoolInterface->getItemData($item);
}
return $items;
}
/**
* Return customer quote items
*
* @return \Magento\Quote\Model\Quote\Item[]
*/
protected function getAllQuoteItems()
{
if ($this->getCustomQuote()) {
return $this->getCustomQuote()->getAllItems();
}
return $this->getQuote()->getAllVisibleItems();
}
/**
* Check if guest checkout is allowed
*
* @return bool
*/
public function isGuestCheckoutAllowed()
{
return $this->checkoutHelper->isAllowedGuestCheckout($this->checkoutSession->getQuote());
}
}