DedeCMS二次开发手册44页word文档.docx
《DedeCMS二次开发手册44页word文档.docx》由会员分享,可在线阅读,更多相关《DedeCMS二次开发手册44页word文档.docx(64页珍藏版)》请在冰豆网上搜索。
DedeCMS二次开发手册44页word文档
DedeCMSV5.3二次开发手册
我国古代的读书人,从上学之日起,就日诵不辍,一般在几年内就能识记几千个汉字,熟记几百篇文章,写出的诗文也是字斟句酌,琅琅上口,成为满腹经纶的文人。
为什么在现代化教学的今天,我们念了十几年书的高中毕业生甚至大学生,竟提起作文就头疼,写不出像样的文章呢?
吕叔湘先生早在1978年就尖锐地提出:
“中小学语文教学效果差,中学语文毕业生语文水平低,……十几年上课总时数是9160课时,语文是2749课时,恰好是30%,十年的时间,二千七百多课时,用来学本国语文,却是大多数不过关,岂非咄咄怪事!
”寻根究底,其主要原因就是腹中无物。
特别是写议论文,初中水平以上的学生都知道议论文的“三要素”是论点、论据、论证,也通晓议论文的基本结构:
提出问题――分析问题――解决问题,但真正动起笔来就犯难了。
知道“是这样”,就是讲不出“为什么”。
根本原因还是无“米”下“锅”。
于是便翻开作文集锦之类的书大段抄起来,抄人家的名言警句,抄人家的事例,不参考作文书就很难写出像样的文章。
所以,词汇贫乏、内容空洞、千篇一律便成了中学生作文的通病。
要解决这个问题,不能单在布局谋篇等写作技方面下功夫,必须认识到“死记硬背”的重要性,让学生积累足够的“米”。
一、模板篇
观察内容的选择,我本着先静后动,由近及远的原则,有目的、有计划的先安排与幼儿生活接近的,能理解的观察内容。
随机观察也是不可少的,是相当有趣的,如蜻蜓、蚯蚓、毛毛虫等,孩子一边观察,一边提问,兴趣很浓。
我提供的观察对象,注意形象逼真,色彩鲜明,大小适中,引导幼儿多角度多层面地进行观察,保证每个幼儿看得到,看得清。
看得清才能说得正确。
在观察过程中指导。
我注意帮助幼儿学习正确的观察方法,即按顺序观察和抓住事物的不同特征重点观察,观察与说话相结合,在观察中积累词汇,理解词汇,如一次我抓住时机,引导幼儿观察雷雨,雷雨前天空急剧变化,乌云密布,我问幼儿乌云是什么样子的,有的孩子说:
乌云像大海的波浪。
有的孩子说“乌云跑得飞快。
”我加以肯定说“这是乌云滚滚。
”当幼儿看到闪电时,我告诉他“这叫电光闪闪。
”接着幼儿听到雷声惊叫起来,我抓住时机说:
“这就是雷声隆隆。
”一会儿下起了大雨,我问:
“雨下得怎样?
”幼儿说大极了,我就舀一盆水往下一倒,作比较观察,让幼儿掌握“倾盆大雨”这个词。
雨后,我又带幼儿观察晴朗的天空,朗诵自编的一首儿歌:
“蓝天高,白云飘,鸟儿飞,树儿摇,太阳公公咪咪笑。
”这样抓住特征见景生情,幼儿不仅印象深刻,对雷雨前后气象变化的词语学得快,记得牢,而且会应用。
我还在观察的基础上,引导幼儿联想,让他们与以往学的词语、生活经验联系起来,在发展想象力中发展语言。
如啄木鸟的嘴是长长的,尖尖的,硬硬的,像医生用的手术刀―样,给大树开刀治病。
通过联想,幼儿能够生动形象地描述观察对象。
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:
1{dede:
arclistflag='h'limit='0,1'}
2
arcurl/]">[field:
title/]
3
[field:
description/]...arcurl/]">[查看全文]
4{/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='调用头条的第一篇内容'}
2
arcurlcommet="这是文章链接标签"/]">[field:
titlecommet="这是文章标题标签"/]
3
[field:
descriptioncommet="这是摘要标签"/]...arcurlcommet="这是文章链接标签"/]">[查看全文]
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'}
2$aaa=@me;
3@me="123456";
4{/dede:
tagname}
@me表示这个标记本身的值,因此标记内编程是不能使用echo之类的语句的,只能把所有返回值传递给@me。
此外由于程序代码占用了底层模板InnerText的内容,因此需编程的标记只能使用默认的InnerText。
2、代码篇
2.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)
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,1
4、执行条件查询语句
1$db->SetQuery($dsql);
2$db->Execute();
3while($arr=$db->GetArray())
可以简化为:
4$db->Execute('me',$dsql);
5while($arr=$db->GetArray())
'me'为记录集游标,用于区分不同的查询,如:
6$db->Execute('me',$dsql);
7while($arr=$db->GetArray())
8$db->Execute('2',$dsql2);
9while($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相关函数进行数据库操作
在非不得已的情况,项目中一般不使用这个变量。
2.3、datalistcp.class.php动态分页类
类文件
include/datalistcp.class.php
适用范围:
数据量不大的数据分页
使用方法:
1$dl=newDataListCP();
2$dl->pageSize=25;//设定每页显示记录数(默认25条)
3$dl->SetParameter($key,$value);//设定get字符串的变量
//这两句的顺序不能更换
4$dl->SetTemplate($tplfile);?
//载入模板
5$dl->SetSource($sql);?
//设定查询SQL
6$dl->Display();?
//显示
模板
7{dede:
datalist}
8
{field.fieldname1/}-{field.fieldname2/}...9{/dede:
datalist}
10
11{tag:
pagelistlistitem="info,index,end,pre,next,pageno"listsize="5"/}
listitem、listsize是可选属性
如果需要自定义datalist相关属性,可以继续本类来创建一个新类,只需改变GetArcList($atts,$refObj='',$fields=array())方法即可。
2.4、dedetag.class.php静态模板类
类文件
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这个类的结构,从而判断标签不同属性进行处理。
1classDedeTag
2var$IsReplace=FALSE;//标记是否已