Display of “Not visible individually” for a simple product in mini cart in Magento 2
Question
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.
Solution
You 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.
OTHER TIPS
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());
}
}
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange