7分钟阅读时间 (1386字)

Joomla改进覆盖管理

July-Overrides

你可能听说过人们谈论覆盖。或者你可能看到了Joomla 4后端神秘的“需要检查的覆盖”通知。这些你听说的覆盖是什么?Astrid Günther为您解释。

自从Joomla 4以来,改进的覆盖管理成为Joomla的一部分。

在我看来,当按照预期使用时,它提供了有用的工具。这里的工具指的是两个插件

  • 安装器 - 覆盖
  • 快速图标 - Joomla!覆盖更新通知

Joomla! overrides

让我们详细了解一下覆盖管理器是如何工作的。

如何在Joomla 4中使用覆盖管理器?

我将详细说明使用第三方提供者和Cassiopeia的模板。

初始情况

以下图示显示了我的示例安装。右侧列有绿色图标:一切更新完毕!

Joomla! overrides

当你收到管理区域中的更新通知并运行它时,覆盖管理器就发挥作用了。要么更新Joomla本身,要么更新第三方扩展。

Joomla! overrides

更新过程中会发生什么?

我在这个例子中更新Joomla核心。但第三方扩展的安装也是以同样的方式进行。在更新过程中,插件安装器 - 覆盖检查模板文件是否已更改。

例如,从Joomla 4.1.4到Joomla 4.1.5,文件components/com_content/tmpl/article/default.php通过PR 37861进行了更改。

如果发现已更改的核心模板文件,安装程序将检查在安装的模板中是否存在相应的覆盖。如果是这样,将在数据库中保存一个条目,稍后在模板管理器更新文件选项卡中显示。

最终状态

概述

成功更新后,在Joomla仪表板中显示受影响的覆盖的概述。

在示例安装中,模板Cassiopeia覆盖了文件components/com_content/tmpl/article/default.php。第三方模板没有覆盖文章的默认视图。如果只有这个文件,仪表板中的快速图标将建议1个覆盖。在我的示例安装中,有105个文件被更改。在现实中很少会有这么多文件被更改!

Joomla! Overwrites

详细查看

为了更仔细地查看文件,我点击快速图标或直接通过左侧的导航打开模板管理器。模板管理器显示一个表格,我可以看到有多少模板被哪些覆盖项影响。

当我点击第三方模板时,我在更新文件选项卡中找不到components/com_content/tmpl/article/default.php文件的条目。这是正确的,因为这个模板中没有这个文件的覆盖项。

在卡西奥佩亚中,我发现了一个关于components/com_content/tmpl/article/default.php文件的条目,我点击它以更仔细地查看文件内容。

默认情况下,在打开详细视图后,会显示模板覆盖中保存的代码。这个代码覆盖了Joomla核心的原始代码。因此,原始的Joomla代码不会执行。即使它更新,包含新功能或错误修复,也是如此。默认显示的代码片段是与Joomla核心不同的版本,因此应该进行检查。

我对差异很感兴趣。所以我通过切换器差异激活了差异视图。在差异视图中,不同的文本会被标记。

代码部分中不必要的(因为它存在两次)检查

if (!empty($this->item->pagination) && $this->item->pagination && !$this->item->paginationposition && !$this->item->paginationrelative) :

被替换为

if (!empty($this->item->pagination) && !$this->item->paginationposition && !$this->item->paginationrelative) :

重要的是要意识到,用红色标记的文本是新增到Joomla核心中的文本。这不会被执行,因为它将被用绿色标记的文本覆盖。

检查过程

我决定是否要将更改应用到我的覆盖项上。

  1. 要接管代码,我从带有差异视图的底部窗口复制用红色标记的文本,并将其粘贴到上面的编辑器字段中,而不是绿色标记的文本。
  2. 如果一切放置正确,在保存后差异视图将是空的。
  3. 最后,我点击关闭按钮,删除显示所有要检查文件的表格中的列表条目

如果我不想应用更改,前一个操作的最后一步就足够了。我关闭带有差异视图的窗口并删除列表条目。

voilà!这就是全部。

其他方面

覆盖管理器是为谁准备的?

在与覆盖管理器相关的问题中,我经常在论坛上看到,我确信提问者没有自己创建覆盖项。例如

在更新到4.0.5后,我看到了“应该检查2个覆盖项!”的消息。我还没有在模板文件中创建任何覆盖项。这是错误吗?

或者

我的Joomla 4.1.4网站报告“应该检查2个覆盖项!”。我不知道如何做?

通常,这些覆盖项是第三方模板的一部分。

理想情况下,创建覆盖项的人会检查它们。在这种情况下,是模板的开发者。在我看来,在这种情况下,模板开发者是负责的人。如果他们检查后认为有必要,应该创建模板更新并通过Joomla更新器提供。

不能理解和适应PHP代码的人不会很好地使用覆盖管理器的功能。在这种情况下,我建议停用两个插件。我的经验是,显示会让用户感到不安。因此,重要的是要相信创建了模板或为其编写覆盖代码的人。在标准模板卡西奥佩亚的情况下,这些人都是核心开发者。使用Joomla的人会信任他们。

覆盖管理器中的代码视图

