系统变量 Douview
$douview 是 DouView 的内建命名空间变量,提供引擎级的只读信息与循环元数据。$smarty 作为向后兼容别名同等可用(旧模板无需改动)。
一、基本系统变量
{$douview.now} 当前时间戳(time())
{$douview.template} 当前模板资源名
{$douview.version} 引擎版本号('1.0')
{$douview.ldelim} 左定界符
{$douview.rdelim} 右定界符
这些引用由 BuiltinVarResolver 在编译期 lowering:now → time(),version → 字面量 '1.0',template → 当前资源名字面量,ldelim/rdelim → 当前配置的定界符字面量。
二、$smarty 兼容别名
$smarty.* 与 $douview.* 完全等价:
{$smarty.now}
{$smarty.version}
{$smarty.foreach.NAME.first}
三、foreach 循环属性
命名循环可用 $douview.foreach.NAME.* 访问循环元数据,支持 index / first / last / show:
{foreach from=$users item=user name=user_list}
{$douview.foreach.user_list.index}: {$user.name}
{if $douview.foreach.user_list.first}<strong>首个</strong>{/if}
{/foreach}
编译期分别 lowering 为对 $ctx->loops[NAME] 的 iteration / total 运算。推荐使用更简洁的 @property 语法({$user@index} 等),详见「循环属性 Loop Properties」篇。
四、与应用变量 $dou.* 的命名空间隔离
$douview. 是 DouView 的规范命名,与应用变量命名空间(如模板中的 $dou.auth、$dou.user、$dou.vip)物理隔离,互不冲突:
$douview.*/$smarty.*:引擎内建,编译期 lowering;$dou.*:应用(框架)注入的业务数据,运行期从$ctx->vars取。
因此你可以在同一模板里同时用 $douview.now 与 $dou.user.name,两者不会互相抢占。前台应用变量详见「前台通用变量 Frontend Variables」篇。
五、注意事项
$douview.*只支持上述固定引用,写未知引用(如$douview.foo)编译期报is an unknown reference;$douview.now是编译后运行期的time(),每次渲染取当时时间,而非编译时固定值。