gpt4 book ai didi

twig - 从插件中覆盖 Twig 模板

转载 作者:行者123 更新时间:2023-12-05 05:53:25 26 4
gpt4 key购买 nike

我想在我自己的插件中覆盖来自插件的 Twig 模板的 block 。我过去曾覆盖过 native 商店软件模板,但我在使用插件模板时遇到了麻烦。

我正在尝试调整的插件是 FroshProductCompare,我还使用 FroshDevelopmentHelper 轻松检索我正在尝试调整的模板。

通过开发助手,我发现模板位于

vendor/store.shopware.com/froshproductcompare/src/Resources/views/storefront/component/compare/section/overview.html.twig

所以我创建了这个文件

custom/plugins/ExamplePlugin/Resources/views/storefront/component/compare/section/overview.html.twig

并添加

{% sw_extends "@FroshProductCompare/storefront/component/compare/section/overview.html.twig" %}

到文件的第一行。

我也试过

{% sw_extends "@Storefront/storefront/component/compare/section/overview.html.twig" %}

我已经多次构建店面并清除缓存,并且我还按不同的顺序重新安装了插件,但都没有成功。

我发现了类似的问题,不一样。例如。 How to do a template multiple inheritance in Shopware 6?但这里的区别在于,该 block 不是 shopware 原生的,而是由插件创建的。

有什么想法吗?

最佳答案

问题很可能是由于插件加载顺序造成的。

tl;dr:较旧的插件(基于安装日期)优先于较新的插件。但是,如果您想确保您的插件优先,请在您的主题中定义加载顺序。

首先在 \Shopware\Core\Framework\Adapter\Twig\TemplateFinder::find 中找到正确的模板,您可以看到队列是基于 \Shopware\Core\Framework 构建的\Adapter\Twig\TemplateFinder::getNamespaceHierarchy 依次从 \Shopware\Core\Framework\Adapter\Twig\NamespaceHierarchy\NamespaceHierarchyBuilder 获取它。返回第一个找到的模板的方法是关键。

NamespaceHierarchyBuilder 带有 shopware.twig.hierarchy_builder 标记,用于注入(inject)以下构建器:

  • Shopware\Core\Framework\Adapter\Twig\NamespaceHierarchy\BundleHierarchyBuilder 优先级为 1000
  • Shopware\Storefront\Theme\Twig\ThemeNamespaceHierarchyBuilder 优先级为 500

因为你想用一个插件 BundleHierarchyBuilder 覆盖一个插件的模板(所有插件都是简单的 symfony 包)。

BundleHierarchyBuilder 正在从内核 (\Shopware\Core\Kernel) 获取 bundle 。内核在 \Shopware\Core\Kernel::registerBundles 中注册 bundle ,并使用 \Shopware\Core\Framework\Plugin\KernelPluginLoader\KernelPluginLoader 的实例来加载插件.使用的实例是 \Shopware\Core\Framework\Plugin\KernelPluginLoader\DbalKernelPluginLoader,如您在 \Shopware\Core\HttpKernel::createPluginLoader 中所见。

this answer 中所述DbalKernelPluginLoader 根据安装日期加载插件。因此,安装日期较早的插件将在 TemplateFinder 的列表中靠前,并且它们的模板将被返回。

我实际上会推荐你this solution : 在您自己的主题中定义加载顺序。

关于twig - 从插件中覆盖 Twig 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69902189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com