首页 > 其他分享 >第四十六章 开发自定义标签 - 标签匹配 操作中的运行时表达式

第四十六章 开发自定义标签 - 标签匹配 操作中的运行时表达式

时间:2022-11-14 08:00:33浏览次数:48  
标签:自定义 ## 标签 第四十六章 编译 规则 表达式 页面

第四十六章 开发自定义标签 - 标签匹配 操作中的运行时表达式

指定标签的属性值,方法是将属性值放在方括号内,标签名称后是[ ]

<csr:rule>标记的match属性定义了CSP编译器应该将什么识别为规则,然后执行指定的操作。match属性是由/(斜杠)字符分隔的一个或多个标记名组成的字符串。如果有一个以上的标记名,则假定它们是嵌套的,从左到右指定,从最外面的标记到最里面的标记。*(星号)字符是匹配任何标签的通配符。

为了更好地说明这一点,让我们看看下表中的一些匹配值示例。

为匹配的最内层标签触发一个规则。如果相同的标记有多个规则定义,CSP编译器会通过确定哪个匹配值最具体来确定使用哪个规则。例如,AAA/ BBB的规则比BBB的规则更具体。类似地,指定属性值的规则,比如BBB[CCC],比不指定属性值的规则BBB更具体。

标签匹配的示例

匹配值 规则被触发:
AAA 每当遇到<AAA>标记时:<AAA></AAA>
AAA/BBB 每当遇到直接嵌套在<AAA>标签中的<BBB>标签时:<AAA> <BBB></BBB> </AAA>
AAA/*/BBB <BBB>标签嵌套在<AAA>标签的任何地方时:<AAA><FFF> <BBB></BBB> </FFF></AAA>
AAA[CCC] 当遇到带有CCC属性(有任何值)的<AAA>标签时:<AAA CCC= " 10 " ></AAA>
AAA[CCC=22] 当遇到CCC属性值为“22”<AAA>标签时:<AAA CCC= " 22 " ><AAA>
AAA[CCC=22]/*/BBB <BBB>标签嵌套在具有值为“22”CCC属性的<AAA>标签中的任何地方时:<AAA CCC= " 22 " ><FFF> <BBB></BBB> </FFF></AAA>

规则操作中的服务器端表达式和代码

规则中的操作可能包含在执行页面(运行时)或编译页面(编译时)时执行的表达式和代码。

操作中的运行时表达式

要在操作中指定运行时表达式,请使用可以在CSP页面中使用的相同的#(expr)#语法。
例如,下面是一个规则的定义,它定义了一个<TODAY>标签,使用Caché $ZDATE命令显示当前时间:

<csr:rule name="TODAY" match="TODAY" empty>
<csr:action>
Today is: <b>#($ZDATE($H))#</b>
</csr:action>
</csr:rule>

如果你加载了这个规则,你可以把它放在CSP页面的主体中:

<TODAY>

当请求页面时,显示当前日期。

动作中的编译时表达式

要在操作中指定编译时表达式,请使用##(expr)##语法。
例如,下面是一个规则的定义,该规则定义了一个标记<LASTMOD>,该标记显示CSP页面最后一次编译的时间。
在编译页面时计算##()##表达式。
计算表达式的结果成为生成的CSP页面的静态部分。

<csr:rule name="LASTMOD" match="LASTMOD" empty>
<csr:action>
This page was last compiled on: <b>##($ZDATE($H))##</b>
</csr:action>
</csr:rule>

可以在运行时表达式中包含编译时表达式。
在下面的例子中,第一个$H在运行时计算,给出当前日期。
第二个函数在编译页面时计算,返回页面编译的日期。

This page is #(+$H - ##(+$H)##)# days old.

<script>操作中的标签

类似地,可以在一个操作中包含多行代码,使用<script language=cache runat=server>标记表示运行时代码,使用<script language=cache runat=compiler>标记表示编译时代码。
例如,下面是一个规则,它创建了一个包含100项的无序列表:

<csr:rule name="BIGLIST" match="BIGLIST" empty>
<csr:action>
<ul>
<script language="Cache" runat=server>
For i = 1:1:100 {
    Write "<li>Item " _ i _ $C(13,10)
}
</script>
</ul>
</csr:action>
</csr:rule>

如果你加载了这个规则,你可以像这样把它放在CSP页面的主体中:

<BIGLIST>

当请求该页面时,将显示一个包含100项的无序列表。

标签:自定义,##,标签,第四十六章,编译,规则,表达式,页面
From: https://www.cnblogs.com/yaoxin521123/p/16887905.html

相关文章