织梦CMS二次开发技术资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DedeCMS V5.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
接口函数定义为:function lib_标签名(&$ctag,&$refObj),返回值是结果字符串
修改标签时为了防止出错,您也可以修改它的名称(同时修改文件名和函数名),这样等同继承了原来标签的代码建立一个新的标签。
1.2、模板标签语法简介
织梦的模板标签类似于XML格式,所有的模板都含有定界符,默认情况下是{dede:*}和{/dede:*},“*”代表模板标记名称。
一般情况下{dede:*}和{/dede:*}是成对出现的,例如:
例1-1:
1{dede:arclist flag='h'limit='0,1'}<br/>
2<h2><a href="[field:arcurl/]">[field:title/]</a></h2><br/>
3<p>[field:description/]...<a href="[field:arcurl/]">[查看全文]</a></p><br/>
4{/dede:arclist}
上面的{dede:arclist}和{/dede:arclist}成对出现在模板文件中,并且在两个标签当中包含了底层模板(innertext)。
底层模板(Innertext),底层模板实际上就是对于有多条记录的模板输出,用户手工去指定单个记录的样式。
标签还有一类出现形式是{dede:*/},通常以这种形式出现都是输出变量、或者不含底层模板的内容。
例如:1-2
{dede:global.cfg_webname/}
{dede:arclist flag='h' limit='0,1'/}
如果用户没有指定单个记录的样式,系统部分标签都含有默认的底层模板,具体可以查看{cmapath}/templets/system/文件夹下面的文件,这里面都是系统的底层模板文件。
注释
织梦标签的模板注释非常灵活,可以通过标签后面的commet属性进行赋值。
例1-3:
1 {dede:arclist flag='h'limit='0,1'commet='调用头条的第一篇内容'}<br/>
2 <h2><a href="[field:arcurl commet="这是文章链接标签"/]">[field:titlecommet="这
是文章标题标签"/]</a></h2><br/>
3 <p>[field:description commet="这是摘要标签"/]...<a href="[field:arcurl commet="
这是文章链接标签"/]">[查看全文]</a></p><br/>
4 {/dede:arclist}
在模板引擎将上述标签解析为html的时候,commet的内容是被忽略掉不去解析的,用户在阅读模板标记的时候可以更好的理解标签的意义。
函数
每一个织梦的标签都可以使用自定义函数对其进行扩展,自定义函数内容主要用于对当前标签输出内容进行处理。
例1-4:
{dede:标记名称function='youfunction("参数一","参数二","@me")'/}
其中@me 用于表示当前标记的值,其它参数由你的函数决定是否存在,例如:{dede:field.pubdate function='strftime("%Y-%m-%d %H:%M:%S","@me")'/}
属性
模板标签的属性,决定了模板标记输出的形式,例如arclist标签主要功能是列出文档列表,但列出什么内容、按照什么方式进行排序等取决于模板标签的属性。
在织梦的模板标签说明中含有各个模板的标签属性可以详细查阅。
可以查看例1-1中的flag='h' limit='0,1',这里flag和limit是标签的相关属性,通过手册可以查阅属性的介绍。
如果模板标签如果没有列出属性,系统有默认属性值,用户可以参考模板标签说明查看默认属性。
编程
织梦模板很方便的一个地方就是支持简单的模板编程。
格式为:
1 {dede:tagname runphp='yes'}<br />
2 $aaa = @me;<br />
3 @me = "123456";<br />
4 {/dede:tagname}
@me 表示这个标记本身的值,因此标记内编程是不能使用echo之类的语句的,只能把所有返回值传递给@me。
此外由于程序代码占用了底层模板InnerText的内容,因此需编程的标记只能使用默认的InnerText。
二、代码篇
2.1、common.func.php 公用函数
获得当前的脚本网址
function GetCurUrl()
返回格林威治标准时间
function MyDate($format='Y-m-d H:i:s',$timest=0)
把全角数字转为半角
function GetAlabNum($fnum)
把含HTML的内容转为纯text
function Html2Text($str,$r=0)
把文本转HTML
function Text2Html($txt)
输出Ajax头
function AjaxHead()
中文截取2,单字节截取模式
function cn_substr($str,$slen,$startdd=0)
把标准时间转为Unix时间戳
function GetMkTime($dtime)
获得一个0000-00-00 00:00:00 标准格式的时间function GetDateTimeMk($mktime)
获得一个0000-00-00 标准格式的日期
function GetDateMk($mktime)
获得用户IP
function GetIP()
获取拼音以gbk编码为准
function GetPinyin($str,$ishead=0,$isclose=1)
dedecms通用消息提示框
function ShowMsg($msg,$gourl,$onlymsg=0,$limittime=0)
保存一个cookie
function PutCookie($key,$value,$kptime=0,$pa="/")
删除一个cookie
function DropCookie($key)
获取cookie
function GetCookie($key)
获取验证码
function GetCkVdValue()
过滤前台用户输入的文本内容
// $rptype = 0 表示仅替换html标记
// $rptype = 1 表示替换html标记同时去除连续空白字符
// $rptype = 2 表示替换html标记同时去除所有空白字符
// $rptype = -1 表示仅替换html危险的标记
function HtmlReplace($str,$rptype=0)
获得某文档的所有tag
function GetTags($aid)
过滤用于搜索的字符串
function FilterSearch($keyword)
处理禁用HTML但允许换行的内容
function TrimMsg($msg)
获取单篇文档信息
function GetOneArchive($aid)
2.2、dedesql.class.php 数据库类
系统会自动载入dedesql.class.php 文件,并用
$dsql = $db = new DedeSql(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 ,系统会自动加上limit 0,1
4、执行条件查询语句
1$db->SetQuery($dsql);
2$db->Execute();
3while($arr = $db->GetArray())
4{
5}
可以简化为:
6$db->Execute('me',$dsql);
7while($arr = $db->GetArray())
8{
9}
'me' 为记录集游标,用于区分不同的查询,如:
10$db->Execute('me',$dsql);
11while($arr = $db->GetArray())
12{
13$db->Execute('2',$dsql2);
14while($arr2 = $db->GetArray())
15{
16
17}
18}
像这种情况必须指定一个值区分默认的'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 = new DataListCP();
2$dl->pageSize = 25; //设定每页显示记录数(默认25条)3$dl->SetParameter($key,$value); //设定get字符串的变量
//这两句的顺序不能更换
4$dl->SetTemplate($tplfile);?//载入模板
5$dl->SetSource($sql);?//设定查询SQL
6
7$dl->Display();?//显示
模板
8{dede:datalist}<br/>
9<li>{field.fieldname1/} - {field.fieldname2/} ...</li><br/>
10{/dede:datalist}<br/>
11<br/>
12{tag:pagelist listitem="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
这个文件是dedecms V5.3及之前版本使用的主要的模板类,它是解析式模板类,并非编译式的(区别是前者通过获得标签位置进行内容替换,后者是直接解析式PHP代码,二次执行)
一、模板语法
织梦模板引擎是一种使用XML名字空间形式的模板解析器,使用织梦解析器解析模板的最大好处是可以轻松的制定标记的属性,感觉上就像在用HTML一样,使模板代码十分直观灵活,新版的织梦模板引擎不单能实现模板的解析还能分析模板里错误的标记。
1、织梦模板引擎的代码样式有如下几种形式:
{dede:标记名称属性='值'/}
{dede:标记名称属性='值'}{/dede:标记名称}
{dede:标记名称属性='值'}自定义样式模板(InnerText){/dede:标记名称}
提示:
如果使用带底层模板的标记,必须严格用{dede:标记名称属性='值'}{/dede:标记名称} 这种格式,否则会报错。
2、织梦模板引擎内置有多个系统标记,这些系统标记在任何场合都是能直接使用的。
(1) global标记,表示获取一个外部变量,除了数据库密码之外,能调用系统的任何配置参数,形式为:
{dede:global name='变量名称'}{/dede:global}
或
{dede:global name='变量名称'/}
其中变量名称不能加$ 符号,如变量$cfg_cmspath ,应该写成{dede:global name='cfg_cmspath'/} 。
(2) foreach用来输出一个数组,形式为:
{dede:foreach array='数组名称'}[field:key/] [field:value/]{/dede:foreach}
(3) include引入一个文件,形式为:
{dede:include file='文件名称' ismake='是否为dede板块模板(yes/no)'/}
对文件的搜索路径为顺序为:绝对路径、include文件夹,CMS安装目录,CMS主模板目录3、织梦标记允许在任何标记中使用函数对得到的值进行处理,形式为:
{dede:标记名称属性='值' function='youfunction("参数一","参数二","@me")'/}
其中@me 用于表示当前标记的值,其它参数由你的函数决定是否存在,例如:{dede:field name='pubdate' function='strftime("%Y-%m-%d %H:%M:%S","@me")'/}
4、织梦标记允许有限的编程扩展。
格式为:
{dede:tagname runphp='yes'}
$aaa = @me;
@me = "123456";
{/dede:tagname}
@me 表示这个标记本身的值,因此标记内编程是不能使用echo之类的语句的,只能把所有返回值传递给@me。
此外由于程序代码占用了底层模板InnerText的内容,因此需编程的标记只能使用默认的InnerText。
二、解析方式
在dedetag.class.php 里面有四个类
class DedeAttribute 属性结构表述
class DedeAttributeParse 属性解析器
class DedeTag 标签结构表述
class DedeTagParse 标签解析器
使用解析类解析模板时一般经过下面的步骤
1、初始化:
$dtp = new DedeTagParse();
2、载入模板/模板字符串:
$dtp->LoadTemplate(模板文件(绝对路径)); //会生成缓存,第二次不需解析模板
或$dtp->LoadSource(字符串);
3、给标签赋值
foreach($dtp->CTags as $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 这个类的结构,从而判断标签不同属性进行处理。
1class DedeTag
2{
3var $IsReplace=FALSE; //标记是否已被替代,供解析器使用
4var $TagName=""; //标记名称
5var $InnerText=""; //标记之间的文本
6var $StartPos=0; //标记起始位置
7var $EndPos=0; //标记结束位置
8var $CAttribute=""; //标记属性描述,即是class DedeAttribute 9var $TagValue=""; //标记的值
10var $TagID = 0;
11
12//获取标记的名称和值
13function GetName()
14{
15return strtolower($this->TagName);
16}
17
18function GetValue()
19{
20return $this->TagV alue;
21}
22
23//下面两个成员函数仅是为了兼容旧版
24function GetTagName()
25{
26return strtolower($this->TagName);
27}
28
29function GetTagValue()
30{
31return $this->TagV alue;
32}
33
34//获取标记的指定属性
35function IsAttribute($str)
36{
37return $this->CAttribute->IsAttribute($str);
38}
39
40function GetAttribute($str)
41{
42return $this->CAttribute->GetAtt($str);
43}
44
45function GetAtt($str)
46{
47return $this->CAttribute->GetAtt($str);
48}
49
50function GetInnerText()
51{
52return $this->InnerText;
53}
54}
2.5、dedetemplate.class.php 动态模板类
核心类文件
include/dedetemplate.class.php
用途:用于非核心模块的动态页面或列表页的模板解析,如:member/content_list.php ,通常是在datalistcp.class.php 中使用,这个类在动态运行的情况下,由于本身是把模板编译成PHP的,因此性能上会优级于旧的解析类,这个方法将在未来版本中作为通用的方式。
一、使用方法:
$tpl = new DedeTemplate(
模板对象实例名称,通常是'tpl',
[模板存放目录(生成缓存时会存放在这个目录),
include语法默认引用目录]
);
通常情况下参数二和参数三是不必要的,如:
$tpl = new DedeTemplate('tpl');
如果在类文件中调用,应该加上设置:
$this->tpl->SetObject($this);
在一些块调用中默认将使用当前类的成员函数。
$tpl->LoadTemplate(模板的物理路径);
如果模板中带有{dede:config name='' value=''/}
可以在载入模板后,通过$tpl->GetConfig($name) 获得这些变量的值。
显示页面或保存页面为文件
$tpl->Display();
$tpl->SaveTo(物理绝对路径的文件名);
二、模板标记语法
1、标记通用特性
(1) 短标记
{dede:/}
等同于
{dede:tagname name='' /}
(2) 块标记
{dede:tagname}
循环代码
{/dede:tagname}
2、标记的具体语法及对应的PHP代码
(1) 配置变量
{dede:config name='' value=''/}
配置变量可以在载入模板后通过$tpl->GetConfig($name) 获得,仅作为配置,不在模板中显示。
(2) 短标记
{dede:/} 外部变量等同于<?php echo $name; ?>
{dede:/} var数组等同于<?php echo $_vars['name']; ?>
{dede:/} field数组等同于<?php echo $fields['name']; ?>
{dede:/} 系统配置变量等同于<?php echo $cfg_name; ?>
考虑到大多数情况下都会在函数或类中调用模板,因此$_vars、$fields 数组必须声明为global 数组,否则模板引擎无法获得它的值从而导致产生错误。
(3) 自由调用块标记
{tag:blockname bind='GetArcList' bindtype='class'}
循环代码
{/tag:blockname}
必要属性:
bind 数据源来源函数
bindtype 函数类型,默认是class 可选为sub
rstype 返回结果类型,默认是array ,可选项为string
自定义函数格式必须为function(array $atts,object $refObj, array $fields);
在没有指定bind 绑定的函数的情况下,默认指向MakePublicTag($atts,$tpl->refObj,$fields) 统一管理,这个函数存放在cls_dede_tplinc.php 。
(4) 固定块标记
[1] datalist
从绑定类成员函数GetArcList中获取数组并输出
{dede:datalist}
循环代码
{/dede:datalist}
遍历一个二给维数组,数据源是固定的,只适用用类调用。
等同于
{tag:blockname bind='GetArcList' bindtype='class' rstype='arrayu'}
循环代码
{/tag:blockname}
[2] label
从绑定函数中获取字符串值并输出
等同于{tag:blockname bind='func' bindtype='sub' rstype='string'/}
[3] pagelist
从绑定类成员函数GetPageList中获取字符串值并输出
等同于{tag:blockname bind='GetPageList' bindtype='class' rstype='string'/}
(5) include 语法
{dede:include file=''/}
{dede:include filename=''/}
(6) php 代码块
{dede:php
php 代码
/}
或
{dede:php}
php代码
{/dede:php}
(7) if 条件
仅支持if ,else ,else 直接用{else}表示,但不支持{else if}这样的语法,一般建议模板中不要使用太复杂的条件语法,如果确实有需要,可以直接使用php 语法。
{dede:if 条件} a-block {else} b-block {/dede:if}
条件中允许使用 、 、、 表示相应的变量。
如:
{dede:if field.id>10 }
{/dede:if}
(8) 遍历一个array 数组
{dede:}
{dede:key/} = {dede:value/}
{/dede:array}
各种语法的具体编译后的代码,可查看dede-template-class.php 的function CompilerOneTag(&$cTag)。
块调用示例代码:
1、示例一
1{tag:datalist timeformat=""}<br/>
2<tr><br/>
3<td class='col1'><br/>
4<div>?<a href='{tag:field.arcurl/}'>{tag:field.title/}</a></div><br/> 5<!--div
class='descriptions'> {tag:field.description
function="CnSubstr(@me,150)"/}...</div--><br/>
6</td><br/>
7<td class='col2'>{tag:field.formattime/}</td><br/>
8</tr><br/>
9{/tag:datalist}
编译后的代码
10<?php
11$atts = array();
12$atts['tagname'] = 'datalist';
13$atts['timeformat'] = '';
14$blockValue = $this->refObj->GetArcList($atts,$this->refObj,$fields);
15foreach( $blockValue as $key=>$fields )
16{
17?>
18<tr>
19<td class='col1'>
20<div>?<a href='<?php echo $fields['arcurl']; ?>'><?php echo $fields['title']; ?></a></div> 21<!--div class='descriptions'> <?php echo CnSubstr($fields['description'],150); ?>...</div-->
22</td>
23<td class='col2'><?php echo $fields['formattime']; ?></td>
24</tr>
25<?php
26}
27?>
28
2、示例二
29{tag:article sort='new'titlelen='36'row='10'}<br/>
30<dd>[{tag:field.typename/}]<a href="{tag:field.arcurl/}">{tag:field.title function="CnSubstr(@me,24)"/}</a></dd><br/>
31{/tag:article}
编译后的代码
32<?php
33$atts = array();
34$atts['tagname'] = 'article';
35$atts['sort'] = 'new';
36$atts['titlelen'] = '36';
37$atts['row'] = '10';
38$blockValue = MakePublicTag($atts,$this->refObj,$fields);
39if(is_array($blockValue) && count($blockValue) > 0){
40foreach( $blockValue as $key=>$fields )
41{
42?>
43<dd>[<?php echo $fields['typename']; ?>]<a href="<?php echo $fields['arcurl']; ?>"><?php echo CnSubstr($fields['title'],24); ?></a></dd>
44<?php
45}
46}
47?>
48
三、数据库篇
dede_archives|文档主表
字段类型整理属性Null默认额外
id mediumint(8) UNSIGNED 是0 文档ID typeid smallint(8) UNSIGNED 是0 栏目ID sortrank int(10) UNSIGNED 是0 时间排序
flag set('c','h','p','f','s
','j','a','b') utf8_general_ci 是NULL自定义属性
值
ismake smallint(6) 是0 是否审核channel smallint(6) 是 1 所属模型ID arcrank smallint(6) 是0 阅读权限click mediumint(8) UNSIGNED 是0 点击数money smallint(6) 是0 消费点数title char(60) utf8_general_ci 是标题shorttitle char(36) utf8_general_ci 是简明标题
color char(7) utf8_general_ci 是颜色
writer char(20) utf8_general_ci 是作者
source char(30) utf8_general_ci 是文档来源litpic char(60) utf8_general_ci 是缩略图pubdate int(10) UNSIGNED 是0 时间senddate int(10) UNSIGNED 是0 时间
mid mediumint(8) UNSIGNED 是0 会员ID keywords char(30) utf8_general_ci 是关键词templet char(30) utf8_general_ci 是
lastpost int(10) UNSIGNED 是0 最后回复scores mediumint(8) UNSIGNED 是0 阅读权限goodpost mediumint(8) UNSIGNED 是0 好评
badpost mediumint(8) UNSIGNED 是0 差评
notpost tinyint(1) UNSIGNED 是0 评论选项(1:
充许评论)userip char(15) utf8_general_ci 是IP redirecturl varchar(255) utf8_general_ci 是跳转地址description varchar(255) utf8_general_ci 是摘要
dede_addonarticle|文章附加表
字段类型整理属性Null默认额外
aid mediumint(8) UNSIGNED 否0 文档ID typeid smallint(5) UNSIGNED 否0 栏目ID
body mediumtext utf8_general_ci是NULL内容
dede_addonimages|图片附加表
字段类型整理属性Null默认额外
aid mediumint(8) UNSIGNED 否0 文档ID typeid smallint(5) UNSIGNED 否0 栏目ID pagestyle smallint(6) 否 1 表现方式(多
页多图显示、
多页单图显
示、多行多列
显示)maxwidth smallint(6) 否600 图片宽度限
制
imgurls text utf8_general_c
i 是NULL图片内容
({dede:page
style…)
row smallint(6) 否0 多列式参数
(行)
col smallint(6) 否0 多列式参数
(列)
isrm smallint(6) 否0 特殊选项(下
载远程图片、
从ZIP压缩包
中解压图片、
网上复制图
片)
ddmaxwidt h smallint(6) 否200 缩略图宽度
限制
pagepicnum smallint(6) 否12 每页图片数
(单页多图
显示需要设
置此参数)dede_addonshop|商品附加表
字段类型整理属性Null默认额外
aid mediumint(8) UNSIGNED 否0 文档id
typeid smallint(5) UNSIGNED 否0 栏目id
body mediumtext utf8_general_ci是NULL商品内容price float 否0 价格trueprice float 否0 优惠价
brand varchar(250) utf8_general_ci否品牌
units varchar(250) utf8_general_ci否单位
dede_addonsoft|软件附加表
字段类型整理属性Null默认额外
aid mediumint(8) UNSIGNED否0 文档ID
typeid smallint(5) UNSIGNED否0 栏目ID
filetype varchar(10) utf8_general_ci否文件类型(zip、rar)language varchar(10) utf8_general_ci否软件语言
softtype varchar(10) utf8_general_ci否软件类型(国产..)accredit varchar(10) utf8_general_ci否授权方式(共享软
件..)
os varchar(30) utf8_general_ci否运行环境
(windows..)softrank mediumint(8) UNSIGNED否0 软件等级(一星..)officialUrl varchar(30) utf8_general_ci否官方网址officialDemo varchar(50) utf8_general_ci否程序演示
softsize varchar(10) utf8_general_ci否软件大小softlinks text utf8_general_ci是NULL软件地址introduce text utf8_general_ci是NULL软件说明daccess smallint(5) 否0 下载权限
dede_addonspec|专题附加表
字段类型整理属性Null默认额外
aid mediumint(8) UNSIGNED否0 文档ID
typeid smallint(5) UNSIGNED否0 栏目ID
note text utf8_general_ci是NULL专题节点
dede_arctype|栏目表
字段类型整理属性Null默认额外
id smallint(5) UNSIGNED 是NULL栏目ID
reid smallint(5) UNSIGNED 是0 上级栏目
topid smallint(5) UNSIGNED 是0 顶级栏目
sortrank smallint(5) UNSIGNED 是50 栏目排序typename char(30) utf8_general_ci 是栏目名
typedir char(60) utf8_general_ci 是目录地址isdefault smallint(6) 是0 栏目列表选项(1:
链接到默认页;0:
链接到列表第一
页;-1:使用动态
页)
默认页的名称defaultname char(15) utf8_general_ci 是index
.html
issend smallint(6) 是0 是否支持投稿(0:
不支持;1:支持)channeltype smallint(5) UNSIGNED是 1 所属频道ID maxpage smallint(6) 是-1
ispart smallint(6) 是0 栏目属性(0:最终
列表栏目;1:频道
封面;2:外部连接)corank smallint(6) 是0 浏览权限tempindex char(50) utf8_general_ci 是封面模板
templist char(50) utf8_general_ci 是列表模板temparticle char(50) utf8_general_ci 是内容模板namerule char(50) utf8_general_ci 是文章命名规则
({typedir}/{Y}{
M}{D}/{aid}.html
)
namerule2char(50) utf8_general_ci 是列表命名规则
({typedir}/list_{ti
d}_{page}.html)modname char(20) utf8_general_ci 是
description char(150) utf8_general_ci 是栏目描述keywords char(30) utf8_general_ci 是关键词
moresite tinyint(1) UNSIGNED是0 多站点支持(0:不
启用)
sitepath char(60) utf8_general_ci 是栏目地址
siteurl char(50) utf8_general_ci 是绑定域名ishidden smallint(6) 是0 是否隐藏栏目(0:
显示)
cross tinyint(1) 是0 栏目交(0:不交叉;
1:自动获取同名栏
目内容;2:手工指
定交叉栏目ID)crossid text utf8_general_ci 是NULL交叉栏目ID content text utf8_general_ci 是NULL栏目内容
dede_flinktype|友情链接网站类型
字段类型整理属性Null默认额外
id mediumint(8) UNSIGNED是NULL链接类型ID typename varchar(50) utf8_general_ci 是类型名称
dede_flink|友情链接表
字段类型整理属性Null默认额外
id smallint(5) UNSIGNED是NULL友链ID
sortrank smallint(6) 是0 排序值
url char(60) utf8_general_ci是链接地址webname char(30) utf8_general_ci是网站名
msg char(200) utf8_general_ci是网站简况
email char(50) utf8_general_ci是站长EMAIL
logo char(60) utf8_general_ci是LOGO
dtime int(10) UNSIGNED是0 链接时间
typeid smallint(5) UNSIGNED是0 站点类型
ischeck smallint(6) 是 1 链接位置(1、内
页;2、首页)
dede_admin|系统管理用户表
字段类型整理属性Null默认额外
id int(10) UNSIGNED 否管理员ID usertype int(10) UNSIGNED 否0 级别值
userid char(30) utf8_general_ci否用户名
pwd char(32) utf8_general_ci否用户密码
uname char(20) utf8_general_ci否用户笔名
tname char(30) utf8_general_ci否真实姓名
email char(30) utf8_general_ci否Email
typeid smallint(5) UNSIGNED 否0 授权栏目(0为所
有)
logintime int(10) UNSIGNED 否0 登陆时间
loginip varchar(20) utf8_general_ci否登陆IP
dede_member|会员表
字段类型整理属性Null默认额外
mid mediumint(8
UNSIGNED 是NULL会员ID
)
mtype enum('个人','
utf8_general_ci 是个人会员类型
企业')
userid char(20) utf8_general_ci 是注册用户名
pwd char(32) utf8_general_ci 是密码
uname char(36) utf8_general_ci 是昵称
sex enum('男','女
utf8_general_ci 是保密性别
','保密')
rank smallint(5) UNSIGNED 是0 会员级别值uprank smallint(5) UNSIGNED是0 是否待升级money mediumint(8
UNSIGNED 是0 会员金币
)
upmoney smallint(5) UNSIGNED 是0 是否待充值email char(50) utf8_general_ci 是Email
scores mediumint(8
UNSIGNED 是0 积分
)
matt smallint(5) UNSIGNED 是0 推荐
spacesta smallint(6) 是0 会员空间状况face char(50) utf8_general_ci 是头像safequestion smallint(5) UNSIGNED 是0 安全提示问题safeanswer char(30) utf8_general_ci 是安全提示问题答
案
jointime int(10) UNSIGNED 是0 注册时间
joinip char(16) utf8_general_ci 是注册IP logintime int(10) UNSIGNED 是0 登陆时间
loginip char(16) utf8_general_ci 是登陆IP
dede_member_space|会员空间资料
字段类型整理属性Null默认额外
mid mediumint(8) UNSIGNED 是0 会员ID pagesize smallint(5) UNSIGNED 是10 每页文档数matt smallint(6) 是0
spacename varchar(50) utf8_general_ci 是空间名spacelogo varchar(50) utf8_general_ci 是空间LOGO spacestyle varchar(20) utf8_general_ci 是空间风格sign varchar(100) utf8_general_ci 是没签名签名spacenews text utf8_general_ci 是NULL空间动态
dede_plus|插件管理表
字段类型整理属性Null默认额外
aid mediumint(8) UNSIGNED是NULL插件ID plusname varchar(30) utf8_general_ci 是插件名menustring varchar(200) utf8_general_ci 是菜单配置mainurl varchar(50) utf8_general_ci 是目标框架writer varchar(30) utf8_general_ci 是作者
isshow smallint(6) 是 1 是否启用filelist text utf8_general_ci 是NULL文件列表
dede_sys_set|系统设置表
字段类型整理属性Null默认额外
id smallint(5) UNSIGNED是NULL auto_increment sname char(20) utf8_general_ci 是设置名称items text utf8_general_ci 是NULL 设置条目
dede_sysconfig|系统参数表
字段类型整理属性Null默认额外
aid smallint(8) UNSIGNED是0 参数ID varname varchar(20) utf8_general_ci 是参数名
info varchar(100) utf8_general_ci 是变量说明groupid smallint(6) 是 1 变量类型ID type varchar(10) utf8_general_ci 是string 变量类型value text utf8_general_ci 是NULL 值
dede_tagindex|Tags标签表
字段类型整理属性Null默认额外
id int(10) UNSIGNED 是NULL Tagid tag char(12) utf8_general_ci 是TAG内容count int(10) UNSIGNED 是0 点击total int(10) UNSIGNED 是0 文档数weekcc int(10) UNSIGNED 是0 周统计monthcc int(10) UNSIGNED 是0 月统计addtime int(10) UNSIGNED 是0 添加时间
dede_tagindex|Tags标签表
字段类型整理属性Null默认额外
id int(10) UNSIGNED 是NULL Tagid tag char(12) utf8_general_ci 是TAG内容count int(10) UNSIGNED 是0 点击total int(10) UNSIGNED 是0 文档数weekcc int(10) UNSIGNED 是0 周统计monthcc int(10) UNSIGNED 是0 月统计addtime int(10) UNSIGNED 是0 添加时间
dede_taglist|TAG标签列表表
字段类型整理属性Null默认额外
tid int(10) UNSIGNED 是0 TAGID aid int(10) UNSIGNED 是0 文章ID arcrank smallint(6) 是0
typeid smallint(5) UNSIGNED 是0 栏目ID tag varchar(12) utf8_general_ci 是TAG内容
四、程序篇
4.1、自定义模型使用教程
在织梦系统中有内容模型这个概念,不同内容模型可以用来构建不同内容形式的站点,在系统中自带了以下几种模型:普通文章、图集、软件、商品、分类信息、专题。
通过系统自带的模型,我们可以用来构建不同类型的站点,例如:使用图集可以做一个图片站,用软件模型构建一个软件下载站点。
当然以上随系统附带的模型被称为系统模型,用户可以自己定义一些模型,比如图书、音乐专辑等,自定义了这些模型才可以构建更多内容形式的站点,本篇将讲述如何使用系统的自定义模型管理功能来实现内容模型的构建。
我们首先登录系统后台,点击[核心]-[内容模型管理],进入内容模型管理界面,如下图所示:
这里我们介绍几个相关参数的概念:
•ID号用于区分模型的唯一ID,一般常规模型的ID都是大于0的,比如普通文章、软件等,如果使用了单表模型,ID一般需要小于-1,例如这里的分类信息模型;
•频道名称用于识别频道类型的标识;
•识别id系统用于识别的id,这个关系到模板方面;
•附加表系统内容附加表项;
•模型类型分为系统类型和自动类型,系统类型为固化在系统中的内容模型,自动类型为用户可创建的内容模型类型;
接下来我们开始介绍如何使用自定义模型管理来创建一个自己的模型,并且用于建设不同内容类型的网站中去。
这里我们介绍一些周边的内容,几个要用到的概念:
•字段在数据库中,表的列称为字段,织梦系统也是如此,但更恰当的说法,存储某个内容信息单元,称为字段,例如标题、来源、作者等都是一个字段;
•内容系统主表程序将一些公用字段存储在系统主表dede_archives,例如:标题、关键词、缩略图等,主表具体字段可以查询织梦帮助中心()的有关二次开发手册数据表部分的内容;
•附加表不同内容模型对应不同的附加表,通常以dede_addon[识别ID]命名,附加表中存放的都是详细内容的相关字段(非公用),例如:文章内容(dede_addonarticle)、软件类型(dede_addonsoft)、图片集合(dede_addonimage)等;
•单表独立模型存储时候不用到“主表+附加表”的结构形式,直接使用单个数据表进行存储内容数据,这样脱离主从表,减少主表数据服在开销,可以从很大程度上解决数据负载问题;明白了以上几个概念我们可以来学习如何来自己创建一个内容模型了。
一个完整的内容模型包含模型数据表、数据字段、模型模板、模型参数4个部分,制作一个内容模型大致有以下几个步骤:1.模型规划;2.模型制作;3.模板制作;4.栏目设置,下面我们从上面4个步骤来讲解内容模型的制作。
这里我们以一个图书模型(book)为例子,这个模型主要功能就是介绍书籍。
模型规划
模型规划分为几个部分一个是模型应用方面的规划,其次就是字段信息方面的规划,以图书(book)模型为例子,我们现规划一个频道使用这个模型,这个频道作用就是让大家分享一些。