跳至主要内容
版本:5.1

更新服务器

背景

通过更新服务器更新 Joomla 扩展是一个两步过程

  1. 查找已安装扩展的可用更新。
  2. 选择更新并对其进行安装。

通常,管理员通过系统仪表盘更新/扩展页面执行此操作

  1. 您点击“检查更新”以找到可用更新。
  2. 勾选您要安装的每个更新的复选框,然后点击“更新”。

当管理员登录后端时,Joomla 也会自动检查扩展更新。

每个通过更新服务器更新的 Joomla 扩展都有一个与之关联的 URL,该 URL 指向一个 XML 文件,其中包含可用更新的详细信息。例如,此文件可以托管在扩展开发人员自己的网站上。如果你转到管理系统仪表盘并选择更新/更新站点,那么你将在更新站点栏中看到此 URL,并且你可以点击这些 URL 以查看 XML 文件的格式。

XML 文件包含该扩展程序有哪些可用的更新详情,包括任何限制(例如,您可能必须运行特定 Joomla 版本才能使用该扩展程序),以及包含扩展程序新版本 zip 文件的 URL。

您需要做什么

要提供一个更新服务器,您需要做 3 件事。

1 XML 文件

首先,您需要定义一个 XML 文件用于更新,并将其加载到您的更新服务器目录中。下面显示的是一个基本文件

<updates>
<update>
<name>Example component</name>
<description>Example component</description>
<element>com_example</element>
<type>component</type>
<version>1.0.0</version>
<client>administrator</client>
<downloads>
<downloadurl type="full" format="zip">http://example.com/com_example-1-0-0.zip</downloadurl>
</downloads>
<targetplatform name="joomla" version="((4\.4)|(5\.(0|1|2|3|4|5|6|7|8|9)))" />
<php_minimum>8.1</php_minimum>
</update>
</updates>

请注意,它具有

  • 关于该扩展程序的基本信息 - 例如名称、版本
  • 用于该更新的 zip 文件的链接
  • 限制 - 仅适用于 Joomla 版本 4.4 或 5.x,且至少需要 PHP 8.1

每当管理员单击“查找更新” 按钮时,Joomla 都会向这些更新服务器的每个 URL 发送 HTTP 请求来检索 XML 文件。它解析每个 XML 文件,

  • 确保它是格式正确的 XML
  • 将更新版本与当前正在运行的扩展程序版本进行比较
  • 检查当前正在运行的任何限制(Joomla 版本、PHP 版本、数据库版本)。

如果它发现这是针对本网站的有效更新,那它就会在数据库中的 #__updates 表中插入一条记录。(您会发现最多只有针对每个扩展程序的一条更新记录,因为如果有好几个可能的版本,那么 Joomla 只会存储最新的有效版本,即版本号最高的版本)。

2 扩展程序更新

您在更新服务器上存储针对您的扩展程序的更新的 zip 文件。文件名必须与您 XML 文件中的 <downloadurl> 元素相匹配。

3 告诉 Joomla 您的更新服务器在哪里

您可以在扩展程序的清单文件中指定来做到这一点,例如

<updateservers>
<server type="extension" name="Example Updates">http://example.com/extension.xml</server>
</updateservers>

您可以在 <updateservers> 标记中有多个服务器。如果您有多个更新服务器,那么您可以为每个服务器设置不同的优先级。通过这种方式,您能够控制检查更新服务器的顺序。

有 2 种类型的服务器:“扩展程序”和“集合”(在下面详细说明)。因此,您可以将 <updateservers> 定义为

 <updateservers>
<server type="collection">https://example.com/list.xml</server>
<server type="extension" priority="2" name="My Extension's Updates">http://example.com/extension.xml</server>
</updateservers>

不要针对 name 属性使用语言字符串 - 由于某种原因,Joomla 并不总是尝试翻译它。

安装更新

一旦已将信息插入到 #__updates 表中,管理员在管理员系统仪表板的更新/扩展部分将能够看到它们。当管理员选择一个扩展并单击“更新”时,Joomla 将

  • 再次向更新 XML 文件的 URL 发送一个 HTTP 请求
  • 分析 XML 文件,并确保满足安装该版本的相关条件
  • 向更新 ZIP 文件的 URL 发送一个 HTTP 请求,将通过 HTTP 回复接收到的文件存储到其 /tmp 目录中
  • 继续从所下载的 ZIP 文件安装新版本。

收集服务器类型

