专门从网上收集各种有关blogger设计的文章

2007年11月14日星期三

用于布局的窗口小部件标记

 

创建窗口小部件的基本 <b:widget> 标记在用于布局的页面元素标记中介绍。如果您只想使用"页面元素"标签完成所有工作,那么了解这里的内容就已经足够了。不过,如果您想要更加精细的控制,并且在"编辑 HTML"页的"扩展窗口小部件模板"模式下工作,本文会告诉您可在窗口小部件中放入哪些元素。

首先要添加结束标记。因此:
<b:widget [...属性...]/>
就变成:
<b:widget [...属性...]>
</b:widget>

现在,让我们来讨论可以在标记之间放置哪些元素。

包含

窗口小部件的内容包含在"includable"段中,其格式如下:
<b:includable id='main' var='thiswidget'>
    [在此插入您想要的任何内容]
</b:includable>

属性如下:

  • ID:(必需)由字母和数字组成且独一无二的标识符。
  • var:(可选)由字母和数字组成的标识符,用于引用此段内的数据。(请参阅下面的"数据"部分。)

每个窗口小部件都应有一个 id='main' 的可包含内容。这样通常会包含此窗口小部件可显示的大多数或全部内容,而这些内容大多是您所需要的。

如果您有多个具有不同 ID 的可包含项,则系统无法自动显示这些可包含项。不过,如果让其中一个可包含项包含 id='new',则可在主包含项中以 <b:include name='new' /> 格式引用该项,而该项也会如此显示。

b:include 标记的属性如下:

  • name:(必需)由字母和数字组成的标识符。应与同一窗口小部件中现有 b:includable 的 ID 匹配。
  • data:(可选)要传递到 includable 段的表达式或数据片断。在 includable 段中,这也是 var 属性的值。

下例演示如何使用 b:includableb:include。"循环"和"数据"将在本文的稍后部分介绍。此处需要了解的主要内容是"main"段如何将"post"段包含在内。它将自己命名为"i"的帖子传递下去,而包含在内的段则引用它作为变量"p"的值,然后输出标题。

<b:includable id='main'>
   <b:loop var='i' values='posts'>
      <b:include name='post' data='i'/>
   </b:loop>
</b:includable>
<b:includable id='post' var='p'>
   Title: <data:p.title/>
</b:includable>

如果想在不同的位置重复使用一段代码,"包含"是最有用的方法。您可以只写这些代码一次,将其置入 b:includable 中,然后在需要时使用 b:include。如果您不需要这样做,那么可以只使用单个主包含项,而忽略其他部分。(请注意,系统会自动包含 main includable 段,因此没有必要添加 <b:include name='main'/>。)

数据

事实证明,data: 标记是最重要的标记之一,因为它才是呈现所有实际内容的途径。此标记的示例如下:
<data:title/>
or
<data:photo.url/>

第一个示例最简单,且适用于大多数的窗口小部件,因为大多数窗口小部件都有标题。此属性只需要输出窗口小部件的标题即可。第二个示例显示较复杂的变量,我们从中选取了一个特殊组件。对个人资料窗口小部件来说,photo 可包含 urlheightwidth 等组件。使用符号 (".") 表示我们需要此照片的网址,而不是其他内容的网址。

使用 data: 标记,您可以访问很多数据,且此标记会因您所使用的窗口小部件不同而异。我们提供了一份完整的列表帮助您查找需要的数据。

循环

b:loop 标记可让您多次重复一段内容。如果要输出指定页面帖子列表中的每个帖子、评论列表中的每条评论或标签列表中的每个标签等项目,这是最常用的标记。使用循环的一般格式为:

<b:loop var='identifier' values='set-of-data'>
   [此处为重复的内容]
</b:loop>

"identifier"部分可以是任意选择的名称,每次执行循环时,都会使用列表中每个新项目的标识符。常见的做法就是将其简称为"i"。您为值指定的一组数据可以是 数据标记文章项目列表中的任何一段数据。例如,在博客帖子窗口小部件中,posts 就是一个列表。下列代码循环执行到每个帖子,输出每个帖子的标题,标题两侧为标题标记。

<b:loop var='i' values='data:posts'>
   <h2><data:i.title/></h2>
</b:loop>

请注意"i"如何依次取用每个帖子的值,使您能从每个帖子中取得标题。

条件循环

您可以使用 b:ifb:else 在某些位置显示特定内容,而在其他位置不显示。一般格式如下:

<b:if cond='condition'>
   [条件为"真"时显示的内容]
<b:else/>
   [条件为"假"时显示的内容]
</b:if>

b:else 标记为可选。如果没有此标记,输出结果可以是 b:if 段列出的内容或空白。但是,无论哪种情况,都需要添加结束标记 </b:if>

关于"条件",您可以置入任何为真或假的内容。某些数据标记本身就是真或假值,如帖子上的 allowComments。对于其他数据段,您可以通过与特定的值进行比较来得出真或假结果。请见下例:

  • <b:if cond='data:post.showBacklinks'>如果当前帖子设置为显示反向链接则为真。
  • <b:if cond='data:blog.pageType == "item"'>如果当前页为项目页(帖子页)则为真。
  • <b:if cond='data:displayname != "Fred"'>如果不是张三的显示名称则为真。
  • <b:if cond='data:post.numComments > 1'>如果当前帖子有多条评论则为真。

用于布局的窗口小部件标记

0 评论: