MODX3中资源重大变更日期追踪方案咨询
MODX 内容更新时间追踪的最优方案
针对你提出的三个问题,逐一分析并给出实操建议:
1. 是否可阻止editedon在每次保存时更新,仅用于记录重大变更?
不建议这么做。editedon是MODX的核心系统字段,内部用于资源版本管理、缓存刷新触发、内容变更溯源等关键逻辑。强行通过插件或修改核心代码干预它的更新机制,会破坏系统原生稳定性,后续版本升级也容易出现兼容问题。即便通过OnBeforeSave事件写插件判断“重大变更”再更新,也会因判断逻辑的主观性(比如如何定义“重大”)和系统潜在依赖,带来不可控风险,因此完全不推荐。
2. 是否应创建自定义TV来手动追踪变更日期?
这是最稳妥、易落地的方案。操作步骤:
- 创建一个日期类型的TV(例如命名为
last_major_update),默认值绑定资源的publishedon字段; - 制定内容更新规范,仅当发生实质性内容变更(比如核心内容修改、结构调整)时,编辑人员手动更新该TV的日期;
- 前端页面直接调用
[[*last_major_update]]展示即可。
优点是完全可控,不影响系统核心功能;缺点是依赖编辑人员的操作习惯,适合团队规模小、内容更新流程清晰的场景。
3. 有无其他方案?
有两种更自动化的进阶方案:
- 基于资源版本的自动判断:开发插件监听
OnResourceFormSave事件,获取当前资源的上一个历史版本(通过modResourceVersion模型),对比预设的“关键字段”(比如content、pagetitle、longtitle、template等),若这些字段发生变更,则自动更新一个自定义字段(TV或新增数据库字段)的时间。这种方案无需手动操作,判断逻辑客观,适合内容更新频繁的场景。 - 新增数据库字段:直接给
modx_site_content表新增last_major_updatedon字段(类型为datetime),然后通过上述插件逻辑控制该字段的更新。相比TV,数据库字段的读取性能略优,适合对性能有要求的大站点,但需要注意MODX版本升级时的数据库备份与兼容。
内容的提问来源于stack exchange,提问作者Niko Suominen
相关产品推荐
相关产品推荐

