I am using the getCategories()
function below:
use Magento\Catalog\Block\Product\AbstractProduct; use Magento\Catalog\Block\Product\Context; class Categories extends AbstractProduct { private $logger; public function __construct(Context $context, \Psr\Log\LoggerInterface $logger, array $data = []) { $this->logger = $logger; parent::__construct($context, $data); } public function getCategories() { $product = $this->getProduct(); $cats = $product->getCategoryCollection() ->addAttributeToSelect("name") ->addIsActiveFilter(); return $cats; } }
The layout file catalog_product_view.xml
:
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="product.info.main">
<block class="Company\ProductCategories\Block\Product\View\Categories"
name="product.view.categories"
template="Company_ProductCategories::product/view/categories.phtml"
before="product.social.links">
</block>
</referenceContainer>
</body>
</page>
And the template file categories.phtml
:
<?php
/** @var \Magento\Catalog\Model\Category $categories */
$categories = $this->getCategories();
?>
<?php if ($categories->getSize() > 0): ?>
<div id="product.view.categories">
<p>Categories:
<?php foreach($categories as $category): ?>
<a href="<?php echo $category->getUrl() ?>"><?php echo $category->getName() ?></a>
<?php endforeach; ?>
</p>
</div>
<?php endif; ?>
So this returns the category names when going to a product from a category page.
However when I go to a product view from the front page through a new or latest products block, it does not add the category names to the results. It also doesn't add the proper path of breadcrumbs.
Just a bit more info the url when navigating from the catalog page:
http://shop.dev/ammunition/airgun/exact-airgun-pellets-44gr-500.html
Where ammunition
and airgun
are the categories.
when going from the home page the url is just:
http://shop.dev/exact-airgun-pellets-44gr-500.html
I tested this on a standard magento install and whether going to the page from a catalog page or the home page the url is the same: http://magento2.dev/index.php/hero-hoodie.html
and the categories show.
Why is that on this porto theme, there is an issue?
abstractProduct