这样你可以收集不同的更新 XML 文件。例如,如果

  • 你的扩展是一个软件包,你希望允许用户单独更新软件包的组件。
  • 你希望针对不同版本的 Joomla 拥有不同的更新 XML 文件。

Joomla 语言包使用收集类型。如果你转到更新/更新站点,你将看到更新站点指向类似于 https://update.joomla.org/language/translationlist_4.xml 的 URL,它会返回

<extensionset name="Accredited Joomla! Translations" description="Accredited Joomla! Translations Updates">
<extension name="Afrikaans" element="pkg_af-ZA" type="package" version="4.4.2.2" detailsurl="https://update.joomla.org/language/details4/af-ZA_details.xml"/>
<extension name="Arabic Unitag" element="pkg_ar-AA" type="package" version="4.0.2.1" detailsurl="https://update.joomla.org/language/details4/ar-AA_details.xml"/>
...
</extensionset>

如果你导航到其中一个 detailsurl 条目,那么你将看到该语言的“扩展”类型服务器 XML。

所有定义都必须在你更新服务器 XML 收集中 <extensionset> 标记中定义。

<extensionset> 标记有两个可选参数:名称和说明。

对于此收集引用的每个扩展,都需要一个单独的 <extension> 标记。<extension> 标记具有以下参数,所有这些参数对于正确处理更新都是必需的

  • 名称——扩展的名称
  • 元素——未翻译的扩展名称,即 mod_custom
  • 类型——扩展类型(组件、模块、插件等)
  • 版本——扩展的最新版本
  • detailsurl ——包含该扩展的单独更新定义的 XML 文件的 URL

扩展服务器类型

扩展服务器类型为各个扩展提供更新。所有收集服务器类型最终会指向一个扩展服务器类型。

这是一个针对 Joomla 4.4 版本的扩展服务器类型示例

https://update.joomla.org/core/j4/default.xml
<updates>
<update>
<name>Joomla! 4.4</name>
<description>Joomla! 4.4 CMS</description>
<element>joomla</element>
<type>file</type>
<version>4.4.4</version>
<infourl title="Joomla 4.4.4 Release">
https://joomla.net.cn/announcements/release-news/5907-joomla-5-1-0-and-joomla-4-4-4-are-here.html
</infourl>
<downloads>
<downloadurl type="full" format="zip">
https://downloads.joomla.net.cn/cms/joomla4/4-4-4/Joomla_4.4.4-Stable-Update_Package.zip
</downloadurl>
<downloadsource type="full" format="zip">
https://github.com/joomla/joomla-cms/releases/download/4.4.4/Joomla_4.4.4-Stable-Update_Package.zip
</downloadsource>
<downloadsource type="full" format="zip">
https://update.joomla.org/releases/4.4.4/Joomla_4.4.4-Stable-Update_Package.zip
</downloadsource>
</downloads>
<tags>
<tag>stable</tag>
</tags>
<supported_databases mysql="5.6" mariadb="10.1" postgresql="11.0"/>
<php_minimum>7.2.5</php_minimum>
<sha256>
02158d2d9e388aa21718fcfc98ea6c0c0c306f130ce6b3ecd02ade7ced863e61
</sha256>
<sha384>
0ecae1ebae84584433c7d60f7bd2bedb4bc55c73f89e9fc0416d9445dab6670a6b29bb3aef84e80177f28a0b9cac06eb
</sha384>
<sha512>
f774f13e97d6d96ffe1fb5847088120734bbe14b3e49c6e9042e725c3b21a8960f89f034bd517157aa7bcb588a11271dc4dc646010530e08a9c90eeb82dfa377
</sha512>
<maintainer>Joomla! Production Department</maintainer>
<maintainerurl>https://joomla.net.cn</maintainerurl>
<section>STS</section>
<targetplatform name="joomla" version="4.[1234]"/>
</update>
</updates>

你可以在此文件中包含不同的 <update> 元素,并且这些元素必须包含在一个 <updates> 元素中。你发布的扩展程序的每个版本都需要单独的 <update> 定义。

你可能还提供了针对相同版本的扩展的不同更新,但针对不同的 <targetplatform> Joomla 版本。

