Joomla改进覆盖管理
你可能听说过人们谈论覆盖。或者你可能看到了Joomla 4后端神秘的“需要检查的覆盖”通知。这些你听说的覆盖是什么?Astrid Günther为您解释。
自从Joomla 4以来,改进的覆盖管理成为Joomla的一部分。
在我看来,当按照预期使用时,它提供了有用的工具。这里的工具指的是两个插件
- 安装器 - 覆盖
- 快速图标 - Joomla!覆盖更新通知
让我们详细了解一下覆盖管理器是如何工作的。
如何在Joomla 4中使用覆盖管理器?
我将详细说明使用第三方提供者和Cassiopeia的模板。
初始情况
以下图示显示了我的示例安装。右侧列有绿色图标:一切更新完毕!
当你收到管理区域中的更新通知并运行它时,覆盖管理器就发挥作用了。要么更新Joomla本身,要么更新第三方扩展。
更新过程中会发生什么?
我在这个例子中更新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个文件被更改。在现实中很少会有这么多文件被更改!
详细查看
为了更仔细地查看文件,我点击快速图标或直接通过左侧的导航打开模板管理器。模板管理器显示一个表格,我可以看到有多少模板被哪些覆盖项影响。
当我点击第三方模板时,我在更新文件选项卡中找不到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核心中的文本。这不会被执行,因为它将被用绿色标记的文本覆盖。
检查过程
我决定是否要将更改应用到我的覆盖项上。
- 要接管代码,我从带有差异视图的底部窗口复制用红色标记的文本,并将其粘贴到上面的编辑器字段中,而不是绿色标记的文本。
- 如果一切放置正确,在保存后差异视图将是空的。
- 最后,我点击关闭按钮,删除显示所有要检查文件的表格中的列表条目。
如果我不想应用更改,前一个操作的最后一步就足够了。我关闭带有差异视图的窗口并删除列表条目。
voilà!这就是全部。
其他方面
覆盖管理器是为谁准备的?
在与覆盖管理器相关的问题中,我经常在论坛上看到,我确信提问者没有自己创建覆盖项。例如
在更新到4.0.5后,我看到了“应该检查2个覆盖项!”的消息。我还没有在模板文件中创建任何覆盖项。这是错误吗?
或者
我的Joomla 4.1.4网站报告“应该检查2个覆盖项!”。我不知道如何做?
通常,这些覆盖项是第三方模板的一部分。
理想情况下,创建覆盖项的人会检查它们。在这种情况下,是模板的开发者。在我看来,在这种情况下,模板开发者是负责的人。如果他们检查后认为有必要,应该创建模板更新并通过Joomla更新器提供。
不能理解和适应PHP代码的人不会很好地使用覆盖管理器的功能。在这种情况下,我建议停用两个插件。我的经验是,显示会让用户感到不安。因此,重要的是要相信创建了模板或为其编写覆盖代码的人。在标准模板卡西奥佩亚的情况下,这些人都是核心开发者。使用Joomla的人会信任他们。
覆盖管理器中的代码视图
有时代码视图会让人困惑。这通常是因为覆盖与原始代码在许多行上不同。在这种情况下,检查是否显示差异是有意义的。
通过创建替代布局,排除新的设计覆盖项的检查。这是通过分配不同的文件名来完成的。
例如,我有一个用于董事会成员的视图,在com_contact中称为vorstandsmitglied,其中差异视图没有意义。所有文件都由覆盖管理器检查,匹配原始文件名(或只有日期作为附加信息)。对于具有替代名称的文件,开发者有责任保持它们是最新的。
在当前版本中,如果受影响的代码行很多,在模板管理器中检查更改不是用户友好的。在我看来,视图仍然可以用作提示。如果很多行都进行了更改,那么代码编辑器是更好的选择。
覆盖管理器的检查有什么用?
安全
如果在Joomla 核心更新或第三方扩展更新期间删除了恶意功能,如果您使用覆盖管理器,您将识别出这一点。在我看来,纠正包含安全风险的程序代码并不是不合理。互联网发展迅速,越来越多的案例表明,最初集成为安全的函数后来被发现存在安全风险。
错误
错误修复和改进是日常工作。那些不想跟进的人应该考虑以下几点:如果一个人不将PR 使Google再次对面包屑感到满意集成到他的模板的覆盖中,那么网站不会静止。但如果您已适应这项改进,您将修复导致Google将面包屑分类为无效的结构化数据中的错误。
或者您想知道为什么在Finder中缺少自动建议,它是Joomla 4的标准搜索扩展。如果这是由于您在自己的网站上集成过时的覆盖项造成的,那么PR 36877提供了解决方案。
新功能
除了上述更重要的点,如错误纠正和安全外,当添加新功能时,人们会很快注意到。在论坛上,人们经常问为什么在他们的网站上激活了后端,但某个选项却未显示。这种情况并不少见,这可能是由于覆盖项不提供该功能。
Astrid在她的博客上用德语写了这篇文章:https://blog.astrid-guenther.de/cassiopeia-overridemanager
发表在Joomla社区杂志上的某些文章代表了作者对特定主题的个人意见或经验,可能并不代表Joomla项目的官方立场。
接受后,您将访问由 https://magazine.joomla.net.cn/ 外部的第三方提供的服务
评论 9
我一直使用Mac软件来做这件事,现在我想尝试一下这个。这可能会在复杂的定制网站上帮助很大——感谢Joomla!
尽管我一直进行检查,但这些通知已经让我困扰了一段时间。
这篇优秀的文章让我意识到,实际上你可以在“更新文件标签”上标记它们为已检查。
良好文档的力量...
感谢Astrid!
@Alan N 感谢您的反馈。
简短提醒,@astrid:您使用了“覆盖”和“覆盖写入”这两个词。我认为,前者应该是正确的术语
(我正准备将这篇文章翻译成德语,这让我的事情变得复杂)
嗯,好吧...事情并不只是黑白分明:https://www.grammar.com/override_vs_overwrite
但在Joomla的术语中,它被称为覆盖。
让我们就这样说,在JLingo中,“覆盖”可能是最安全的术语。
非常感谢Chris。我会更正这一点。
顺便说一句,已经有德语版本了
https://blog.astrid-guenther.de/cassiopeia-overridemanager
太棒了,我之前没看到这个