编译期模板区域定义

CommmonTemplate([url]http://www.commontemplate.org[/url])现在的所有区域信息定义都是动态产生的,
包括zone, block, macro,而有些功能需要不执行模板就获取它的区域块。

经常需要用到局部包含功能,如,页面包含时,经常只需包含另一页面的<body></body>里面的部分。
现在的区域定义是动态的,在执行期产生的,如:
$zone{"body"}
$end
这里的区域名称甚至可以是变量。
如果要做到外部获取区域,则需要在编译期确定区域位置,
然后通过:Template.getZone(String name)获取。

假设静态区域定义语法为:
使用"@"前缀识别,如:

$@body
...
$end


然后就可以:

$inline{"xxx.ctl@body"}
$include{"xxx.ctl@body"}


这里牵扯到模板继承功能,上面的静态区域也同时用于继承时覆写,如:

$extends{"xxx.ctl"}
$override{@body}
$super
...
$end
$end

或者进一步简化,使用同名覆写策略:

$extends{"xxx.ctl"}
$@body
$super
...
$end
$end


另一个类似的需求是:
macro的定义是否可以在调用之后?就像Java中的函数,位置任意。
如:

$# 先写调用
$-xxx{param:"value"}

$# 后写定义
$macro{"xxx"}
...
$end


这里的Macro定义也是运行期的,必需先定义再调用,而如果要做到位置任意,则也应该静态化。
这里不能重用上面的zone定义,因为macro的定义块是不显示的。
但它可以和$block指令共用块定义。block的用法如:

$# block定义时不显示,需通过show显示,可多次显示。
$block{"xxx"}
...
$end

....

$# 在此位置显示block
$show{"xxx"}



是否应该再加一个:
Template.getBlock(String name)
假设用"%"作为前缀,如:

$%xxx
...
$end


然后可以:

$show{%xxx}


而macro,怎么利用block和zone定义,还有待考虑。
是否macro另使用前缀标识?会不会太多标记?
是否使用声明?如:

$using{%xxx}
$using{@xxx}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值