阅读时间:6 分钟 (1117 字)

模板覆盖 - 循环利用

May-recycle

对于我来说,模板覆盖是 Joomla! 中最强大的功能。我经常使用它们,它们是使网站从外观良好到出色的关键。它们可以简单到只是将简介图片移动到文章标题上方,也可以更复杂,包括 CSS 和 JavaScript 变更,例如从文章类别创建相册或创建一组按钮来过滤内容。

问题不多

我如何重用模板覆盖?

如果一个覆盖对于我上个月创建的网站足够好,那么它可能对我目前正在建设的新的网站也很有用。深入文件系统来复制文件、找到任何 CSS 更改并复制它们,然后在新的网站上反向执行这个过程并不是一个生产性、高效或可靠的方法。这可能适合一个网站,但你真的希望每次都这样做吗?你还可以找到一些网站和博客,它们分享了模板覆盖,但使用它们的说明可能相当复杂和令人畏惧。

我如何为相同的视图拥有多个模板覆盖?

如果我已经有了一个博客类别的覆盖,那么添加相同视图的额外覆盖就更加复杂。有时这可以通过简单地重命名布局来实现,但不是每个组件都允许你选择替代布局。(有一些技巧可以解决这个问题,但这只是增加了另一层复杂性)。重命名布局也会切断它与原始组件之间的联系——因此,如果你在更新时错过了原始组件的任何更改通知,你可能会错过错误修复、新功能和甚至安全修复。

问题解决

我还是如此天真,以至于相信在一个理想的世界里——一个钱长在树上、卷心菜尝起来像巧克力的世界。或者也许这并不是天真,而是自信,因为开源软件你可以始终创建一个解决方案来解决你的问题或找到某人或某物来帮助你。

识别问题?

我真正想要的是一种方法,可以让我的模板覆盖

  • 在任何网站上轻松安装
  • 可以创建多个相同布局的重写
  • 易于分享
  • 易于更新

寻找解决方案

我已经思考了这个问题一段时间,但我始终找不到解决所有这些问题的方案。我有一些短期可能有效的方法,但它们永远不会成为可靠的长远解决方案,然后我有了自己的顿悟时刻。虽然不像阿基米德那样,我没有从浴缸里跳出来,跑下街大喊,但仍然足够好,可以分享。

运用你所知

子模板

如果你还没有听说过它们(它们是 Joomla 4 中的新功能):子模板就像它的名字所暗示的那样。子模板就像任何其他模板一样,但它只包含与父模板不同的文件。当你创建一个子模板并向其中添加重写时,当你使用该模板时,你可以访问重写,其他一切都会从父模板继承。

我没有看到子模板的优势

我必须承认,直到现在,我并没有真正看到子模板的全部优势,因为我仍然以每个网站一个模板的思维模式思考。你可以创建任意数量的子模板,你可以在同一个网站上使用多个模板,只需将它们分配给菜单项即可。这样,我可以创建一个名为“画廊”的子模板,使用我的博客类别重写,并创建一个名为“Filtertags”的子模板,也是一个博客类别重写,通过将正确的模板分配给相应的菜单项,它们之间不会产生冲突。

改变我的构建过程

自从我的顿悟时刻以来,我现在为每个重写创建一个自己的子模板,给它一个合适的名称,并将其分配给相关的菜单项。子模板只包含为重写更改的文件和代码。由于包括 CSS 和 JavaScript 在内的其他一切都是从父模板继承的,所以如果我在父模板中更改字体家族或颜色方案,每个子模板也将使用这些更改。

完成循环

目前还没有导出子模板以便将其导入新站点的功能。希望有人会阅读这篇文章,并创建一个拉取请求,所以目前这是一个手动过程,但你需要做一次,然后你就可以在任何站点上安装子模板了。

创建可安装的子模板

步骤 1 - 创建最小结构

