您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > DedeCMS教程_DedeCMS二次开发
DedeCMSV5.3二次开发希望对大家有用一、模板篇1.1、主要模板文件与功能说明DedeCMS系统的模板是非固定的,用户可以在新建栏目时可以自行选择栏目模板,官方仅提供最基本的默认模板,即是内置系统模型的各个模板,由于DedeCMS支持自定义频道模型,用户自定义新频道模型后,还需要按该模型的字段设计一套新的模板,此外,DedeCMS也支持使用风格的形式使用模板,默认风格是default,它表示系统默认使用{cmspath}/templets/default这个文件夹的模板,如果你下载了一套新的模板,你可以不必要删除default原有的文件,把下载的模板文件夹命名你想要的风格名称,如style2等,然后在后台修改了默认的模板风格名称为style2,那系统将使用{cmspath}/templets/style2这文件当作默认模板,但是若你手工指定了栏目模板的位置,则后台参数风格的定义无效。一、概念,设计和使用模板,必须要理解下面几个概念1、板块(封面)模板:指网站主页或比较重要的栏目封面频道使用的模板,一般用“index_识别ID.htm”命名,此外,用户单独定义的单个页面或自定义标记,也可选是否支持板块模板标记,如果支持,系统会用板块模板标记引擎去解析后才输出内容或生成特定的文件。2、列表模板:指网站某个栏目的所有文章列表的模板,一般用“list_识别ID.htm”命名。3、档案模板:表示文档查看页的模板,如文章模板,一般用“article_识别ID.htm”命名。4、其它模板:一般系统常规包含的模板有:主页模板、搜索模板、RSS、JS编译功能模板等,此外用户也可以自定义一个模板创建为任意文件。二、命名,DedeCMS模板默认命名规则如下1、模板保存位置:模板目录:{cmspath}/templets/样式名称(英文,默认为default,其中system为系统底层模板,plus为插件使用的模板)/具体功能模板文件}2、模板文件命名规范:(1)index_识别ID.htm:表示板块(栏目封面)模板;(2)list_识别ID.htm:表示栏目列表模板;(3)article_识别ID.htm:表示内容查看页(文档模板,包括专题查看页);(4)search.htm:搜索结果列表模板;(5)index.htm:主页模板;注解:[识别ID]可以在“频道模型管理”的地方获得,当然,你也可以在“频道模型管理”的地方确定某个频道的模板命名。例:list_image.htm表示是就是内容类型为图片集的栏目默认列表模板。article_article.htm表示的是文章查看页模板。三、其它模板说明1、默认底层模板位置:{cmspath}/templets/system功能:在没有指定标记的默认底层模板的时候,系统将自动调用这个文件夹的相应文件作为底层模板。2、插件目录模板位置:{cmspath}/templets/plus功能:评论、友情链接、RSS地图等模板。3、会员后台模板位置:{cmspath}/member/templets功能:会员后台的模板。四、二次开发在V5.3中已经将标签开发分离出来,您可以通过后台[模板]-[标签代码管理],点击“新增加一个新的标签”来创建一个自己的标签,标签文件名为:标签名.lib.php接口函数定义为:functionlib_标签名(&$ctag,&$refObj),返回值是结果字符串修改标签时为了防止出错,您也可以修改它的名称(同时修改文件名和函数名),这样等同继承了原来标签的代码建立一个新的标签。1.2、模板标签语法简介织梦的模板标签类似于XML格式,所有的模板都含有定界符,默认情况下是{dede:*}和{/dede:*},“*”代表模板标记名称。一般情况下{dede:*}和{/dede:*}是成对出现的,例如:例1-1:{dede:arclistflag='h'limit='0,1'}br/h2ahref=[field:arcurl/][field:title/]/a/h2br/p[field:description/]...ahref=[field:arcurl/][查看全文]/a/pbr/{/dede:arclist}上面的{dede:arclist}和{/dede:arclist}成对出现在模板文件中,并且在两个标签当中包含了底层模板(innertext)。底层模板(Innertext),底层模板实际上就是对于有多条记录的模板输出,用户手工去指定单个记录的样式。标签还有一类出现形式是{dede:*/},通常以这种形式出现都是输出变量、或者不含底层模板的内容。例如:1-2{dede:global.cfg_webname/}{dede:arclistflag='h'limit='0,1'/}如果用户没有指定单个记录的样式,系统部分标签都含有默认的底层模板,具体可以查看{cmapath}/templets/system/文件夹下面的文件,这里面都是系统的底层模板文件。注释织梦标签的模板注释非常灵活,可以通过标签后面的commet属性进行赋值。例1-3:1{dede:arclistflag='h'limit='0,1'commet='调用头条的第一篇内容'}br/2h2ahref=[field:arcurlcommet=这是文章链接标签/][field:titlecommet=这是文章标题标签/]/a/h2br/3p[field:descriptioncommet=这是摘要标签/]...ahref=[field:arcurlcommet=这是文章链接标签/][查看全文]/a/pbr/4{/dede:arclist}在模板引擎将上述标签解析为html的时候,commet的内容是被忽略掉不去解析的,用户在阅读模板标记的时候可以更好的理解标签的意义。函数每一个织梦的标签都可以使用自定义函数对其进行扩展,自定义函数内容主要用于对当前标签输出内容进行处理。例1-4:{dede:标记名称function='youfunction(参数一,参数二,@me)'/}其中@me用于表示当前标记的值,其它参数由你的函数决定是否存在,例如:{dede:field.pubdatefunction='strftime(%Y-%m-%d%H:%M:%S,@me)'/}属性模板标签的属性,决定了模板标记输出的形式,例如arclist标签主要功能是列出文档列表,但列出什么内容、按照什么方式进行排序等取决于模板标签的属性。在织梦的模板标签说明中含有各个模板的标签属性可以详细查阅。可以查看例1-1中的flag='h'limit='0,1',这里flag和limit是标签的相关属性,通过手册可以查阅属性的介绍。如果模板标签如果没有列出属性,系统有默认属性值,用户可以参考模板标签说明查看默认属性。编程织梦模板很方便的一个地方就是支持简单的模板编程。格式为:1{dede:tagnamerunphp='yes'}br/2$aaa=@me;br/3@me=123456;br/4{/dede:tagname}@me表示这个标记本身的值,因此标记内编程是不能使用echo之类的语句的,只能把所有返回值传递给@me。此外由于程序代码占用了底层模板InnerText的内容,因此需编程的标记只能使用默认的InnerText。二、代码篇2.1、common.func.php公用函数获得当前的脚本网址functionGetCurUrl()返回格林威治标准时间functionMyDate($format='Y-m-dH:i:s',$timest=0)把全角数字转为半角functionGetAlabNum($fnum)把含HTML的内容转为纯textfunctionHtml2Text($str,$r=0)把文本转HTMLfunctionText2Html($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)获得用户IPfunctionGetIP()获取拼音以gbk编码为准functionGetPinyin($str,$ishead=0,$isclose=1)dedecms通用消息提示框functionShowMsg($msg,$gourl,$onlymsg=0,$limittime=0)保存一个cookiefunctionPutCookie($key,$value,$kptime=0,$pa=/)删除一个cookiefunctionDropCookie($key)获取cookiefunctionGetCookie($key)获取验证码functionGetCkVdValue()过滤前台用户输入的文本内容//$rptype=0表示仅替换html标记//$rptype=1表示替换html标记同时去除连续空白字符//$rptype=2表示替换html标记同时去除所有空白字符//$rptype=-1表示仅替换html危险的标记functionHtmlReplace($str,$rptype=0)获得某文档的所有tagfunctionGetTags($aid)过滤用于搜索的字符串functionFilterSearch($keyword)处理禁用HTML但允许换行的内容functionTrimMsg($msg)获取单篇文档信息functionGetOneArchive($aid)2.2、dedesql.class.php数据库类系统会自动载入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,14、执行条件查询语句$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()
本文标题:DedeCMS教程_DedeCMS二次开发
链接地址:https://www.777doc.com/doc-2909126 .html