How to fix the «Call to a member function getData() on null» error in Smartwave Porto after upgrading Magento to 2.3.1?

In Magento 2.3.1 the product.info.details block has changed its class from Magento\Catalog\Block\Product\View\Description to Magento\Catalog\Block\Product\View\Details.

Magento 2.3.0

Magento 2.3.1

The Magento\Catalog\Block\Product\View\Description class has the getProduct() method:

The Magento\Catalog\Block\Product\View\Details class does not have such method.
So any third-party design theme which calls the getProduct() method in the product.info.details block’s template will fail.

How to fix

In the Smartwave Porto’s case you need to patch the file app/design/frontend/Smartwave/porto_child/Magento_Catalog/templates/product/view/details.phtml

Step 1

Replace the line:

$_product = $block->getProduct();

with the following code block:

$_product = \Magento\Framework\App\ObjectManager::getInstance()
	->get(\Magento\Framework\Registry::class)->registry('product');

Step 2

Then replace each $block->getProduct() expression with $_product.

1 Like

Wow. Thanks! You saved my time.

Seems I’ve run into this as well, but on Mag 2.3.3 and the latest Porto theme. I’ve patched details.phtml, the page renders however javascript hangs. Note I’m using the child_theme which I believe to be the issue.

$block->getProduct()
grep -R '$block->getProduct()' ../../../../../../ * 
../../../../../../Smartwave/porto/Smartwave_Dailydeals/templates/product/view/addtocart.phtml:<?php $_product = $block->getProduct(); ?>
../../../../../../Smartwave/porto/Magento_Checkout/templates/cart/item/configure/updatecart.phtml:<?php $_product = $block->getProduct(); ?>
../../../../../../Smartwave/porto/WeltPixel_Quickview/templates/product/view/gallery.phtml:$_product = $block->getProduct();
../../../../../../Smartwave/porto/Magento_Catalog/templates/product/view/details.phtml:    /*    $_product = $block->getProduct(); */
../../../../../../Smartwave/porto/Magento_Catalog/templates/product/view/prev_next.phtml:        $_product = $block->getProduct();
../../../../../../Smartwave/porto/Magento_Catalog/templates/product/view/addtocart.phtml:<?php $_product = $block->getProduct(); ?>
../../../../../../Smartwave/porto/Magento_Catalog/templates/product/view/gallery.phtml:$_product = $block->getProduct();
../../../../../../Smartwave/porto/Magento_Catalog/templates/product/view/type/default.phtml:<?php $_product = $block->getProduct() ?>
../../../../../../Smartwave/porto/Magento_Catalog/templates/product/view/product_custom.phtml:    $_product = $block->getProduct();
../../../../../../Smartwave/porto/Magento_GroupedProduct/templates/product/view/type/grouped.phtml:<?php $_product = $block->getProduct(); ?>
addtocart.phtml:<?php $_product = $block->getProduct(); ?>
details.phtml:    /*    $_product = $block->getProduct(); */
gallery.phtml:$_product = $block->getProduct();
prev_next.phtml:        $_product = $block->getProduct();
product_custom.phtml:    $_product = $block->getProduct();
type/default.phtml:<?php $_product = $block->getProduct() ?>