设置标签的参数


可以通过三种方式设置标签的参数

1. 通过使用显式值- 例如

<cms:show "Hello World" />

或者

<cms:repeat count='4'>
    This line gets repeated
</cms:repeat>

在上面的代码片段中,“Hello World”和“4”是用作参数的文字值。
请注意,显式值始终包含在引号(单引号或双引号)中

2. 通过使用变量-例如

<cms:show k_template_name />

或者

<cms:set my_count='4' />
<cms:repeat count=my_count>
    This line gets repeated
</cms:repeat>

在上面的代码片段中,k_template_namemy_count是用作参数的变量。
请注意,任何未被引号括起来的值都被 Couch 视为变量

3. 通过使用另一个标签的输出

我们知道,在呈现模板时,每个标签都会被其输出(可能是空白)替换。
此功能可用于通过使用另一个标签的输出来设置标签的参数。

<cms:set message="<cms:show 'Hello World' />" />
<cms:show message />

在上面的代码片段中,消息将设置为“Hello World”,这是嵌套显示标签的输出。 请注意嵌套标签总是用双引号括起来。

注意 -
如果使用单引号,Couch 认为参数的值是一个明确的值。
如果使用双引号,Couch 会将值视为显式值或嵌套标记的输出。
如果不使用引号,Couch 会将值视为变量。


这是非常重要的一点,因为在设置参数时很容易忘记引号,例如- 在传递给count
<cms:repeat count=4></cms:repeat>的值上方的代码片段中未包含在引号中,因此 Couch 不会将其视为显式值“4”,而是将其视为名为 4 的变量,并尝试使用名为“4”的变量的值作为参数。顺便说一下,变量名以数字开头是非法的,因此 Couch 会抛出错误。但是如果这个值是一个文本字符串,例如
<cms:show var=Hello />Couch 会使用一个不存在的变量Hello的值作为show参数,那么它什么也不会打印。

嵌套参数

标签嵌套的深度没有限制。也就是说,一个标签被用作另一个标签的参数,它本身可以有另一个标签作为它自己的参数等等。因此 -

<cms:set message="<cms:show "<cms:show 'hello' />" /> world" />

看到一个 Couch 标签被用作另一个 Couch 标签的参数时,请不要感到困惑。
从最里面的嵌套标签开始,尝试用它的输出替换它 -

<cms:set message="<cms:show "<cms:show 'hello' />" /> world" />
<cms:set message="<cms:show "hello" /> world" />
<cms:set message="hello world" />

一切都应该有意义。

上面给出的例子相当极端和徒劳,但使用一个标签的输出作为另一个标签的输入是一种非常强大的机制,我们将经常使用它来解决一些非常棘手的问题。

高级(如果您不想深入研究嵌套标签,请跳过以下部分):

作为一个更实际的例子,请考虑以下非常有用的片段 -

<cms:if "<cms:exists "<cms:show k_page_name/>.inc" />" >
    <cms:embed "<cms:show k_page_name/>.inc" />
</cms:if>

别担心,我们会用它们的输出替换标签,一切都会开始变得非常有意义。
上面的代码片段使用了三个新标签 - ifexistsembed
您可以在文档中找到更多关于它们的信息,但现在简要介绍一下这些标签就可以了。

如果传递给if 标签的参数为“1”,它会输出包含在其开始标签和结束标签之间的任何内容,否则不输出。
exists期望传递给它的参数是文件(或文件夹)的名称。它测试给定的文件/文件夹是否实际存在,如果存在,则输出“1”,否则输出“0”。
最后,嵌入标记期望传递给它的参数是一个文件名。然后它简单地读取文件并将其内容作为自己的输出返回。

有了这个背景,让我们尝试用它们各自的输出替换标签。
总是从最里面的标签开始,这里恰好是show标签。
我们已经熟悉了show标签。

<cms:show k_page_name/>

- 传递给它的参数没有引号,所以它必须是一个变量。每次执行页面(请参阅pages )时,Couch 都会设置k_page_name
变量以保存页面名称。因此,如果当前正在执行的页面是about-us ,则k_page_name的值将是about_us而如果正在执行的页面是contact-us,则k_page_name将设置为contact-us

假设当前页面是关于我们的,用它的输出替换show标签将导致 -

<cms:if "<cms:exists "about-us.inc" />" >
    <cms:embed "<cms:show k_page_name/>.inc" />
</cms:if>

假设名为“about-us.inc”的文件确实存在。在这种情况下, exists标签的输出将为“1”。将 exists 替换为它的输出结果 -

<cms:if "1" >
    <cms:embed "<cms:show k_page_name/>.inc" />
</cms:if>

由于传递给if的参数为“1”,它将继续执行其中的内容并返回输出。-使用我们的替换方法解析if的内容-

<cms:if "1" >
    <cms:embed "about-us.inc" />
</cms:if>

假设about-us.inc的唯一内容是 -
<h1>Hello I am About Us</h1>,这将是嵌入标签 的输出,所以我们最终是 -

<cms:if "1" >
    <h1>Hello I am About Us</h1>
</cms:if>

最后是if -的输出

<h1>你好我是关于我们</h1>

有了我们目前所掌握的信息,我们就可以继续研究可编辑区域了。