系统变量 Douview

系统变量 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(),每次渲染取当时时间,而非编译时固定值。
添加日期: