CMSware数据库调用CMS SQL

来自站长百科
跳转至: 导航、​ 搜索

导航:返回上一页

该调用标签可实现对数据库的直接查询调用.

本标签对应的系统调用函数为CMS_SQL()。

CMS_SQL调用支持page分页、支持使用“#TABLE_HEADER#” 符号替换表名、支持子查询。只支持当前数据库帐号能访问的数据库,要查询远程数据库,可以单独用mysql_connect创建一个远程连接,再进行独立查询

属性 必需 默认值 描述

<CMS action="SQL" return="List" query="" Num="" Tpl="" Cache="" returnKey="" />

query -

数据库查询语句 例如query=“SELECT * FROM cmsware_site”

Num -

调用条数

  • Num="": 基于SQL语句
  • Num="10,20": 从第10条以后(11条)开始调用,共20条记录
  • Num="page-15":分页调用,每页15条
  • Num="20":调用用20条

注意:当你使用Num参数时,不要再在query的sql语句中使用Limit 语法。

Tpl -

指定调用的子模版

  • Tpl="list_style_1.html": 调用子模版“list_style_1.html”
Cache -

模版中的CMS调用通过使用Cache,可以大幅提升批量更新的效率. 该标签只有门户版可用

  • Cache="1": 特别注意,只有模版公共调用的部分使用Cache 才有效果,比如内容页头部的导航NODELIST调用,或者top10之类的调用,结点首页的page-10分页调用最好不要用Cache, 因为不会提升任何效率.
returnKey -

可以定义内容列表记录返回那些字段,一般列表只需要获得Title即可,而无需返回Content 等字段,使用此属性,可以一定程度上提高更新效能。 该标签只有门户版可用

  • returnKey="Title,Keywords":返回标题和关键词字段


键名 类型 描述

返回2维数组($List),该数组的组成基于查询语句的返回字段,如果查询语句包含NodeID的返回字段,List数组会自动附加以下键值

NodeInfo array 结点信息数组,具体组成参见{cmsware}/sysdata/sysinfo /node000x.php
NodeName string 结点名称
NodeURL string 结点首页URL

例子 1:结点数据库调用

调用代码:

<CMS action="SQL" return="List" query="select * from cmsware_site where Disabled=0" /> <loop name="List" var="var" key="key" > <a href="[$var.NodeURL]">[$var.Name]</a>
</loop>


'''例子 2:复杂分页调用'''

调用代码:
<pre>
<CMS action="SQL" return="List" query="select i.URL,c.ContentID,c.Title,c.Content from #TABLE_HEADER#content_1 c left join 
#TABLE_HEADER#content_index i ON i.ContentID=c.ContentID order by c.ContentID DESC" Num="page-20" />
<loop name="List" var="var" key="key" >
<a href="[$var.URL]"> [$var.Title] </a><br>
</loop>

[@list_page( $PageInfo.TotalPage, $PageInfo.CurrentPage, $PageInfo.URL)]

例子 3:调用discuz公告和新贴

  • 调用公告:
<CMS action="SQL" return="List" query="select id,subject from DATABASE.TABLEPRE_announcements order by id DESC" Num="4" />
<ul>
<loop name="List" var="var" key="key">
<li><a class=black href="[$BBS_URL]announcement.php?id=[$var.id]#[$var.id]" target="_blank">[@CsubStr($var.subject,0,15,"")]</a>
<li>
</loop>
</ul>

[@CsubStr($var.subject,0,15,"")]

为取公告标题的前15个字符,并且后面不加 "..."

若论坛和思维(CMSware)安装在同一数据库,则上述语句为:

<CMS action="SQL" return="List" query="select id,subject from TABLEPRE_announcements order by id DESC" Num="4" />

Num="4" 指定调用的条数为4条

[$BBS_URL]:你在模版变量管理设置的论坛路径。在模版变量管理将这个变量的值改为您的论坛路径即可

  • 调用ID为1的论坛新贴:
<CMS action="SQL" return="List" query="select tid,fid,subject as title,dateline as PublishDate from DATABASE.TABLEPRE_threads WHERE fid IN('1')
 order by tid DESC" Num="10" />
<LOOP name="List" var="var" key="key">
<!--调用前10条记录-->
<li><span>[[@date("Y-m-d", $var.PublishDate)]]</span><a href="[$BBS_URL]viewthread.php?tid=[$var.tid]" title="[$var.Title]" target="_blank">
 [$var.title]</a>
<br>
</LOOP>
  • 调用所有的论坛新贴:
