跳转到内容

7.0 破坏性变更清单

Elgg 7.0 包含六项破坏性变更。每一条按”如果你之前用到了 X,现在应该改成 Y”的格式说明。

1. ElggObject 直接创建不再支持

7.0 移除了通过 new ElggObject() 直接实例化并保存的用法。

改法:统一使用工厂方法:

6.x
$object = new ElggObject();
$object->subtype = 'my_type';
$object->save();
// 7.0
$object = elgg_create_object(['subtype' => 'my_type']);

批量创建场景改用 elgg_call(ELGG_IGNORE_ACCESS, fn) 包裹工厂调用。

2. 实体 actions 统一

6.x 中部分实体类型有独立的 action 文件(actions/save/object 等)。7.0 统一为标准化的实体 action 注册。

改法:检查 mod/*/actions 下自定义 action,改用 elgg_register_entity_action() 或迁移到统一 action 路由;前端表单的 action 属性同步更新。

3. External pages 重构

外置页面插件(about / terms / privacy 等静态页)的数据结构从 object subtype 重构为独立实体类型。

改法:如果站点自定义过 External pages 的模板或读取逻辑,更新为新的实体类型;仅使用后台编辑界面的站点无感知。

4. 内置 Redis / Memcached 支持移除

7.0 移除了核心内置的 Redis / Memcached 缓存后端配置。

改法:使用独立的缓存插件或框架级方案(如 PSR-6/PSR-16 实现)。本地文件缓存不受影响,simple cache 与系统缓存照常工作。

5. CSS Crush 移除

视图层的 CSS 处理库 CSS Crush 被移除。

改法:如果插件在 CSS 中使用了 CSS Crush 特有语法(变量、extend),改为原生 CSS 或构建期处理。普通 CSS 文件不受影响。

6. 用户资料 Twitter 字段移除

用户资料的默认 Twitter 字段被移除。

改法:依赖该字段的站点在插件中自行注册 profile 字段;已有数据在升级后仍保留在数据库中,不会丢失。

升级前的检查脚本建议

在代码库中全局搜索以下关键词,快速定位受影响点:

Terminal window
grep -rn "new ElggObject" mod/
grep -rn "csscrush\|css_crush" mod/ views/
grep -rn "twitter" mod/ languages/