本文将简单的介绍一下最近做的一个升级案例,其中有一部分是将K2升级到Joomla5。感觉整个的处理过程还是挺有意思的,就记录一下,以供有需要的朋友参考。

背景

项目是一个政府内部的新闻系统,由Joomla3核心搭建,其中主要的内容组件是k2.由于PHP7已经不支持了,用户需要满足安全规范升级到PHP8,joomla核心升级到Joomla5.整个站点数据量大概1500篇文章,主要是图文。对于SEO要求并不高,只需要确保一些主要菜单外链不变(这一部分链接发给了其他单位)即可,对于内页的链接,可以接受变动。但对于界面要求高,需要保持和原先一样的界面。

关于K2

K2 曾是 Joomla 核心内容管理的完美替代方案。自 Joomla 1.5 以来,无数网站管理员通过 K2 获得了以下强大功能:

  • ​扩展字段与附件支持​
  • ​标签系统与多级分类​
  • ​自动缩放图片与图库​
  • ​视频嵌入与高级模块​

但随着 Joomla 4 的发布,K2 开发团队停止更新,导致网站升级受阻。与此同时,Joomla 核心已原生集成 K2 的核心功能(如自定义字段、标签系统和无限分类层级),使回迁成为可能。

解决方案设计

解决方案有两种,一种是修改k2的代码,使之兼容Joomla5.另外一种是将K2数据迁移到核心文章组件。

修改k2兼容Joomla5

这种方案的优点就是问题明确,只需要专注于处理K2的代码即可。但代价也很突出,升级k2兼容Joomla5仅仅只能确保站点正常工作,不能充分利用Joomla5的架构优势以及新的特性,可能会导致性能问题。更让人担心的是,后面一旦升级Joomla核心,可能会导致整个站点不能工作,后续有无尽的麻烦。在尝试一周的测试后,我们放弃了这个思路。

将k2的内容迁移到Joomla核心的文章系统

这种方案可以一劳永逸的解决后面所有的问题。由于缺乏现成工具,使得这个工作变得非常的麻烦,需要我们自己来写相应的迁移脚本。这个项目比较有利的一点就是之前这个项目也是我们做的,之前的设计文档我这边都有,对于使用到的第三方扩展都比较熟悉。所以在整体的架构分析上面没有太费事。

架构设计

现在想来,这个事情其实并没有那么复杂,我们只需要解决好两件事即可。第一个就是K2数据库表和Joomla核心数据库表的对应关系。第二个就是页面外观的修改(这个比较简单,只是一些css,js样式的问题,再此不讨论了)。我们重点来说一下数据表的映射。下面这个表格基本上就是我们需要迁移的所有主要内容了。

K2 实体 Joomla 核心对应实体
分类 分类
文章 内容
额外字段组 自定义字段组
图片 引言图与全文图

技术实现要点

  • ​​图片迁移​​:将 K2 媒体目录文件移动至 Joomla /images 目录.同时处理数据表中的对应字段
  • 自定义字段​​:通过 $cfMapping 数组匹配 K2 字段与 Joomla 自定义字段(最好一一对应,这样可以写代码批量转换)
  • 重建 Joomla 菜单项类型(如将 K2 分类菜单项改为 "文章 > 分类列表")(直接在数据库可批量操作)
  • 使用 .htaccess 或 Joomla 重定向组件处理遗留 URL
  • 通过模板覆盖(Template Overrides)调整文章布局
  • 修复自定义插件导致的显示问题

本项目耗时8周,主要的时间花费在数据迁移和测试上面。

可能存在的问题

如果甲方对SEO这块比较看重,那么迁移保持URL不变将会是一个不小的挑战。一个可行的思路就是URL映射表来解决,具体没有尝试。

感慨

如果从短期交付项目来看,最经济的方案是升级k2兼容Joomla5.但从长期来看,将k2迁移到核心文章组件是最优解,可以完全的使用joomla新版本带来的特性,而且不用担心后面升级的问题。各位可以依据项目的预算来选择适合自己的方法。

如需进一步探讨 Joomla! 相关技术,可以访问Joomla中文网(https://www.joomlachina.cn)获得更多相关资料。

作者: 樱木花道

Joomla程序员,从J1.5到J4.x始终都在做Joomla相关开发定制工作,有超过10年行业经验,国内Joomla扩展开发商ZMAX团队的核心成员

作者网站:ZMAX程序人

评论 (0)

  • 最新在前
  • 最佳在前