CMSware内容列表CMS LIST
导航:返回上一页
该调用标签可实现各种类型的文章(图文)列表的调用.特别提醒:使用AutoMini函数自动缩略图需要php支持GD扩展
本标签对应的系统调用函数为CMS_LIST()。
属性 | 必需 | 默认值 | 描述 |
---|---|---|---|
<CMS action="LIST" return="List" NodeID="" Num="" NodeGUID="" Orderby="" where="" TableID="" ignore="" Tpl="" Cache="" returnKey="" /> | |||
NodeID | 是 | "" |
调用结点ID
|
Num | 是 | "" |
调用条数
|
NodeGUID | 否 | "" |
调用结点唯一标识符
注意:NodeGUID不能和NodeID同时使用,并且NodeGUID优先级高于NodeID。结点唯一标识符建议使用”域名.结点名“的形式以保证唯一性。(对于对外发布共享的结点更需要注意这点) |
OrderBy | 否 | - |
排序 一般无需设置
|
where | 否 | - |
用于附加额外的查询条件 比如where="c.Photo != "实现了只调用Photo字段不为空的内容记录,可以实现图文调用.这里的" c"用于区别数据表,以免导致岐义:c代表 cmsware_publish_1, co代表cmsware_plugin_base_count,i代表cmsware_content_index.注意:mysql5的用户,因为字段里NULL值的问题,如果要判断某个字段为空值,请用 c.field IS NOT NULL |
TableID | 否 | - |
内容模型ID 一般无需设置,系统根据NodeID的值可以自动获TableID
|
ignore | 否 | - |
忽略结点ID
|
Tpl | 否 | - |
指定调用的子模版
|
Cache | 否 | - |
模版中的CMS调用通过使用Cache,可以大幅提升批量更新的效率. 该标签只有门户版可用
|
returnKey | 否 | - |
可以定义内容列表记录返回那些字段,一般列表只需要获得Title即可,而无需返回Content 等字段,使用此属性,可以一定程度上提高更新效能。 该标签只有门户版可用
|
键名 | 类型 | 描述 |
---|---|---|
返回2维数组($List) | ||
IndexID | string | 内容索引ID |
ContentID | int | 内容ID |
NodeID | int | 归属结点ID |
URL | string | 内容URL地址 |
PublishDate | string | 内容发布时间戳 |
Top | int | 置顶权重 |
Sort | int | 排序权重 |
Pink | int | 精华权重 |
内容模型字段(N) | - | 根据具体的内容模型返回不同的字段值 |
普通内容列表[ ]
例子 1:简单文章列表调用
效果图:
调用代码:
<CMS action="LIST" return="List" NodeID="2,5" Num="10" /> <!--调用结点ID为2和5的前10条记录--> <LOOP name="List" var="var" key="key"> - [<a href="[$var.NodeURL]" target="_blank" > [$var.NodeName] </a>] <a href="[$var.URL]" target="_blank" title="[$var.Title]" > [@CsubStr($var.Title,0,16)] </a> <!--显示文章链接,自动截取标题长度16--> <br> </LOOP>
例子 2:循环中实现折行显示(1行显示多条),以下是一行显示3条的调用例子
效果图:
调用代码:
<CMS action="LIST" return="List" NodeID="2" Num="9" /> <table cellspacing="0" cellpadding="0" width="98%" align="center" border="0"> <tbody> <tr> <LOOP name="List" var="var" key="key"> <if test="$key==0" > <td width="33%" height="16"> ·<a href="[$var.URL]" target="_blank"> [$var.Title] </a> </td> <elseif test="$key%3==0"> <!--将这里的3修改为2,就可以实现一行显示2篇文章,以此类推 --> </tr> <tr> <td width="33%" height="16"> ·<a href="[$var.URL]" target="_blank"> [$var.Title] </a> </td> <else> <td width="33%" height="16"> ·<a href="[$var.URL]" target="_blank"> [$var.Title] </a> </td> </if> </LOOP> </tr> </table>
例子3:奇偶行背景不同或色彩不同的调用方法
<CMS action="LIST" return="List" NodeID="20" Num="9" OrderBy="PublishDate" / > <table width="98%" align="center" border="0"> <tbody> <LOOP name="List" var="var" key="key"> <tr> <!---如果循环变量能被2除尽,就是偶数了---> <if test="$key % 2==0"> <td width="33%" height="16" backgroud='#ff0000'> ·<a href="[$var.URL]" target="_blank"> [$var.Title] </a> </td> <else> <td width="33%" height="16" backgroud="#aa1111"> ·<a href="[$var.URL]" target="_blank"> [$var.Title] </a> </td> </if> </tr> </LOOP> </tbody> </table> </tbody> </table>
例子4:取出最近30天的内容列表
<CMS action="LIST" return="List" NodeID="121" Num="6" where="i.PublishDate >= UNIX_TIMESTAMP( )-(3600*24*30)" /> <LOOP name="List" var="var" key="key"> <td align="left" height="34" valign="top"> [@CsubStr($var.Title,0,15)] </td> </LOOP>
有时想按内容的发布时间和当前时间比较来判断取出几天内的,或指定的时间段内的列表,因为思维(CMSware)保存在数据库中的发布时间字段PublishDate是按Unix时间戳方式保存的数值,必须利用Mysql数据库提供的Unix时间戳函数 UNIX_TIMESTAMP来返回当前服务器时间戳数值,然后和PublishDate字段做比较,最后我们利用思维(CMSware)调用中的 where参数,给出查询数据库条件语句,从而判断发布时间取回内容(小知识:Unix时间戳是指从'1970-01-01 00:00:00'GMT开始的秒数)
请参考下面的范例
范例1:取发布时间在1天内的条件,改动1即可变天数(意思是发布时间戳比当前时间戳大1*86400秒,即一天)
where="i.PublishDate>=UNIX_TIMESTAMP()-(1*86400)"
范例2:取发布时间在指定时间段内的条件(意思是发布时间戳大于第一个时间并小于第二个时间)
where="(i.PublishDate>=UNIX_TIMESTAMP('2005-07-01') and i.PublishDate>=UNIX_TIMESTAMP('2005-09-30')"
或可以精确到秒
where="(i.PublishDate>=UNIX_TIMESTAMP('2005-07-01 00:00:00') and i.PublishDate>=UNIX_TIMESTAMP('2005-09-30 23:59:59')"
例子 5:精华文章列表调用
调用代码:
<CMS action="LIST" return="List" NodeID="all-6" Num="10" where="i.Pink=1" /> <!--"all-6"是调用结点ID为6下的前10条记录(含子结点)--> <loop name="List" var="var" key="key" > - [<a href="[$var.NodeURL]" target="_blank" > [$var.NodeName] </a>] <a href="[$var.URL]" target="_blank" title="[$var.Title]" >[@CsubStr($var.Title,0,16)] </a> <!--显示文章链接,自动截取标题长度16--> <br> </loop>
例子 6:置顶文章列表调用
调用代码:
<CMS action="LIST" return="List" NodeID="all-6" Num="10" where="i.Top=1" /> <!--调用结点ID为6下的前10条置顶权重为1的记录(含子结点)--> <loop name="List" var="var" key="key" > - [<a href="[$var.NodeURL]" target="_blank" > [$var.NodeName] </a>] <a href="[$var.URL]" target="_blank" title="[$var.Title]" >[@CsubStr($var.Title,0,16)] </a> <!--显示文章链接,自动截取标题长度16--> <br> </loop>
补充:以下这句是表示调用所有置顶的
<CMS action="LIST" return="List" NodeID="all-55" Num="15" where="i.Top>0" />
以下这句是表示调用所有没置顶的
<CMS action="LIST" return="List" NodeID="all-55" Num="15" where="i.Top=0" />
注: i.Top是指模型的公共字段"置顶", 这个值等于0就表示没置顶,大于0就表示置顶
例子 7:最热文章列表调用
调用代码:
<CMS action="LIST" return="List" orderby="Hits_Total" TableID="1" num="10" Cache="1" /> <!--调用新闻系统模型(TableID=1)最热总点击前10条记录--> <loop name="List" var="var" key="key" > · [<a href="[$var.NodeURL]" target="_blank" > [$var.NodeName] </a>] <a href="[$var.URL]" target="_blank" title="[$var.Title]" >[@CsubStr($var.Title,0,16)] </a> (<font color="#ff6600">[$var.Hits_Total]</font>) <br> </loop>
注:你可以通过修改orderby实现本日最热、本周最热、本月最热以及总最热文章的调用。
- 本日最热:<CMS action="LIST" return="List" orderby="Hits_Today" TableID="1" num="10" />
- 本周最热:<CMS action="LIST" return="List" orderby="Hits_Week" TableID="1" num="10" />
- 本月最热:<CMS action="LIST" return="List" orderby="Hits_Month" TableID="1" num="10" />
- 总最热:<CMS action="LIST" return="List" orderby="Hits_Total" TableID="1" num="10" />
例子 8:最新文章列表调用
调用代码:
<CMS action="LIST" return="List" TableID="1" num="10" Cache="1" /> <!--调用新闻系统模型(TableID=1)最新发布10条记录 --> <loop name="List" var="var" key="key" > · [<a href="[$var.NodeURL]" target="_blank" > [$var.NodeName] </a>] <a href="[$var.URL]" target="_blank" title="[$var.Title]" >[@CsubStr($var.Title,0,16)] </a><span class="process" style="font-size:9px; ">([@date('m-d H:i', $var.PublishDate)])</span> <br> </loop>
例子 9:最热评论列表调用
调用代码:
<CMS action="LIST" return="List" orderby="CommentNum" TableID="1" num="15" Cache="1" /> <!--调用新闻系统模型(TableID=1)最热评论文章前10 条记录--> <loop name="List" var="var" key="key" > · <a href="[$PUBLISH_URL]comment.php?o=display&Id=[$var.IndexID]">[$var.Title]</a><span class="process">([$var.CommentNum])</span> <br> <!--[$PUBLISH_URL]为思维(CMSware)2.0新引入的模版变量,用于定义动态应用所在目录的URL--> </loop>
例子 10:结点唯一标识符调用
调用代码:
<CMS action="LIST" return="List" NodeGUID="com.cmsware.news.global" Num="20" /> <ul> <loop name="List" var="var" key="key"> <li>[$var.ContentID] <a href="[$var.URL]">[$var.Title]</a> </loop> </ul>
例子11:使调用和结点无关,即同一模版不作修改可以适用于不同结点
调用代码:
<CMS action="LIST" return="List" NodeID="{$NodeInfo.NodeID}" Num="page-10" /> <!--这里,我们用{$NodeInfo.NodeID}自动取得的结点ID值取代1,2,3....这样的具体的结点ID数字,这样,不管我们将它用于结点ID 为1还是ID为99的模版都不必修改 这里的值。如果写成NodeID="all-{$NodeInfo.NodeID}"则为当前结点,并且包含其子结点的通用调用。在结点的首页、最新内容、热点内容调用等处使用这样的调用可 以大大增强模版的通用型--> <LOOP name="List" var="var" key="key"> - [<a href="[$var.NodeURL]" target="_blank" > [$var.NodeName] </a>] <a href="[$var.URL]" target="_blank" title="[$var.Title]" >[@CsubStr($var.Title,0,16)] </a> <!--显示文章链接,自动截取标题长度16--> <br> </LOOP>
例子 12: 直接调用自定义字段里的选项内容
效果图:
(图一)
(图二)
(图三)
也就是我们可以直接调用 图1 里的不同类别的内容
调用代码:
<cms action="LIST" return="List" NodeID="self" where="c.sort='宾馆酒店'" /> <loop name="List" var="var" key="key" > <a href="[$var.URL]" title="[$var.title]" >[$var.title]</a><br> </loop>
例子13:模版中调用某个字段的具体值
比如,现在建了5个结点做下载频道(手机游戏、手机图铃、手机软件、PC端软件等等),栏目也是按照这个调用。
在内容模型里有一个“运行环境”字段叫“Environment ”,一个选择列(供选择的值是“SymbianS60;NGAGE;Symbian UIQ;SmartPhone;PocktPC;Palm;Linux;其他”等)。现在想调取比如“手机软件这个结点里所有运行环境是 SmartPhone的内容”或者“TableID=2的所有平台是SmartPhone的内容”
一个字段只有一个值时的调用代码:
<cms action="LIST" return="List" NodeID="2" where="Environment='SmartPhone'" />
例子14:只调用标题多于或等于20字的内容
可以通过在where参数里用mysql的字符串函数来给出取Title字段长度大于20的。比如
... where="CHAR_LENGTH(Title)>=20"
调用代码:
<CMS action="LIST" return="List" NodeID="{$NodeInfo.NodeID}" where="co.TableID=1 and CHAR_LENGTH(Title)>=20" num="10" Cache="1" /> <!--调用新闻系统模型(TableID=1)最新发布 10条记录--> <LOOP name="List" var="var" key="key"> <ul>[*] [@CsubStr($var.Title, 0, 21)] [/list]</LOOP>
例子15:既按门派又按经验高低排列人物名称
输出:
令狐冲:华山派:12000 岳不群:华山派:-38 灭绝师太:峨嵋派:500 小尼姑:峨嵋派:300
如果是先按门派再按经验高低排列人物名称这样子写OrderBy参数:
<cms action="LIST" return="List" NodeID="self" OrderBy="c.mengpai,c.jingyan" /> <loop name="List" var="var" key="key"> [$var.renming] : [$var.mengpai] : [$var.jingyan] </loop>
例子16:软件站常用的一种调用:软件名称以某个英文字母开头
调用字母"c"开头的代码:
<CMS action="LIST" return="List" NodeID="10" Num="10" where="c.SoftName LIKE 'c%' " /> <ul> <LOOP name="List" var="var" key="key"> <li>[$var.SoftName]</li> </LOOP> </ul>
例子17:忽略特定的内容的调用
示例说明:调用结点ID为1的栏目下的内容,先取出一篇有新闻图片的作为焦点新闻使用,然后列出不包含这篇焦点新闻的图文列表
调用代码:
<table> <tr> <td> <!--重要消息图文调用--> <CMS action="LIST" return="List" NodeID="1" Num="0,1" where="c.Photo != ''" /> <LOOP name="List" var="var" key="key"> <A href="[$var.URL]" title="[$var.Title]" target="_blank"> <img src="[@AutoMini($var.Photo,'200*160',$var)]" vspace="2" > </a> <table width="100%" border="0" cellpadding="0" cellspacing="2"> <tr> <td> <A href="[$var.URL]" target="_blank" title="[$var.Title]"> [@CsubStr($var.Title, 0, 16)] </A> </td> </tr> </table> </loop> <op exp="$IgnoreIndexID = $var.IndexID" /> <!--获取这条图片新闻的IndexID,下面的文章列表不再重复显示此图文--> </td> <td valign="top"> <!--重要消息文章列表调用--> <CMS action="LIST" return="List" NodeID="1" Num="10" where="c.Photo=''" /> <LOOP name="List" var="var" key="key"> <ul> <li> <if test="$var.Photo != ''" >[图] </if> <if test="$var.TitleColor != ''" > <A title="[$var.Title]" href="[$var.URL]" target="_blank"> <font color="[$var.TitleColor]"> [@CsubStr($var.Title, 0, 25)] </font> </A> <else> <A title="[$var.Title]" href="[$var.URL]" target="_blank"> [@CsubStr($var.Title, 0, 19)] </A> </if> </li> </ul> </LOOP> </td> </tr> </table>
例子18:内容页中根据发布时间来自动生成“上一篇”“下一篇”内容
示例说明:早于当前发布时间则显示为下一篇,晚于则显示为上一篇
调用代码:
<CMS action="LIST" return="List" NodeID="{$NodeID}" Num="1" where="i.PublishDate < {$PublishDate}" /> <LOOP name="List" var="var" key="key"> <li> 下一篇:<a href=[$var.URL]>[$var.Title]</a> [[@date('Y-m-d H:m:s', $var.PublishDate)]] <br> </li> </LOOP> <CMS action="LIST" return="List" NodeID="{$NodeID}" Num="1" where="i.PublishDate > {$PublishDate}" orderby="i.PublishDate ASC"/> <LOOP name="List" var="var" key="key"> <li> 上一篇:<a href=[$var.URL]>[$var.Title]</a> [[@date('Y-m-d H:m:s', $var.PublishDate)]] <br> </li> </LOOP>
分页文章列表[ ]
例子1 :分页文章列表调用
效果图:
调用代码:
<CMS action="LIST" return="List" NodeID="6" Num="page-10" /> <table cellspacing="0" cellpadding="0" width="550" border="0"> <tbody> <tr> <td> <ul> <LOOP name="List" var="var" key="key"> <li><a href="[$var.URL]" title="[$var.Title]" target="_blank"> [$var.Title] </a> <font color="#999999">[[@date('Y-m-d H:i:s', $var.PublishDate)]]</font><br></li> </LOOP> </ul> <table cellspacing="3" cellpadding="3" width="95%" align="center"> <tbody> <tr> <td align="right"> 页次:<font color=red><B> [$PageInfo.CurrentPage] </font>/<B> [$PageInfo.TotalPage] </B> 每页<B> [$PageInfo.PageNum] </B> 共 <B> [$PageInfo.TotalNum] </B> 分页: <!--使用list_page显示分页导航,用户可以定义自己的分页函数来实现不同形式的导航,$PageInfo里面包含着你的分页函数需要的参数--> [@list_page($PageInfo.TotalPage,$PageInfo.CurrentPage,$PageInfo.URL)] </td> </tr> </tbody> </table> <br> </td> </tr> </tbody> </table>
自定义文章列表分页导航样式
思维(CMSware)默认生成的列表分页样式是可以修改的。分页调用返回的“$PageInfo”数组结构如下:
属性 | 描述 |
---|---|
$PageInfo | |
$PageInfo.TotalNum | 总记录数 |
$PageInfo.TotalPage | 总页数 |
$PageInfo.CurrentPage | 当前页次 |
$PageInfo.PageNum | 每页记录数 |
$PageInfo.URL | 当前页URL |
$PageInfo.PageList | 默认分页导航 |
例子2:默认样式
效果图:
调用代码:
<CMS action="LIST" return="List" NodeID="self" Num="page-30" OrderBy="PublishDate DESC" /> <table cellspacing="0" cellpadding="0" width=550 border="0"> <tbody> <tr> <td class=c> <ul> <loop name="List" var="var" key="key" > <li> <a title="[$var.Title]" href="[$var.URL]" target="_blank"> [$var.Title] </a> <font color="#999999"> [[@date('Y-m-d H:i:s', $var.PublishDate)]] </font> <br> </loop> </li> </ul> <table cellspacing="3" cellpadding="3" width="95%" align="center"> <tbody> <tr> <td align="right">页次: <font color=red><B>[$PageInfo.CurrentPage]</font>/<B>[$PageInfo.TotalPage]</B> 每页<B>30</B>共<B>[$PageInfo.TotalNum]</B> 分页:[@list_page( $PageInfo.TotalPage, $PageInfo.CurrentPage, $PageInfo.URL)] <!--注意:动态发布的模版中这部分分页代码为 [@IndexPage($PageInfo.TotalPage, $PageInfo.CurrentPage, $PageInfo.URL)]--> </td> </tr> </tbody> </table> <br> </td> </tr> </tbody> </table>
例子3:自定义样式
效果图:
调用代码:
<CMS action="LIST" return="List" NodeID="self" Num="Page-3" OrderBy="PublishDate DESC" /> <table cellspacing="0" cellpadding="0" width=550 border="0"> <tbody> <tr> <td class=c> <ul> <loop name="List" var="var" key="key" > <li> <a title="[$var.Title]" href="[$var.URL]" target="_blank">[$var.Title]</a> <font color="#999999">[[@date('Y-m-d H:i:s', $var.PublishDate)]]</font><br> </loop> </li></ul> <table cellspacing="3" cellpadding="3" width="95%" align="center"> <tbody> <tr> <td align="right">页次:<font color=red><B>[$PageInfo.CurrentPage]</font>/<B>[$PageInfo.TotalPage]</B> 每页<B>30</B> 共<B>[$PageInfo.TotalNum]</B> 分页:[@wap_Page($PageInfo.TotalPage, $PageInfo.CurrentPage, $PageInfo.URL)] </td></tr></tbody></table> <br></td></tr></tbody> </table>
这里我们通过一个函数来自定义列表样式,这里我们使用wap_page()函数(定义在setting/cms.ini.php里)来实现.
function wap_page($PageNum,$CurrentPage,$sendVar) { $PageNum --; $CurrentPage--; if($PageNum == '' || $PageNum == -1) return false; if($CurrentPage > 0) { if(($CurrentPage-1) == 0) $link1 = $sendVar; else $link1= str_replace(".","_".($CurrentPage-1).".",$sendVar); $Page= "<a href='".$link1."' >上一页</a><br/>".$Page; } if ($CurrentPage < $PageNum) { $link1= str_replace(".","_".($CurrentPage+1).".",$sendVar); $Page= $Page."<a href='".$link1."' >下一页</a><br/>"; } return $Page; }
图文混排[ ]
例子 1:图文混排调用
效果图:
调用代码:
<CMS action="LIST" return="List" NodeID="6" Num="3" where="c.Photo != ''" /> <!--调用结点ID为6的前3条记录,附加where条件,判断 Photo字段不为空,用于实现下面的图文调用--> <table border="0" cellspacing="2" cellpadding="2" > <LOOP name="List" var="var" key="key" > <!--开始循环取值--> <tr> <td width="120" style="padding-left: 8px;padding-RIGHT: 8px;"> <img src="[@AutoMini($var.Photo,'120*100',$var)]" border="0" width="120" height="100"> <!--通过使用AutoMini函数自动生成尺寸为120*100的缩略图--> </td> <td valign="top" align="left" width="150"> <a href="[$var.URL]" target="_blank" title="[$var.Title]">[@CsubStr($var.Title,0,10)]</a> <!--显示文章链接,自动截取标题长度--> <br/> [@CsubStr($var.Intro,0,50)] [<a href="[$var.URL]" target="_blank" title="[$var.Title]">查看</a>] [<a href="[$PUBLISH_URL]comment.php?o=display&Id= [$var.IndexID] " target="_blank" >评论</a>] <!--显示文章简介,自动截取简介长度--> </td> </tr> </LOOP> <!--结束循环--> </table>
例子 2:图文列表调用
效果图:
调用代码:
<CMS action="LIST" return="List" NodeID="6" Num="3" where="c.Photo != ''" /> <loop name="List" var="var" key="key" > <td align="center" height="90"> <a href="[$var.URL]" target="_blank" title=" [$var.Title] "> <img src="[@AutoMini($var.Photo, '120*100', $var)]" border="0" > </a> <br> <a href="[$var.URL]" target="_blank" title="[$var.Title]">[@CsubStr($var.Title,0,10)]</a> </td> </loop>
例子 3:图文组合调用
效果图:
调用代码:
<table cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td style="padding-left: 8px" width="100"> <CMS action="LIST" return="List" NodeID="6" Num="1" where="c.Photo != ''" /> <loop name="List" var="var" key="key" > <a href="[$var.URL]" target="_blank" title="[$var.Title]"> <img src="[@AutoMini($var.Photo, '100*75', $var)]" border="0" > </a> </loop> </td> <td style="padding-top: 1px" valign="top" > <CMS action="LIST" return="List" NodeID="7" Num="5" /> <loop name="List" var="var" key="key" > ·<a href="[$var.URL]" target="_blank" title="[$var.Title]"> [@CsubStr($var.Title,0,10)] </a> <br/> </loop> </td></tr> <tr> <td valign="top" colspan="2" height="47"> <CMS action="LIST" return="List" NodeID="52,51,50" Num="5"/> <loop name="List" var="var" key="key" > [<a href="[$var.NodeURL]" target="_blank"> [$var.NodeName] </a>] <a href="[$var.URL]" target="_blank" title="[$var.Title]"> [@CsubStr( $var.Title,0,20)] </a> <br/> </loop> </td> </tr> </tbody> </table>
例子 4:一行多图组合调用
效果图:
调用代码:
<table width="100%" border="0" cellspacing="0" cellpadding="10"> <CMS action="LIST" return="List" NodeID="all-{$NodeInfo.NodeID}" Num="8" /> <tr> <--!例子中是一行两列,因而我们要从列数"td"开始做循环 --> <loop name="List" var="var" key="key" start="1"> <--!start="1"设置循环的起始点,避免有时候版面混乱--& gt; <td width="50%" align="center"> <a href="[$var.URL]" target="_blank"> <img src="[$var.Photo]" alt="企业标志图片" width="91" height="75" border=0 /> <br /> [@CsubStr($var.Title,0,16)] </a> </td> <if test="$key % 2 ==0"> </tr> <--!循环至列数为2的整数倍时停止这一行的循环,开始下一行 --> <tr> <--!下一行即下一个循环开始--> </if> </loop> <--!循环结束--> </tr> </table>