本文将简单的介绍一下最近做的一个升级案例,其中有一部分是将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)获得更多相关资料。
评论 (0)