Umbraco 7.9.1为成员组添加自定义扩展属性的实现方案咨询
Umbraco 7.9 成员组自定义扩展属性实现方案
现成扩展包情况
针对Umbraco 7.9的版本生态,没有可直接开箱即用、专门为成员组新增自定义字段的成熟扩展包。
目前Umbraco生态里绝大多数自定义字段扩展能力,都是面向单个成员(Member)实体本身设计的——依托原生的成员属性(Member Property)体系,给成员加自定义字段,而非面向成员组(MemberGroup)做扩展。核心原因是原生MemberGroup实体在7.x版本体系下定位非常轻量,仅保留基础的ID、名称、创建时间等核心字段,根本没有开放类似内容节点、成员实体那样的自定义属性存储、渲染扩展点,自然也没有第三方开发者专门维护对应的扩展包。
编程方式实现全流程
如果要落地自定义属性需求,可以通过Umbraco后端的扩展能力完成定制,核心步骤如下:
- 设计独立的自定义属性存储结构。不要直接修改Umbraco原生数据库表(比如
umbracoMemberGroup)加列,避免和原生逻辑、后续版本变更产生兼容冲突。单独创建一张关联成员组ID的键值对存储表,字段包含自增主键、关联的成员组NodeId、自定义属性别名、属性存储值即可,结构简单灵活。 - 封装自定义仓储与服务层。新建独立的仓储类,对接上面自建的存储表,实现自定义属性的增删改查逻辑;在逻辑里挂钩MemberGroup的原生保存、删除事件:保存成员组时同步写入自定义属性值,删除成员组时同步清理对应的关联属性数据,避免产生垃圾数据。
- 定制后台成员组编辑界面。Umbraco 7.9的后台是基于AngularJS实现的,你可以通过自定义包的
package.manifest配置注册替换视图,在原生成员组编辑页的“名称”字段下方,嵌入自己开发的自定义输入表单,对应绑定你需要的扩展属性字段。 - 实现自定义保存接口。由于原生的成员组后台接口不会处理自定义字段的提交,你需要编写继承自
UmbracoApiController的后端接口,同时接收原生的成员组基础信息、前端传过来的自定义属性值,调用之前封装的仓储服务完成全量数据保存,再把前端表单的提交地址替换为这个自定义接口即可。
注意事项
所有定制逻辑都不要侵入Umbraco核心的dll文件,也不要直接往umbracoNode、umbracoMemberGroup这类原生表上直接加列,全部通过独立的代码层、独立存储表实现,最大程度降低定制带来的维护风险。毕竟7.9属于已停止官方维护的老版本,定制过程中也不需要考虑跨版本兼容,只需要匹配当前版本的AngularJS后台接口参数结构就行,开发门槛不算高。
内容的提问来源于stack exchange,提问作者Malav Suthar
相关产品推荐
相关产品推荐

