在我们增加修改系统标签之前,我们有必要先问一下自己,SiteWeaver系统提供的标签是不是真的满足不了我的需求了?一般来说,我们并不推荐随便修改,增加系统的标签,一方面代码加多了可能会影响系统运行的效率,另一方面,如果是修改不当,还可能影响系统的正常运行或者造成安全隐患,所以我们要充分利用系统标签的可扩展性:
以文章频道为例子,有时候,我们觉得系统标签输出的格式不适合我们的要求,比如,我们要改行高,我们加下划线,我们要改默认的字体,颜色等属性。这些,其实都可以通过自定义Css控制参数来实现。
1.利用GetArticleList自定义CSS控制参数,输出自己自己设计的样式。
http://tech.powereasy.net/handbook/cms2006/label/1656.html
有时候可能我们有更高的要求,比如我们需要自己定义每一行的样式,标题+作者+点击数+时间,或者我们需要定义几行,几列后插入一个图片之类的来点缀一下,那么其实也可以用系统标签来实现,下面我们来看一下自定义循环列表标签。
2、充分领用自定义循环列表标签的灵活性
自定义循环列表标签【ArticleList(参数列表)】列表内容【/ArticleList】是
有括号【】括起来的标签是系统里面一种比较特殊的标签,这类标签使用起来非常灵活,这样的标签都对应有一个标签集,定义了在这个大标签里面能解析的标签。通过这个标签,我们可以自己排版,然后输出,自由程度非常高,自定义循环列表标签里面能解析的标签集有:
{$ClassID} //所属栏目ID
{$ClassName} //所属栏目名称
{$ParentDir} //所属栏目的父目录
{$ClassDir} //所属栏目的所在目录
{$Readme} //所属栏目的说明
{$ClassUrl} //所属栏目的链接地址
{$ArticleUrl} //文章的链接地址
{$Subheading} //文章副标题
{$ArticleID} //文章的ID
{$UpdateTime} //文章更新时间
{$Stars} //文章评分等级
{$Author} //文章作者
{$CopyFrom} //文章来源
{$Hits} //点击次数
{$ReadPoint} // 文章阅读点数
{$Inputer} //文章录入者
{$Editor} //责任编辑
{$Title} //文章正标题,字数由参数TitleLen控制
{$Intro} //文章简介
{$Content} //文章正文内容字数由参数ContentLen控制
{$Top}{$Hot}{$Elite} //显示当前文章的属性(固顶、热门、推荐)
{$ArticlePic(width,height)} //显示图片文章,width为图片宽度,height为图片高度
{$Number} //显示123……样式序号(SP3新增功能)
{$TitleOriginal} //显示完整标题(SP3新增功能)
我们可以自由组合标签集里面的标签,然后循环输出
【ArticleList(参数列表)】列表内容【/ArticleList】对比代码来理解可以是
Do while not rs.eof
列表内容
Rs.movenext
Loop
也就是我们定义好列表内容之后,解析标签的时候就循环输出,这个理解起来比较简单。这里不再讲解。
可能有比较多人对这个标签自带的换行换列标签【Cols=数字|HTML代码】 【Rows=数字|HTML代码】
循环标签不大理解。下面我来详细讲解一下。
首先我们看一下只有一种循环标签的效果:
【ArticleList(参数列表)】【Cols=i|Cols内容】标签内容【/ArticleList】
如果是这种结构的话用可以用这样的代码来辅助理解:
Do while not rs.eof
For Cols=1 to i
标签内容
Rs.movenext
Next
Cols的内容
Loop
也就是说,我们标签内容循环i次之后,插入Cols里面定义的内容,下面看两个具体例子:
我们要实现一行一列,两行之后插入一条虚线,那么我们代码要如何来实现:
<table>
【ArticleList(参数列表)】【Cols=2|<tr><td><hr></td></tr>】<tr><td>{$Title}<td></tr>【/ArticleList】
</table>
这里我们可以看到<table></table>这个代码是写在循环列表标签外面的,不参与循环。
我们这里定义了Cols = 2,也就是循环两条记录之后才会插入Cols里面定义的内容。
取出第一条记录的时候,这个标签解析成:
<table>
<tr><td>第一条记录<td></tr>
</table>
取出第二条记录的时候,代码解析成
<table>
<tr><td>第一条记录<td></tr>
<tr><td>第一条记录<td></tr>
</table>
由于我们前面定义了Cols = 2 的时候插入Cols里面定义的内容,所以这个时候程序自动插入<tr><td><hr></td></tr>,也就是代码解析成
<table>
<tr><td>第一条记录<td></tr>
<tr><td>第一条记录<td></tr>
<tr><td><hr></td></tr>
</table>
继续循环下去的效果:
<table>
<tr><td>第一条记录<td></tr>
<tr><td>第一条记录<td></tr>
<tr><td><hr></td></tr>
<tr><td>第三条记录<td></tr>
<tr><td>第四条记录<td></tr>
<tr><td><hr></td></tr>
………………………
</table>
这样循环下去,就实现了两行之后插入插入一个虚线的效果。
下面再举一个例子:我们要实现每行两列的效果。要如何构造循环:
<table><tr>
【ArticleList(参数列表)】【Cols=2|</tr><tr>】<td>{$Title}<td>【/ArticleList】
</tr></table>
可能有些人不大明白为什么这样写就是两列一行的效果。下面我们还是来看一下标签是如何解析的:
取出第一条记录的时候:这个标签解析成
<table><tr>
<td>第一条记录<td>
</tr></table>
取出第二条记录的时候,这个标签解析成:
<table><tr>
<td>第一条记录<td>
<td>第二条记录<td>
</tr></table>
由于我们前面定义了Cols = 2 的时候插入Cols里面定义的内容,所以这个时候程序自动插入</tr><tr>,也就是代码解析成
<table><tr>
<td>第一条记录<td>
<td>第二条记录<td>
</tr><tr>
</tr></table>
继续循环下去的结果:
<table><tr>
<td>第一条记录<td>
<td>第二条记录<td>
</tr><tr>
<td>第三条记录<td>
<td>第四条记录<td>
</tr><tr>
…………………
</tr></table>
这样循环下去,就实现了两列一行的效果。。
下面我们在看一下有自定义循环列表标签里面有两个循环标签的情况:
【ArticleList(参数列表)】【Cols=i|Cols内容】【Rows=j|Row内容】循环内容【/ArticleList】
如果是这种结构的话用可以用这样的代码来辅助理解:
Do while not rs.eof
For Row=1 to j
For Cols=1 to i
循环内容
Rs.movenext
Next
Cols的内容
Next
Row的内容
Loop
下面我们也举个例子来说明一下吧:
如何实现每行两列,三行之后就插入虚线的效果?
我们来看一下如何都能定义循环代码:
<table><tr>
【ArticleList(1,0,0,0,50,False,False,"",0,1,True,0,200)】【Cols=2|</tr><tr>】【Rows=3|<td colspan="2"><hr></td></tr><tr>】<td>{$Number}:{$Title}</td>【/ArticleList】
</tr></table>
这里我们定义了两列之后就输出:</tr><tr>
三行之后就输出:<td colspan="2"><hr></td></tr>
只看代码可能比较难理解,下面我们还是看一下这个标签是如何解析的。
解析第一条数据:
<table><tr>
<td>1:第一条记录</td>
</tr></table>
解析第二条记录,由于定义了【Cols=2|</tr><tr>】,所以系统自动补充上</tr><tr>
<table><tr>
<td>1:第一条记录</td> <td>2:第二条记录</td></tr><tr> //到这里可以看成一次Row循环
</tr></table>
这样解析到第六条数据
<table><tr>
<td>1:第一条记录</td> <td>2:第二条记录</td></tr><tr> //第一次Row循环
<td>3:第三条记录</td> <td>4:第四条记录</td></tr><tr> //第二次Row循环
<td>5:第五条记录</td> <td>6:第六条记录</td></tr><tr> //第三次Row循环
</tr></table>
到这里,由于执行了三次Row循环了,我们设置的【Rows=3|<td colspan="2"><hr></td></tr><tr>】就起作用了,也就是系统会自动加入<td colspan="2"><hr></td></tr><tr>,那么解析完第六条数据后的最终结果
<table><tr>
<td>1:第一条记录</td> <td>2:第二条记录</td></tr><tr> //第一次Row循环
<td>3:第三条记录</td> <td>4:第四条记录</td></tr><tr> //第二次Row循环
<td>5:第五条记录</td> <td>6:第六条记录</td></tr><tr> //第三次Row循环
<td colspan="2"><hr></td></tr><tr>
</tr></table>
按照这样循环下去,就可以实现一行两列,三行输出下划线的效果了。