Breadcrumbs Magento 2 ripristinare il percorso di categorie
Breadcrumbs Il menù a briciole di Magento 2 non comprende più il percorso completo del prodotto, ma solo il formato Home > Nomeprodotto
Breadcrumbs il menù a briciole completo del percorso delle categorie è necessario creare un modulo che preveda un blocco con tali caratteristiche.[emaillocker]
Se vogliamo riutilizzare il modulo, magari in tutti gli store della nostra installazione di Magento 2 creiamo il modulo in Vendor/Modulo, diversamente possiamo crearlo in app/code
Nell’esempio da me realizzato, il modulo è stato posizionato in app/code/Magicnet/Bcmodule
Nel file app/design/frontend/Magicnet/Tuotema/Magento_Catalog/layout/catalog_product_view.xml
aggiungiamo il codice per richiamare il blocco
<referenceContainer name="content.top"> <block name="breadcrumbs" as="breadcrumbs" /> </referenceContainer>
Creiamo il modulo in app/code/Magicnet/Bcmodule/Block/Breadcrumbs.php
<?php namespace MagicnetBcmoduleBlock; use MagentoCatalogHelperData; use MagentoFrameworkViewElementTemplateContext; use MagentoStoreModelStore; use MagentoFrameworkRegistry; class Breadcrumbs extends MagentoThemeBlockHtmlBreadcrumbs { /** * Catalog data * * @var Data */ protected $_catalogData = null; /** * @param Context $context * @param Data $catalogData * @param array $data */ public function __construct(Context $context, Data $catalogData, Registry $registry, array $data = []) { $this->_catalogData = $catalogData; $this->registry = $registry; parent::__construct($context, $data); } /** * Retrieve HTML title value separator (with space) * * @param null|string|bool|int|Store $store * @return string */ public function getTitleSeparator($store = null) { $separator = (string)$this->_scopeConfig->getValue('catalog/seo/title_separator', MagentoStoreModelScopeInterface::SCOPE_STORE, $store); return ' ' . $separator . ' '; } public function getCrumbs() { return $this->_crumbs; } /** * Preparing layout * * @return MagentoCatalogBlockBreadcrumbs */ protected function _prepareLayout() { $title = []; if ($breadcrumbsBlock = $this->getLayout()->getBlock('breadcrumbs')) { $breadcrumbsBlock->addCrumb( 'home', [ 'label' => __('Home'), 'title' => __('Go to Home Page'), 'link' => $this->_storeManager->getStore()->getBaseUrl() ] ); $path = $this->_catalogData->getBreadcrumbPath(); $product = $this->registry->registry('current_product'); if ($product && count($path) == 1) { $categoryCollection = clone $product->getCategoryCollection(); $categoryCollection->clear(); $categoryCollection->addAttributeToSort('level', $categoryCollection::SORT_ORDER_DESC)->addAttributeToFilter('path', array('like' => "1/" . $this->_storeManager->getStore()->getRootCategoryId() . "/%")); $categoryCollection->setPageSize(1); $breadcrumbCategories = $categoryCollection->getFirstItem()->getParentCategories(); foreach ($breadcrumbCategories as $category) { $catbreadcrumb = array("label" => $category->getName(), "link" => $category->getUrl()); $breadcrumbsBlock->addCrumb("category" . $category->getId(), $catbreadcrumb); $title[] = $category->getName(); } //add current product to breadcrumb $prodbreadcrumb = array("label" => $product->getName(), "link" => ""); $breadcrumbsBlock->addCrumb("product" . $product->getId(), $prodbreadcrumb); $title[] = $product->getName(); } else { foreach ($path as $name => $breadcrumb) { $breadcrumbsBlock->addCrumb($name, $breadcrumb); $title[] = $breadcrumb['label']; } } $this->pageConfig->getTitle()->set(join($this->getTitleSeparator(), array_reverse($title))); return parent::_prepareLayout(); } $path = $this->_catalogData->getBreadcrumbPath(); foreach ($path as $name => $breadcrumb) { $title[] = $breadcrumb['label']; } $this->pageConfig->getTitle()->set(join($this->getTitleSeparator(), array_reverse($title))); return parent::_prepareLayout(); } }
E successivamente il template per le nostre nuove breadcrumbs:
app/design/frontend/Magicnet/Tuotema/Magento_Catalog/templates/product/breadcrumbs.phtml
<?php if ($crumbs && is_array($crumbs)) : ?> <div> <ul> <?php foreach ($crumbs as $crumbName => $crumbInfo) : ?> <?php $label = $block->escapeHtml($crumbInfo['label']); $link = $block->escapeUrl($crumbInfo['link']); ?> <li> <?php if ($link) : ?> <a href="<?php /* @escapeNotVerified */ echo $link ?>" title="<?= $block->escapeHtml($crumbInfo['title']) ?>"> <?= $label ?> </a> <?php elseif ($crumbInfo['last']) : ?> <strong><?= $label ?></strong> <?php else: ?> <?= $label ?> <?php endif; ?> </li> <?php endforeach; ?> </ul> </div> <?php endif; ?>
[/emaillocker]
Questo il risultato del nostro lavoro:
Contatta Magicnet se hai necessità
Iscriviti alla newsletter per rimanere informato.
1stonthenet è la discarica dei miei deliri digitali.
(cit. Paolo Attivissimo)
Lascia un Commento
Vuoi partecipare alla discussione?Sentitevi liberi di contribuire!