有时代码视图会让人困惑。这通常是因为覆盖与原始代码在许多行上不同。在这种情况下,检查是否显示差异是有意义的。
通过创建替代布局,排除新的设计覆盖项的检查。这是通过分配不同的文件名来完成的。

例如,我有一个用于董事会成员的视图,在com_contact中称为vorstandsmitglied,其中差异视图没有意义。所有文件都由覆盖管理器检查,匹配原始文件名(或只有日期作为附加信息)。对于具有替代名称的文件,开发者有责任保持它们是最新的。

5

在当前版本中,如果受影响的代码行很多,在模板管理器中检查更改不是用户友好的。在我看来,视图仍然可以用作提示。如果很多行都进行了更改,那么代码编辑器是更好的选择。

覆盖管理器的检查有什么用?

安全

如果在Joomla 核心更新第三方扩展更新期间删除了恶意功能,如果您使用覆盖管理器,您将识别出这一点。在我看来,纠正包含安全风险的程序代码并不是不合理。互联网发展迅速,越来越多的案例表明,最初集成为安全的函数后来被发现存在安全风险。

错误

错误修复和改进是日常工作。那些不想跟进的人应该考虑以下几点:如果一个人不将PR 使Google再次对面包屑感到满意集成到他的模板的覆盖中,那么网站不会静止。但如果您已适应这项改进,您将修复导致Google将面包屑分类为无效的结构化数据中的错误。


或者您想知道为什么在Finder中缺少自动建议,它是Joomla 4的标准搜索扩展。如果这是由于您在自己的网站上集成过时的覆盖项造成的,那么PR 36877提供了解决方案。

新功能

除了上述更重要的点,如错误纠正和安全外,当添加新功能时,人们会很快注意到。在论坛上,人们经常问为什么在他们的网站上激活了后端,但某个选项却未显示。这种情况并不少见,这可能是由于覆盖项不提供该功能。


Astrid在她的博客上用德语写了这篇文章:https://blog.astrid-guenther.de/cassiopeia-overridemanager

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

0
您需要另一个前端扩展吗?让我们...
认识一位Joomler - Cliff Ford
 

评论 9

已注册? 这里登录
Patrick 在 2022年7月20日星期三 23:04
对高级用户来说是个很好的补充

我一直使用Mac软件来做这件事,现在我想尝试一下这个。这可能会在复杂的定制网站上帮助很大——感谢Joomla!

0
我一直使用Mac软件来做这件事,现在我想尝试一下这个。这可能会在复杂的定制网站上帮助很大——感谢Joomla! :D
Alan N 在 2022年7月22日星期五 08:21
超级有用的指南

尽管我一直进行检查,但这些通知已经让我困扰了一段时间。

这篇优秀的文章让我意识到,实际上你可以在“更新文件标签”上标记它们为已检查。

良好文档的力量...

感谢Astrid!

1
尽管我一直进行检查,但这些通知已经让我困扰了一段时间。这篇优秀的文章让我意识到,实际上你可以在“更新文件标签”上标记它们为已检查。良好文档的力量...感谢Astrid!
Astrid Günther 在 2022年7月22日星期五 11:41
感谢您的反馈。

@Alan N 感谢您的反馈。

0
@Alan N 感谢您的反馈。
Chris Hoefliger 在 2022年8月13日星期六 13:05
覆盖与覆盖写入

简短提醒,@astrid:您使用了“覆盖”和“覆盖写入”这两个词。我认为,前者应该是正确的术语
(我正准备将这篇文章翻译成德语,这让我的事情变得复杂)

0
简短提醒,@astrid:您使用了“覆盖”和“覆盖写入”这两个词。我认为,前者应该是正确的术语 :D (我正准备将这篇文章翻译成德语,这让我的事情变得复杂)
Anja de Crom 在 2022年8月17日星期三 06:52
这取决于

嗯,好吧...事情并不只是黑白分明:https://www.grammar.com/override_vs_overwrite

0
嗯,好吧...事情并不只是黑白分明:https://www.grammar.com/override_vs_overwrite
Chris Hoefliger 在 2022年8月17日星期三 07:30
谢谢,Anja -我知道这一点

但在Joomla的术语中,它被称为覆盖。

0
但在Joomla的术语中,它被称为覆盖。
Anja de Crom 在 2022年8月17日星期三 13:01
好吧好吧

让我们就这样说,在JLingo中,“覆盖”可能是最安全的术语。

0
让我们就这样说,在JLingo中,“覆盖”可能是最安全的术语。
Astrid Günther 在 2022年8月13日星期六 19:11
非常感谢Chris。我会更正这一点。

非常感谢Chris。我会更正这一点。
顺便说一句,已经有德语版本了
https://blog.astrid-guenther.de/cassiopeia-overridemanager

0
非常感谢Chris。我会更正这一点。顺便说一句,已经有德语版本了:https://blog.astrid-guenther.de/cassiopeia-overridemanager
Chris Hoefliger 在 2022年8月17日星期三 07:30
谢谢astrid

太棒了,我之前没看到这个

0
太棒了,我之前没看到这个

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