CommmonTemplate(
http://www.commontemplate.org)现在的所有区域信息定义都是动态产生的,
包括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}
分享到:
相关推荐
3. **模板继承**:Smarty支持模板继承,允许创建基础模板,子模板可以通过继承并覆盖部分区域来实现页面布局的复用。 4. **函数和控制结构**:Smarty 提供了一系列内建的函数和控制结构,如循环(foreach)、条件...
3. **模板继承与块**:Smarty支持模板继承,允许一个基础模板定义布局,而其他模板可以通过`{extends}`标签继承并覆盖特定区域。`{block}`标签用于定义可重用的模板段落,比如页眉和页脚。 4. **缓存机制**:Smarty...
7. **模板与类型推断**:模板是C++中实现泛型编程的关键,但模板值参数必须是编译期常量。编译器的类型推断规则在非模板函数和模板实例化中有所不同。模板的隐式类型转换能力在某些情况下会减弱。 8. **访问控制与...
同时,可以使用`block`标签定义可重用的页面区域。 8. **预处理和后处理**:Smarty允许在渲染模板前和后添加自定义函数,进行数据的预处理和后处理,这增强了其灵活性。 9. **分隔符自定义**: Smarty允许用户...
- **合作期限**:合同有效期为一定期限(如文中所述的几个月),到期后如无异议则自动延续;一方提出终止时,则合同终止。 2. **代理产品及价格** - 文中虽然没有具体列出产品的名称和价格,但在实际合同中应明确...
- **编译期模板**:C++/CLI特有的功能之一,允许在编译期间执行某些任务,提高运行时性能。 #### 资源管理 - **资源清理**:确保在对象不再需要时正确释放资源的过程。在C++/CLI中,可以通过析构函数、finalizer等...
Smarty支持模板继承,通过`extends`关键字指定父模板,然后使用`block`定义可覆盖的区域。这有助于保持设计一致性并减少代码重复。 6. **缓存机制** Smarty提供了一个强大的缓存系统,可以提高动态页面的加载速度...
函数模板使用模板参数作为类型标识,编译时根据实际的类型进行实例化。 有默认参数的函数允许函数调用时可以省略某些参数,只需提供剩余参数。这样可以使得函数调用更加灵活,提供默认值的参数应该位于参数列表的...
3. **内存管理**:C++提供了堆栈和堆两种内存区域,分别用于存放局部变量和动态分配的对象。书中会讨论内存分配策略、对象的生存期以及如何避免内存泄漏。 4. **构造与析构**:构造函数用于初始化新创建的对象,而...
编译期常量与数组定义 在C++中,数组的大小必须在编译时确定。因此,使用运行时确定的变量(如`temp`)作为数组`char str2[size2];`的大小是不允许的。`size2`必须是一个编译期常量表达式。 ### 7. 反向遍历数组 ...
- 一般规定(General)、头文件概述(Header <locale> synopsis)、区域设置(Locales)、标准区域设置类别(Standard locale categories)、标准代码转换面(Standard code conversion facets)、C库区域设置(C ...
- **类型检查**:`const`变量支持类型检查,可以在编译期发现类型不匹配的问题;`#define`则不具备类型检查功能,可能导致运行时错误。 - **作用域**:`const`变量具有局部作用域或文件作用域,可以根据需要控制其...
`block`指令用于定义可重用的区域,子模板可以覆盖父模板中的块。 7. **函数和插件**:Smarty提供了一系列内置函数,如`date_format`、`escape`等,也可以自定义插件扩展其功能。通过`{function name="myFunction" ...
2. 注解:了解注解的使用,理解元注解和自定义注解,掌握注解在编译期和运行期的应用。 七、JVM内存模型 1. 内存区域:理解堆、栈、方法区、本地方法栈、程序计数器等区域的划分和作用。 2. 垃圾收集:掌握GC的基本...
变量初始化是分配初值给变量的过程,而可见范围和变量使用期则决定了变量在程序中作用的区域和时间。 预处理程序在MQL5中用于改善代码的可维护性和可重用性,包括常量声明、程序属性、包含文件以及条件编译等。例如...
堆是动态分配内存的区域,由程序员手动申请和释放,分配和回收速度相对较慢,但使用灵活。 #### 5. 指针类型区别 包括指向指针的指针、指针的指针、指向函数的指针、指向成员的指针等等。每种指针类型用于不同场景...
### 编译期类型检查 **知识点6:** 编译期间的类型检查。 - **问题描述:** - 尝试输出一个三元表达式的值,该表达式包含不同类型。 - **解析:** - C++ 编译器在编译阶段会进行严格的类型检查。在表达式 `(true...
在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Classes)框架来实现一个Windows应用程序,该程序能够在客户端区域绘制一个实心圆,并使其沿着正弦曲线移动。每隔四分之一周期,圆的填充颜色和线条颜色...
- **类型安全**:确保程序在编译期就能检测到类型错误,提高代码的安全性。 - **编译器作用**:编译器在编译过程中对类型进行验证,确保变量和表达式的类型正确无误。 - **泛型擦除**:尽管Java支持泛型,但实际执行...