Magento 2.2 - 将属性名称附加到产品名称(H1)

时间:2018-05-18 03:25:30

标签: magento2 magento2.2

这让我疯了,我创建了一个带帮助器的模块:

    namespace MyNamespace\MyModule\Helper;

    class Data extends \Magento\Framework\App\Helper\AbstractHelper
    {
        protected $registry;

        public function __construct
        (
            \Magento\Framework\Registry $registry,
        \Magento\Eav\Api\AttributeSetRepositoryInterface $attributeSet
        ) {
            $this->registry = $registry;
        $this->attributeSet = $attributeSet;
        }

        public function getTitle()
        {
            $this->product = $this->registry->registry('product');
        $product_name = $this->product->getName();
            $attributeSetRepository = $this->attributeSet->get($this->product->getAttributeSetId());
        if ($attributeSetRepository->getAttributeSetName() == "Default Engine Component"){
        $engine = $this->product->getAttributeText('engine_select');
        if (!is_array($engine)){
            return "$engine $product_name";
        }
        }
            return $product_name;
        }
    } 

......这样可以正常工作。然后我将以下内容添加到:

  

/app/design/frontend/vendor/theme/Magento_Catalog/layout/catalog_product_view.xml

<referenceBlock name="page.main.title">
    <action method="setPageTitle">
        <argument name="title" xsi:type="helper" helper="MyNamespace\MyModule\Helper\Data::getTitle"></argument>
    </action>
</referenceBlock>

...但它在产品页面上没有任何变化。我知道它被调用,因为我可以回应变量,它们显示在页面顶部,但似乎XML没有按照我希望的那样做。

有人有任何想法吗?

1 个答案:

答案 0 :(得分:1)

所以,尝试了实现我想要的多种变体,但最后,我在Magento_Catalog/templates/product(在我的主题中)创建了一个模板,该模板基于magento-theme title.phtml,然后修改了{{ 1}}阻止page.main.title布局文件。

模板代码可能看起来有点奇怪(catalog_product_view然后getAttribute)但是getAttributeTextgetAttributeText没有错误处理,如果是属性有多个值,它以字符串形式返回,而不是像getAttribute这样的数组。如果我可以通过检查正在使用哪个属性集来确保值始终存在,但是虽然getAttributeText是产品模型的一部分,但它在{{1}中不可用拦截器和tbh,我已经放弃了试图弄清楚它是如何工作的!

无论如何,这需要花费的时间远远超过我承认要弄明白的代码,希望它可以帮助某人!

模板:

getAttributeSetId

布局:

product/view