以下部分介绍单个更新实体的元素。

  • name – 扩展的名称,此名称将出现在扩展管理器更新视图的名称列中(必需)

  • description – 扩展的简要描述(可选)— 如果你选择使用 <![CDATA[]]>,双引号会破坏 HTML 格式。在你的 HTML 实体中使用单引号。

  • element – 扩展的已安装名称(必需)。对于插件,这需要与插件清单中主文件的插件属性值相同。对于 <filename plugin="pluginname">pluginname.php</filename>,element 值应为 pluginname

  • type – 扩展类型(组件、模块、插件等)(必需)

  • folder – 专门用于插件,此标记描述了正在更新的插件类型(内容、系统等)(插件必需)

  • client – 扩展的客户端。对于模块和模板而言是必需的。此时的可能值是“site”或“administrator”。警告!插件和前端模块已使用网站客户端自动安装,但你将在更新中需要指定客户端,或将默认恢复到管理员,随后找到的更新将不会显示,因为它不与任何扩展匹配。组件已使用客户端管理员自动安装,这是当前的默认值。

  • version – 版本的发布(必需)

  • infourl – 指示用户包含有关更新信息的链接(可选)

  • downloads – 列出所有下载位置的部分

    • downloadurl – 用于从其中下载扩展的 URL;<downloadurl> 标记有两个必需参数

      • type – 程序包类型(完整或升级)
      • format – 程序包格式(zip、tar 等)
    • downloadsource – 可选。当与 <downloadurl> 的连接失败时的下载扩展的备用 URL。允许多个 <downloadsource> 标记。<downloadsource> 标记有两个必需参数

      • type – 程序包类型(完整或升级)
      • format – 程序包格式(zip、tar 等)

      NB – URL 前后不能有换行符;所有内容都应位于一行中,否则在运行更新时将收到“连接到服务器时出错:格式错误”。

  • changelogurl - 指向包含变更日志的 xml 文件的链接。Joomla 4.0 及更高版本允许你显示用于扩展更新程序页面中变更日志的按钮。有关如何使用它的更多详细信息可在其下方找到。

  • tags – 与此版本相关的标记列表。Joomla! 使用此内容以确定更新的稳定性等级。有效标记有

    • dev: 开发版本,极不稳定且处于 pre-alpha 阶段(如夜间构建)
    • alpha: Alpha 质量软件(未实施功能,关键错误)
    • beta:Beta 品质软件(已实现所有功能,可能存在重大 Bug,几乎肯定会存在次要 Bug)
    • rc:发布候选品质软件(没有重大 Bug,可能仍然存在次要 Bug)
    • stable:生产品质软件 所有其他标签目前都将被忽略。

    如果您提供多个包含上述稳定性关键字之一的标签,那么只有最后一个标签会被考虑。如果您不提供任何标签,Joomla!会假定它是一个稳定版本。

  • maintainer – 扩展维护者的名字(类似清单中的 <author> 标签)(可选)

  • maintainerurl – 扩展维护者的网站(类似清单中的 <authorUrl> 标签)(可选)

  • section – 可选(用途未知)

  • targetplatform – 使用以下元素定义平台需求的标签:

    • name – 平台依赖的名称;它仅能是“joomla”
    • version – 扩展支持的 Joomla!的版本,就像正则表达式一样(必须)。例如,version="4.[1234]" 会在 Joomla 4.1 到 4.4 上运行,但不能在任何 Joomla 3 或 Joomla 5 实例上运行,version="4.(2|4)" 仅在 4.2 或 4.4 上运行。
    • min_dev_levelmax_dev_level – 这些属性可以让您根据开发人员级别(x.y.z 中的“z”)选择目标平台。它们是可选的。您可以指定一个或两个。如果省略,所有开发者级别都匹配。例如,以下匹配版本 4.0.0 和 4.0.1。<targetplatform name="joomla" version="4.0" min_dev_level="0" max_dev_level="1"/>
  • php_minimum – 更新流可以提供所支持的最低 PHP 版本。如果服务器不符合最低要求,则会向用户显示一条消息,告知用户有可用的更新,但由于不支持的需求而无法安装。

  • supported_databases – 更新流可以提供所支持的最低数据库 + 版本检查。如果服务器不符合最低要求,则会向用户显示一条消息,告知用户有可用的更新,但由于不支持的需求而无法安装。例如:<supported_databases mysql="5.5.3" mariadb="10.1" postgresql="9.2" mssql="10.50.1600.1" />

  • sha256, sha384, sha512 – 可选。可下载扩展文件在这些各种哈希格式中的校验和。如果提供的校验和不匹配,该更新将会停止。您可以找到用于生成这些校验和的在线实用程序。

elementtypefolder 的值应与表 #_extensions 中的值相匹配,那里的 client(对于网站为 0,对于管理员为 1)应与 client 相匹配。

插件非常重要:插件必须包含 <folder><client> 元素才能正常工作