如果管理员在产品级别输入其自己的属性,我将尝试覆盖产品页面上的规范标签。我创建了一个模块,扩展了块类Magento\Catalog\Block\Product\View
:
<?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\Catalog\Block\Product\View" type="Chris\Canonical\Block\Product\View" />
</config>
我想覆盖方法_prepareLayout
protected function _prepareLayout()
{
...
if ($this->_productHelper->canUseCanonicalTag()) {
$productUrl = $this->getCanonicalOverride($product);
$this->pageConfig->addRemotePageAsset(
$productUrl,
'canonical',
['attributes' => ['rel' => 'canonical']]
);
}
$pageMainTitle = $this->getLayout()->getBlock('page.main.title');
if ($pageMainTitle) {
$pageMainTitle->setPageTitle($product->getName());
}
// return parent::_prepareLayout(); # commented the original line to try and stop parent being called
}
理想情况下,我会使用插件拦截器,但是由于受到了保护,因此我别无选择,只能覆盖。
所以这没问题,但是父方法和我的方法一样被调用。结果,我在页面上有2个规范标签。我以为覆盖类实际上会覆盖方法...
如何停止调用父方法?我想念什么?