由于我们将从父模板继承一切,所以这可以保持绝对的最小化。我已经创建了一个示例空白子模板,您可以下载并自定义。

步骤 2 - TemplateDetails.xml

使用我的示例文件,将 BTXXXXX 替换为您的子模板名称,并根据需要更新其他值。您会在我的示例中看到,我把我自己的首字母添加到子模板名称中,以避免与其他子模板发生任何可能的冲突。

步骤 3 - 添加文件

将您创建的文件复制到相应的文件夹中。语言文件是可选的,但它们应该被编辑并重命名,同样还有两个预览图像。

步骤 4 - 空文件夹

我的示例在每个文件夹中包括一个空的 index.html 文件。这是必需的,因为 Joomla 在安装期间不会创建空文件夹,虽然你现在可能不需要这些文件夹,但将来你会感谢我的。

步骤 5 - 压缩打包

现在只需创建一个包含所有内容的压缩文件,并测试是否有错误,并确保它可以在您的测试站点上安装。

步骤 6 - 在新站点上安装

完成了。现在您可以在任何新站点上安全安装。

步骤 7 - 必要的最终步骤

奇怪为什么你以前从来没有想过这个,现在赶紧创建一个所有最喜欢的覆盖模板的安装包,并与世界分享。

下载

- 压缩文件

- GitHub 奖励

除了示例空白子模板,我还分享了一些自己的可安装子模板。由于它们各自使用不同的功能和功能,因此可以作为你的示例。

在 Joomla 社区杂志上发布的某些文章代表作者对特定主题的个人观点或经验,可能不符合 Joomla 项目官方立场。

1
Joomla 5 即将到来,所有内容都...
如何成为一名 Joomla 扩展开发者
 

评论 4

已经注册? 在此登录
Semaphore 在 2023 年 5 月 23 日星期二 15:41
我们需要一种在社区中分享覆盖的方式

我一直想为什么我们不能在 JED 上分享覆盖。我们为最新文章模块创建了一个滑动覆盖,Joomla! 后台有选项创建一个可共享的包,并具有文件树以选择要包含的文件。
当然,这会有很多问题,但我看到很多潜力。
至少如果我们能在 JED 上的覆盖部分提供覆盖,那么对于经验丰富的用户,将会有一个链接到覆盖帮助页面。

0
我一直想为什么我们不能在 JED 上分享覆盖。我们为最新文章模块创建了一个滑动覆盖,Joomla! 后台有选项创建一个可共享的包,并具有文件树以选择要包含的文件。当然,这会有很多问题,但我看到很多潜力。至少如果我们能在 JED 上的覆盖部分提供覆盖,那么对于经验丰富的用户,将会有一个链接到覆盖帮助页面。
Serge Billon 在 2023年6月6日星期二 05:33
链接到github

感谢这篇文章
但是没有链接到github的bonus吗?

0
感谢这篇文章,但没有链接到github的bonus吗?
Brian Teeman 在 2023年6月6日星期二 08:05
缺失的链接

我已经更新了帖子,添加了缺失的链接到 https://github.com/brianteeman/joomlachild(编辑可能需要一段时间才能批准)

0
我已经更新了帖子,添加了缺失的链接到 https://github.com/brianteeman/joomlachild(编辑可能需要一段时间才能批准)
Chrisw 在 2024年10月3日星期四 21:02
Joomla 5?

我想知道这还适用于Joomla 5吗?我进行了测试,它似乎与直接复制现有模板的方式完全相同,即必须明确将菜单分配给子模板。因此,我不确定是否遗漏了什么,但似乎没有应用继承。谢谢

0
我想知道这还适用于Joomla 5?我进行了测试,它似乎与直接复制现有模板的方式完全相同,即必须明确将菜单分配给子模板。因此,我不确定是否遗漏了什么,但似乎没有应用继承。谢谢 :)

通过接受,您将访问https://magazine.joomla.net.cn/之外由第三方提供的服务