CommmonTemplate([url]http://www.commontemplate.org[/url])现在的所有区域信息定义都是动态产生的,
包括zone, block, macro,而有些功能需要不执行模板就获取它的区域块。
经常需要用到局部包含功能,如,页面包含时,经常只需包含另一页面的<body></body>里面的部分。
现在的区域定义是动态的,在执行期产生的,如:
$zone{"body"}
$end
这里的区域名称甚至可以是变量。
如果要做到外部获取区域,则需要在编译期确定区域位置,
然后通过:Template.getZone(String name)获取。
假设静态区域定义语法为:
使用"@"前缀识别,如:
然后就可以:
这里牵扯到模板继承功能,上面的静态区域也同时用于继承时覆写,如:
或者进一步简化,使用同名覆写策略:
另一个类似的需求是:
macro的定义是否可以在调用之后?就像Java中的函数,位置任意。
如:
这里的Macro定义也是运行期的,必需先定义再调用,而如果要做到位置任意,则也应该静态化。
这里不能重用上面的zone定义,因为macro的定义块是不显示的。
但它可以和$block指令共用块定义。block的用法如:
是否应该再加一个:
Template.getBlock(String name)
假设用"%"作为前缀,如:
然后可以:
而macro,怎么利用block和zone定义,还有待考虑。
是否macro另使用前缀标识?会不会太多标记?
是否使用声明?如:
包括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}