随着publiccms功能的不断完善,目前指令规模也比较庞大。

    普通模板指令已经有160多个,比如内容查询指令实现类CmsContentDirective,自动注册为指令时,去掉了Cms前缀、Directive后缀、首字母小写,加下划线前缀构成了原有的指令风格:

<@_content id=1>${object.name}</@_content>

    在freemarker中,指令也是一种特殊的变量,如果指令名不加以处理content指令将和content对象相互覆盖,因此设计了下划线加以区分。

    对于cms相关逻辑还是比较便捷的,但是对于其他的业务就不是很方便了比如用户查询SysUserDirective类对应的指令,去掉Cms前缀对它起不到简化作用

<@_sysUser id=1>${object.nickname}</@_sysUser>

    将来我们还计划加入更多的业务场景,希望给这些指令加以区分,保证技术层面的公平性。

    新的规则自动注册指令时除了使用了类名,还使用了这个类的最后一个包名,比如 com.publiccms.views.directives.sys.SysUserDirective,命名空间取sys,指令名取类名去掉Directive后缀,去掉命名空间前缀,加上命名空间前缀,调用规则为

<@sys.user id=1>${object.nickname}</@_sys.user>

    这样对于其他业务场景有同名指令的情况更加友好,同时老的指令风格将依然有效不用担心新旧版本不兼容,对于一些指令有时候旧的风格反而更简洁

0条评论
发表评论