SiteFactory标签解析大揭秘(五)

作者:动易网络 来源:本站原创 点击数: 发布时间:2008年08月06日

    本节文章的将为您介绍SiteFactory模板标签中比较特别的一类,数据源标签。

    关键字:数据源 XSLT节点

 

一、数据源标签的概念
    首先我们需要弄清楚一个基本概念,数据源标签本质上也是普通的查询列表类标签,它与普通标签的区别只是在模板内的调用方法不同。数据源标签的基本设计思路来自微软的.NET系统,与C#中提供的数据源+XML声明的调用方式十分类似。

 

二、标签解析工作原理及与普通标签的区别
    在本系列第一节中,笔者曾经简单介绍过数据源标签的工作模式与区别,现在让我们重新开始来详细说明数据源标签的工作方式,我们假设有普通列表标签名为“标签一”,页面模板内的调用方式为:
{pe.label id=”标签一” /}

下面简单图示它的解析流程:


图片点击可在新窗口打开查看此主题相关图片如下:

    可以看到,标签一读取的数据,所有的处理都在标签内部完成,处理结果在页面内一个完整的“块”内进行显示。

    我们再看看还是这个标签,我们把它转化为普通数据源标签后,页面内调用方式变为:

{pe.datasource id=”标签一”/}
页面内其他代码
{pe.field id=”标签一” fieldname=”字段一”/}
广告代码
{pe.field id=”标签一” fieldname=”字段二”/}
广告代码
{pe.field id=”标签一” fieldname=”字段三”/}
页面内其他代码

 

    它又是如何在页面上显示的呢?请看下图:


图片点击可在新窗口打开查看此主题相关图片如下:

 
    转化为数据源类标签后,从上图可以看到,处理过程中多了一个XML树的解析过程,标签被分化为若干节点,其中每个节点的内容都是数据库中对应的字段内容。

    到这里,我们可以总结出普通标签与数据源标签的不同。普通标签建立后即可调用并自动在页面模板的对应位置显示内容,而数据源标签的调用方法,则是需要首先在页面顶部引入数据源标签,同时还需要在模板对应的位置再引入字段标签才能显示内容。

 

三、XSLT参数说明
    首先说明一下,数据源标签支持本标签建立时创建的所有参数,但与普通标签不同的是它不支持通用参数span及class,而额外支持一个通用参数xslt,这是一个需要重点说明的参数,它只有两个参数值可选,true或者false,使用方法如下:

{pe.datasource id=”标签一" xslt=”true” /}

    它的作用十分重要,是指定数据源标签是否打开XSLT解析的开关,当它设置为真时,数据源解析到XML树结构后,会增加一个XSLT解析的过程,以格式化输出结果,增加的流程如下图:


图片点击可在新窗口打开查看此主题相关图片如下:

    为什么要指定这么一个参数呢?举例说明一下。当标签打开默认数据源输出方式后,字段内容不经任何处理就输出为XML节点,当您只需要输出简单内容时,这种方式效率最高,但内容格式无法得到控制,举例如下:

 

    假设字段一实际内容为:12345
    普通数据源标签调用得到的内容为:12345
    增加XSLT解析后,输出就可以格式化为:$12345.00

 

    那么,我们如何去控制格式化方法呢?以上面的输出为例简单说明:

 

    在普通数据源标签状态下:标签模板失去作用,数据由XML引擎直接发送到页面,节点名称也由字段名称自动生成,调用方法为:{pe.field id=”标签一" fieldname=”字段一"/}

 

    增加xslt参数后:标签模板应依照以下固定方式编写

 


<节点一>
$

<节点二>
字段二的处理过程…

<节点三>
字段三的处理过程…

 

    那么,我们在页面内的调用方法变为:{pe.field id=”标签一" fieldname=”节点一"/}
    注意上面fieldname的变化,这就是XSLT处理的关键,我们在xslt=”true”的状态下,需要人工建立输出节点,并设置节点内的解析方法,同时也带来的好处是,节点可以脱离数据库的约束,比如上例中,我们甚至可以手动建立
<节点四>
节点四内容

    那么就可以在页面模板中通过: {pe.field id=”标签一" fieldname=”节点四"/},来调用手工写在节点四中的内容。

 

四、field字段标签参数说明

    {pe.field id=””/}这是一个与数据源标签配套使用的字段显示标签,它是一类十分特殊的标签。它的特点是:
一 它无须人工建立,而是随着数据源标签自动产生。
二 它没有可定义的参数,而只有几个固定参数。

 

下面是全部参数的说明:

 

{pe.field
id=”数据源名称”
fieldname=”显示节点名”
htmldecode=”是否进行HTML解码显示”
length=”输出字符长度”
charge=”是否收费标签”
shower=”收费权限不足时,是否显示错误信息”
inlabelproc=”是否处理内部的嵌套标签” /}

 

五、循环标签
    数据源标签并不是只能显示查询到的一条数据,配合循环声明,它也可以象普通列表标签一样按格式显示查询到的若干条记录,循环声明标签常用格式如下:

 

{pe.datasource id=”标签一”/}
{PE.Repeat id=”标签一” loop=”10”}
{PE.Field.AutoId/}
{pe.field id=”标签一” fieldname=”字段一”/}
其他摸板代码
{pe.field id=”标签一” fieldname=”字段二”/}
{pe.field id=”标签一” fieldname=”字段三”/}
{/PE.Repeat}

 

    看到了吧,上面绿色的标签对就是循环定义标签,很简单的调用方式,它只有两个参数:id是数据源对应的,而loop则是指定最大循环次数,这里的具体循环次数是这么定义的:

如:数据源查询数量 》 loop定义的值 :输出loop定义的数量
如:数据源查询数量 《 loop定义的值 :输出数据源查询出的数量

{PE.Field.AutoId/}
    这个用来输出循环的记数,一般的输出顺序为0,1,2,3….,如果你需要从3开始输出,那么可以通过在loop标签中定义loopbase=”3” 来强制从3开始输出,举例说明:

1:
{PE.Repeat id=”标签一” loop=”10”}
{PE.Field.AutoId/},
{/PE.Repeat}
输出为 0,1,2,3,4,5,6,7,8,9,

2
{PE.Repeat id=”标签一” loop=”10” loopbase=”3”}
{PE.Field.AutoId/},
{/PE.Repeat}
输出为 3,4,5,6,7,8,9,10,11,12,