这段内容讨论了在 Joomla! 内容管理系统中,定义和管理“内容”(content)的复杂性和不确定性,尤其是当涉及到跨站点同步或迁移内容时。以下是内容的详细解释:
1. 内容定义的模糊性
-
问题的起点:内容的定义非常宽泛(loose),这导致了许多问题(a source of a lot of grief)。
-
尝试定义内容:假设将内容定义为“由 Joomla! 内置的文章组件(com_content)管理的任何文章”。这个定义看似合理,但实际上并不充分,因为它忽略了内容的复杂性和多维度。
2. 内容的复杂性
2.1 媒体文件
-
媒体文件的多样性:
-
文章可以包含一个或多个媒体文件(如图片、视频)。
-
有些媒体文件可能通过“媒体字段”(如文章缩略图和正文图片)链接到文章,这些容易被识别。
-
其他媒体文件可能嵌入在 HTML 内容中,可能有或没有元数据,这使得程序化发现变得困难。
-
-
文件的历史问题:
-
文件不是数据库记录,没有历史记录,因此无法确定它们是新增的、修改过的还是之前就存在的。
-
如果远程站点(site B)与本地站点(site A)不在同一网络中,就无法知道远程站点是否也有这些文件。
-
2.2 分类和权限
-
分类的复杂性:
-
文章属于分类,分类有访问级别和权限,这些权限依赖于用户组。
-
无法确定两个站点上是否存在相同的分类、访问级别和用户组,也无法确定它们的 ID 映射关系。
-
-
权限的复杂性:
-
用户组是组件级别基础权限的容器,每个分类都可以为每个用户组提供不同的权限。
-
这使得权限管理变得极其复杂,尤其是当分类和用户组的层级结构不同。
-
2.3 自定义字段
-
自定义字段的复杂性:
-
文章可以有自定义字段,这些字段可以属于自定义字段组。
-
自定义字段和字段组与特定组件和分类相关联,而每个自定义字段的值又与特定文章相关联。
-
这导致了多维度的复杂性,很难确定哪些内容是新增的或修改过的,尤其是在无法与远程站点通信的情况下。
-
2.4 用户和权限
-
用户和权限的关联:
-
文章、分类、自定义字段等都与用户相关联,因为 Joomla! 需要知道谁创建、修改或签出了这些内容。
-
两个站点之间没有用户映射关系,也无法查询远程站点的用户信息。
-
2.5 权限存储问题
-
权限存储的复杂性:
-
权限存储在
#__assets
表中,这是一个树形结构。 -
无法直接将一个站点的权限记录移植到另一个站点,即使有完整的分类、用户组、访问级别和用户 ID 映射,也需要定制代码来处理。
-
2.6 标签和 UCM
-
标签的复杂性:
-
标签不是以文本形式存储,而是以 ID 形式存储。
-
需要知道每个站点上哪些标签 ID 对应哪些标签文本,才能确定是否有新增或修改的标签。
-
-
UCM 的复杂性:
-
Joomla! 有一个名为 UCM(Universal Content Model)的辅助结构,用于处理标签、历史记录和智能搜索。
-
需要知道 UCM 的状态和属性,这些属性不会出现在用户界面中,但可能会影响内容的变更。
-
2.7 格式化和模板
-
CSS 格式化问题:
-
文章的格式可能依赖于模板中的 CSS。
-
无法期望这种格式化能够在两个站点之间自动迁移。
-
2.8 扩展和跨链接
-
扩展内容的复杂性:
-
文章可能包含来自其他扩展的内容,例如跨链接到特定菜单项、组件的深层链接、插件短代码或嵌入模块。
-
确定哪些内容是新的或修改过的,需要分析两个站点上安装的所有扩展及其内容定义。
-
这几乎是不可能的,因为每个扩展都需要定制代码来处理。
-
3. 跨站点内容迁移的困难
-
问题的演变:
-
Joomla! 1.5 时,内容迁移相对简单,只要处理媒体文件、分类名称匹配和站点间通信即可。
-
Joomla! 1.6 引入了自定义权限、用户组、访问级别和嵌套分类,问题变得更加复杂。
-
Joomla! 3.2 引入标签后,问题进一步复杂化。
-
Joomla! 3.7 引入自定义字段后,确定哪些内容是新的或修改过的变得完全不可预测,使得开发可用的解决方案变得几乎不可能。
-
4. 解决方案的局限性
-
人工处理的必要性:
-
由于内容的定义和变更检测是非确定性的,人工手动决定哪些内容是新的或修改过的,并手动在两个网络隔离的站点之间迁移,可能是唯一可行的方法。
-
-
完整克隆的局限性:
-
如果只需要站点 A 的完整克隆,可以备份整个站点并恢复到站点 B,但这需要手动传输备份文件,因为站点 B 的网络与互联网完全隔离。
-
5. 问题的普遍性
-
其他 CMS 的类似问题:
-
这个问题不仅存在于 Joomla!,WordPress 也存在类似问题。
-
作者推测,基于 Drupal 的内容组织方式(内容图节点)和对 Drupal 7 的了解,Drupal 也可能存在类似问题。
-
-
内容管理的普遍挑战:
-
一旦内容不仅仅是简单的文本,而是包含多种元素(如媒体文件、自定义字段、权限、标签等),确定什么是内容以及它是否发生了变化就变得越来越困难。
-
总结
这段内容强调了在 Joomla! 中,内容的定义和管理极其复杂,尤其是在跨站点迁移或同步时。由于内容的多维度和依赖关系,很难确定哪些内容是新的或修改过的,这使得自动化解决方案几乎不可能实现。作者认为,人工干预可能是唯一可行的解决方案,除非接受站点 A 的完整克隆。