dedecms帮助文件.docx
《dedecms帮助文件.docx》由会员分享,可在线阅读,更多相关《dedecms帮助文件.docx(16页珍藏版)》请在冰豆网上搜索。
dedecms帮助文件
数据库类:
系统会自动载入dedesql.class.php文件,并用
$dsql=$db=newDedeSql(false);
进行初始化数据库连接,因此在工程所有文件中均不需要单独初始化这个类,可直接用$dsql或$db进行操作,为了防止错误,操作完后不必关闭数据库。
常用的方法:
1、执行一个非查询类型的SQL语句,如insert、create、update等
$rs=$db->ExecuteNoneQuery($sql);
返回值为是否执行成功。
2、执行一个非查询类型的SQL语句,并返回成功记录数
$rs=$db->ExecuteNoneQuery2($sql);
与上面相比,它返回的是影响的记录数,而不是布尔值
3、返回单个记录
$arr=$db->GetOne($sql);
$dsql如果不带limit,系统会自动加上limit0,1
4、执行条件查询语句
$db->SetQuery($dsql);
$db->Execute();
while($arr=$db->GetArray())
{
}
可以简化为:
$db->Execute('me',$dsql);
while($arr=$db->GetArray())
{
}
'me'为记录集游标,用于区分不同的查询,如:
$db->Execute('me',$dsql);
while($arr=$db->GetArray())
{
$db->Execute('2',$dsql2);
while($arr2=$db->GetArray())
{
}
}
像这种情况必须指定一个值区分默认的'me'参数,否则会出错
$db->GetArray($rsid,$acctype)参数
$rsid="me"
$acctype=MYSQL_ASSOC
在查询游标中读取数据还可以用
$db->GetObject($rsid="me");
返回的结果是用类结构表示的值。
5、获取上一个插入的自动递增主键id值
$db->GetLastID();
6、获得查询的总记录数
$db->GetTotalRow($rsid="me")
7、获得MySql的版本号
$db->GetVersion($isformat=true)
默认的情况下会转换成x.xx形式浮点数
8、析放某查询的资源
$db->FreeResult($rsid="me");
9、在数据库中是否存在某数据表
$db->IsTable($tbname)
10、重新选择要操作的数据库
$db->SelectDB($dbname);
11、获得数据库连接标识
$db->linkID
获得这个连接标识后,可以直接用mysql相关函数进行数据库操作
在非不得已的情况,项目中一般不使用这个变量。
全局函数:
1、common.func.php公用函数
获得当前的脚本网址
functionGetCurUrl()
返回格林威治标准时间
functionMyDate($format='Y-m-dH:
i:
s',$timest=0)
把全角数字转为半角
functionGetAlabNum($fnum)
把含HTML的内容转为纯text
functionHtml2Text($str,$r=0)
把文本转HTML
functionText2Html($txt)
输出Ajax头
functionAjaxHead()
中文截取2,单字节截取模式
functioncn_substr($str,$slen,$startdd=0)
把标准时间转为Unix时间戳
functionGetMkTime($dtime)
获得一个0000-00-0000:
00:
00标准格式的时间
functionGetDateTimeMk($mktime)
获得一个0000-00-00标准格式的日期
functionGetDateMk($mktime)
获得用户IP
functionGetIP()
获取拼音以gbk编码为准
functionGetPinyin($str,$ishead=0,$isclose=1)
dedecms通用消息提示框
functionShowMsg($msg,$gourl,$onlymsg=0,$limittime=0)
保存一个cookie
functionPutCookie($key,$value,$kptime=0,$pa="/")
删除一个cookie
functionDropCookie($key)
获取cookie
functionGetCookie($key)
获取验证码
functionGetCkVdValue()
过滤前台用户输入的文本内容
//$rptype=0表示仅替换html标记
//$rptype=1表示替换html标记同时去除连续空白字符
//$rptype=2表示替换html标记同时去除所有空白字符
//$rptype=-1表示仅替换html危险的标记
functionHtmlReplace($str,$rptype=0)
获得某文档的所有tag
functionGetTags($aid)
过滤用于搜索的字符串
functionFilterSearch($keyword)
处理禁用HTML但允许换行的内容
functionTrimMsg($msg)
获取单篇文档信息
functionGetOneArchive($aid)
动态分页类:
类文件
include/datalistcp.class.php
适用范围:
数据量不大的数据分页
使用方法:
$dl=newDataListCP();
$dl->pageSize=25;//设定每页显示记录数(默认25条)
$dl->SetParameter($key,$value);//设定get字符串的变量
//这两句的顺序不能更换
$dl->SetTemplate($tplfile);//载入模板
$dl->SetSource($sql);//设定查询SQL
$dl->Display();//显示
模板
{dede:
datalist}
{field.fieldname1/}-{field.fieldname2/}...{/dede:
datalist}
{tag:
pagelistlistitem="info,index,end,pre,next,pageno"listsize="5"/}
listitem、listsize是可选属性
如果需要自定义datalist相关属性,可以继续本类来创建一个新类,只需改变GetArcList($atts,$refObj='',$fields=array())方法即可。
静态模板类:
类文件
include/dedetag.class.php
这个文件是dedecmsV5.3及之前版本使用的主要的模板类,它是解析式模板类,并非编译式的(区别是前者通过获得标签位置进行内容替换,后者是直接解析式PHP代码,二次执行)
一、模板语法
织梦模板引擎是一种使用XML名字空间形式的模板解析器,使用织梦解析器解析模板的最大好处是可以轻松的制定标记的属性,感觉上就像在用HTML一样,使模板代码十分直观灵活,新版的织梦模板引擎不单能实现模板的解析还能分析模板里错误的标记。
1、织梦模板引擎的代码样式有如下几种形式:
{dede:
标记名称属性='值'/}
{dede:
标记名称属性='值'}{/dede:
标记名称}
{dede:
标记名称属性='值'}自定义样式模板(InnerText){/dede:
标记名称}
提示:
如果使用带底层模板的标记,必须严格用{dede:
标记名称属性='值'}{/dede:
标记名称}这种格式,否则会报错。
2、织梦模板引擎内置有多个系统标记,这些系统标记在任何场合都是能直接使用的。
(1)global标记,表示获取一个外部变量,除了数据库密码之外,能调用系统的任何配置参数,形式为:
{dede:
globalname='变量名称'}{/dede:
global}
或
{dede:
globalname='变量名称'/}
其中变量名称不能加$符号,如变量$cfg_cmspath,应该写成{dede:
globalname='cfg_cmspath'/}。
(2)foreach用来输出一个数组,形式为:
{dede:
foreacharray='数组名称'}[field:
key/][field:
value/]{/dede:
foreach}
(3)include引入一个文件,形式为:
{dede:
includefile='文件名称'ismake='是否为dede板块模板(yes/no)'/}
对文件的搜索路径为顺序为:
绝对路径、include文件夹,CMS安装目录,CMS主模板目录
3、织梦标记允许在任何标记中使用函数对得到的值进行处理,形式为:
{dede:
标记名称属性='值'function='youfunction("参数一","参数二","@me")'/}
其中@me用于表示当前标记的值,其它参数由你的函数决定是否存在,例如:
{dede:
fieldname='pubdate'function='strftime("%Y-%m-%d%H:
%M:
%S","@me")'/}
4、织梦标记允许有限的编程扩展。
格式为:
{dede:
tagnamerunphp='yes'}
$aaa=@me;
@me="123456";
{/dede:
tagname}
@me表示这个标记本身的值,因此标记内编程是不能使用echo之类的语句的,只能把所有返回值传递给@me。
此外由于程序代码占用了底层模板InnerText的内容,因此需编程的标记只能使用默认的InnerText。
二、解析方式
在dedetag.class.php里面有四个类
classDedeAttribute属性结构表述
classDedeAttributeParse属性解析器
classDedeTag标签结构表述
classDedeTagParse标签解析器
使用解析类解析模板时一般经过下面的步骤
1、初始化:
$dtp=newDedeTagParse();
2、载入模板/模板字符串:
$dtp->LoadTemplate(模板文件(绝对路径));//会生成缓存,第二次不需解析模板
或
$dtp->LoadSource(字符串);
3、给标签赋值
foreach($dtp->CTagsas$tid=>$ctag){
//判断ctag的名称和属性,并给赋不同的值,通常用函数处理
if($ctag->GetName=='mytag')$dtp->Assign($tid,mytagvalue($ctag));
}
在上面例子中,直接把名称为mytag的标签转交给mytagvalue函数处理,mytagvalue里判断$ctag的各个属性,返回不同内容即可。
在V5.3版本中,通常除了field、list等专用标签之外,凡arc.*开头的类解析的文件,标签都是对应该include/taglib的源码的,这个由系统进行了自动的映射。
4、显示或保存为HTML
$dtp->display();
或
$dtp->SaveTo(静态文件名);
对于二次开发人员而言,不大需要知道dedecms模板具体解析方式,不过应该十分清楚CTag这个类的结构,从而判断标签不同属性进行处理。
classDedeTag
{
var$IsReplace=FALSE;//标记是否已被替代,供解析器使用
var$TagName="";//标记名称
var$InnerText="";//标记之间的文本
var$StartPos=0;//标记起始位置
var$EndPos=0;//标记结束位置
var$CAttribute="";//标记属性描述,即是classDedeAttribute
var$TagValue="";//标记的值
var$TagID=0;
//获取标记的名称和值
functionGetName()
{
returnstrtolower($this->TagName);
}
functionGetValue()
{
return$this->TagValue;
}
//下面两个成员函数仅是为了兼容旧版
functionGetTagName()
{
returnstrtolower($this->TagName);
}
functionGetTagValue()
{
return$this->TagValue;
}
//获取标记的指定属性
functionIsAttribute($str)
{
return$this->CAttribute->IsAttribute($str);
}
functionGetAttribute($str)
{
return$this->CAttribute->GetAtt($str);
}
functionGetAtt($str)
{
return$this->CAttribute->GetAtt($str);
}
functionGetInnerText()
{
return$this->InnerText;
}
}
arclist|文档列表:
标签名称:
arclist
标记简介:
织梦常用标记,也称为自由列表标记,其中imglist、imginfolist、specart、coolart、autolist都是由该标记所定义的不同属性延伸出来的别名标记。
功能说明:
获取指定文档列表
适用范围:
全局使用
基本语法:
{dede:
arclistflag='h'typeid=''row=''col=''titlelen=''infolen=''imgwidth=''imgheight=''listtype=''orderby=''keyword=''limit='0,1'}
arcurl/]'>[field:
title/]arcurl是文章的路径,表里无此字段
{/dede:
arclist}
参数说明:
col=''分多少列显示(默认为单列),5.3版中本属性可以通过多种方式进行多行显示
如果col='1'要多列显示的可用div+css实现
以下为通过div+css实现多列的示例:
div{width:
400px;float:
left;}
{dede:
arclistrow='10'titlelen='24'orderby='pubdate'idlist=''col='2'}
•[field:
textlink/]([field:
pubdatefunction=MyDate('m-d',@me)/])
{/dede:
arclist}
当col>1将使用原来的table多列方式显示
row='10'返回文档列表总数
typeid=''栏目ID,在列表模板和档案模板中一般不需要指定,在首页模板中允许用","分开表示多个栏目;
getall='1'在没有指定这属性的情况下,在栏目页、文章页模板,不会获取以","分开的多个栏目的下级子类
titlelen='30'标题长度等同于titlelength
infolen='160'表示内容简介长度等同于infolength
imgwidth='120'缩略图宽度
imgheight='90'缩略图高度
listtype='all'栏目类型image含有缩略图commend推荐
orderby='sortrank'文档排序方式
§orderby='hot'或orderby='click'表示按点击数排列
§orderby='sortrank'或orderby='pubdate'按出版时间排列
§orderby='near'
§orderby=='lastpost'按最后评论时间
§orderby=='scores'按得分排序
§orderby='id'按文章ID排序
§orderby='rand'随机获得指定条件的文档列表
keyword=''含有指定关键字的文档列表,多个关键字用","分
innertext=''单条记录样式
aid=''指定文档ID
idlist=''提取特定文档(文档ID)
channelid频道ID
limit='起始ID,记录数'(起始ID从0开始)表示限定的记录范围(如:
limit='1,2'表示从ID为1的记录开始,取2条记录)
flag='h'自定义属性值:
头条[h]推荐[c]图片[p]幻灯[f]滚动[s]跳转[j]图文[a]加粗[b]
noflag=''同flag,但这里是表示不包含这些属性,与flag相反
orderway='desc'值为desc或asc,指定排序方式是降序还是顺向排序,默认为降序
subday='天数'表示在多少天以内的文档
用arclist调用于附加表字段的方法:
要获取附加表内容,必须符合两个条件
1、指定channelid属性
2、指定要获得的字段addfields='字段1,字段'
如:
{dede:
arclistaddfields='filetype,language,softtype'row='8'channelid='3'}
[field:
textlink/]-[field:
softtype/]
{/dede:
arclist}
底层模板字段:
ID(同id),typeid,sortrank,flag,ismake,channel,arcrank,click,money,title,shorttitle,color,writer,
source,litpic(同picname),pubdate,senddate,mid,lastpost,scores,goodpost,badpost,notpost,
description(同infos),filename,image,imglink,fulltitle,textlink,typelink,plusurl,memberurl,templeturl,
stime(pubdate的"0000-00-00"格式)
其中:
textlink=title
typelink=typename
imglink=
image=
字段调用方法:
[field:
varname/]
如:
{dede:
arclistinfolen='100'}
[field:
textlink/]
[field:
infos/]
{/dede:
arclist}
注:
底层模板里的Field实现也是织梦标记的一种形式,因此支持使用PHP语法,Function扩展等功能。
如:
给当天发布的内容加上(new)标志
[field:
senddaterunphp='yes']
$ntime=time();
$oneday=3600*24;
if(($ntime-@me)<$oneday)@me="(new)";
else@me="";
[/field:
senddate]
[b][/b]
memberlist|会员信息列表:
标签名称:
memberlist
功能说明:
会员信息调用标签
适用范围:
全局使用
基本语法:
{dede:
memberlistorderby='scores'row='20'}
uid={dede:
field.userid/}">{dede:
field.userid/}
{dede:
field.scores/}
{/dede:
memberlist}
参数说明:
row='6'调用数目
iscommend='0'是否为推荐会员
orderby='logintime'按登陆时间排序money按金钱排序scores按积分排序
底层模板字段:
dede_member所有字段及spacename(空间名称)、sign(用户签名)
sql|SQL标签:
标签名称:
sql
功能说明:
用于从模板中用一个SQL查询获得其返回内容
适用范围:
全局使用
基本语法:
{dede:
sqlsql=""}底层模板{/dede:
sql}
参数说明:
sql=""完整的SQL查询语句
底层模板字段:
SQL语句中查出的所有字段都可以用[field:
字段名/]来调用
应用实例:
1.调用某个特定会员发布的文章内容
{dede:
sqlsql='Select*fromdede_archiveswheremid=1'}
aid=[field:
id/]'target='_blank'>[field:
title/]
{/dede:
sql}
mid为用户ID可以参考二次开发中关于dede_archives的数据表字段介绍