<CMS action="SQL" return="List" query="select tid,subject as title,dateline as PublishDate from DATABASE.TABLEPRE_threads order by tid DESC" 
Num="10" />
<LOOP name="List" var="var" key="key">
<!--调用前10条记录-->
<li><span>[[@date("Y-m-d", $var.PublishDate)]]</span><a href="[$BBS_URL]viewthread.php?tid=[$var.tid]" title="[$var.Title]" target="_blank"> 
[$var.title]</a>
<br>
</LOOP>

[$BBS_URL]:你在模版变量管理设置的论坛路径。在模版变量管理将这个变量的值改为您的论坛路径即可

<CMS action="SQL" return="List" query="select id,subject from DATABASE.TABLEPRE_announcements order by id DESC" Num="4" />

DATABASE为discuz安装的数据库、换成你自己的(默认为 cdb),TABLEPRE为表前缀、换成你自己的(默认为cdb)。

例子 4:调用VBB论坛新帖子和公告

  • 调用VBB论坛新帖子:
<CMS action="SQL" return="List" query="select postid,title from newvbbcore.vbb_post order by postid DESC" Num="4" />
<loop name="List" var="var" key="key">
<li>
<a href="[$BBS_URL]showthread.php?p=[$var.postid]#post[$var.postid]" target="_blank">[@CsubStr($var.title,0,15,"")]</a>
</li>
</loop>
  • 调用VBB论坛公告:
<CMS action="SQL" return="List" query="select announcementid,title from newvbbcore.vbb_announcement order by announcementid DESC" Num="5" />
<loop name="List" var="var" key="key">
<P><a class=black href="[$BBS_URL]announcement.php?a=[$var.announcementid]&f=3" target="_blank">[@CsubStr($var.title,0,15,"")]</a>
</P>
</loop>

说明:

"select announcementid,title from newvbbcore.vbb_announcement order by announcementid DESC"--“newvbbcore.”为VBB安装数据库,和思维(CMSware)在同一数据库时此处留空;“vbb_”为数据表前缀,没有前缀时留空;

"[$BBS_URL]announcement.php?a=[$var.announcementid]&f=3" ,特别注意这里“f=3”的3为版块号,调用公告时必须指定一个版块号

例子 5:统计编辑工作量

调用代码:

<!--#CW#
统计一段时间内各编辑人员发表内容的数量
用动态发布实现,传入URL参数按顺序分别为:此模版绑定的文章IndexID,0,开始日期,结束日期 (注意:统计日期条件是前等后不等)
示例:http://cmsware/publish/content.php/231,0,2006-01-31,2006-06-02.html
如果是iis不支持pathinfo传递参数,请用下面这种形式
示例:http://cmsware/publish/content.php?IndexID=231& Page=0,2006-01-31,2006-06-02.html
#CW#-->

统计日期[$Custom1] 到 [$Custom2] 的稿件数量
<br />
<br />

<!--#CW#
如果统计速度很慢,请给content_index内容索引表和content_*的内容模型表中的字段ContentID和CreationDate和 CreationUserID都加上索引,普通索引就可
#CW#-->

<op exp=" $tableid_list = array('1','2','3','4','5','6') " /> <!--#CW# 需要统计的内容模型号列表 #CW#-->
<loop name="tableid_list" var="vartable" key="keytable">

<br /><br />
模型号:[$vartable]
<hr>
<cms action="SQL" return="List" query="SELECT CreationUserID userid,COUNT(IndexID) nums FROM cmsware_content_index i Left Join 
`cmsware_content_{$vartable}` c ON i.ContentID=c.ContentID WHERE i.Type=1 and i.State=1 and ( CreationDate>=UNIX_TIMESTAMP('{$Custom1}') and 
CreationDate<UNIX_TIMESTAMP('{$Custom2}') ) GROUP By CreationUserID" />

<!--#CW#
SELECT CreationUserID userid,COUNT(IndexID) nums FROM cmsware_content_index i Left Join `cmsware_content_[$vartable]` c ON i.ContentID=c.ContentID 
WHERE i.Type=1 and i.State=1 and ( CreationDate>=UNIX_TIMESTAMP('[$Custom1]') and CreationDate<UNIX_TIMESTAMP('[$Custom2]') ) GROUP By 
CreationUserID
#CW#-->

人员ID号,稿件数量<br />
<loop name="List" var="var" key="key">
[$var.userid] , [$var.nums]<br />
</loop>

</loop>

用动态发布实现,传入URL参数按顺序分别为:此模版绑定的文章IndexID,0,开始日期,结束日期 (注意:统计日期条件是前等后不等)

(示例:http://cmsware/publish/content.php/231,0,2006-01-31,2006-06-02.html)

如果是iis,由于不支持pathinfo传递参数,请用下面这种形式

(示例:http://cmsware/publish/content.php?IndexID=231& Page=0,2006-01-31,2006-06-02.html)



参考来源[ ]