一、模板篇
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();
3 while($arr = $db->GetArray())
4 {
5 }
可以简化为:
6 $db->Execute('me',$dsql);
7 while($arr = $db->GetArray())
8 {
9 }
'me' 为记录集游标,用于区分不同的查询,如:
10 $db->Execute('me',$dsql);
11 while($arr = $db->GetArray())
12 {
13 $db->Execute('2',$dsql2);
14 while($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这个类的结构,从而判断标签不同属性进行处理。
1 class DedeTag
2 {
3 var $IsReplace=FALSE; //标记是否已被替代,供解析器使用
4 var $TagName=""; //标记名称
5 var $InnerText=""; //标记之间的文本
6 var $StartPos=0; //标记起始位置
7 var $EndPos=0; //标记结束位置
8 var $CAttribute=""; //标记属性描述,即是class DedeAttribute
9 var $TagValue=""; //标记的值
10 var $TagID = 0;
11
12 //获取标记的名称和值
13 function GetName()
14 {
15 return strtolower($this->TagName);
16 }
17
18 function GetValue()
19 {
20 return $this->TagValue;
21 }
22
23 //下面两个成员函数仅是为了兼容旧版
24 function GetTagName()
25 {
26 return strtolower($this->TagName);
27 }
28
29 function GetTagValue()
30 {
31 return $this->TagValue;
32 }
33
34 //获取标记的指定属性
35 function IsAttribute($str)
36 {
37 return $this->CAttribute->IsAttribute($str);
38 }
39
40 function GetAttribute($str)
41 {
42 return $this->CAttribute->GetAtt($str);
43 }
44
45 function GetAtt($str)
46 {
47 return $this->CAttribute->GetAtt($str);
48 }
49
50 function GetInnerText()
51 {
52 return $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:tagname.name/}
等同于
{dede:tagname name='' /}
(2) 块标记
{dede:tagname}
循环代码
{/dede:tagname}
2、标记的具体语法及对应的PHP代码
(1) 配置变量
{dede:config name='' value=''/}
配置变量可以在载入模板后通过 $tpl->GetConfig($name) 获得,仅作为配置,不在模板中显示。
(2) 短标记
{dede:global.name/} 外部变量 等同于 <?php echo $name; ?>
{dede:var.name/} var数组 等同于 <?php echo $_vars['name']; ?>
{dede:field.name/} field数组 等同于 <?php echo $fields['name']; ?>
{dede:cfg.name/} 系统配置变量 等同于 <?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}
条件中允许使用 var.name 、 global.name 、 field.name、cfg.name 表示相应的变量。
如:
{dede:if field.id>10 }
{/dede:if}
(8) 遍历一个 array 数组
{dede:array.name}
{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);
15 foreach( $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);
39 if(is_array($blockValue) && count($blockValue) > 0){
40 foreach( $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_ci |
| 是 | NULL | 图片内容({dede:pagestyle…) |
row | smallint(6) |
|
| 否 | 0 | 多列式参数(行) |
col | smallint(6) |
|
| 否 | 0 | 多列式参数(列) |
isrm | smallint(6) |
|
| 否 | 0 | 特殊选项(下载远程图片、从ZIP压缩包中解压图片、网上复制图片) |
ddmaxwidth | 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) |
namerule2 | char(50) | utf8_general_ci |
| 是 |
| 列表命名规则({typedir}/list_{tid}_{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 |
| 是 |
| 网站简况 |
| 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 |
| 否 |
| 真实姓名 |
| char(30) | utf8_general_ci |
| 否 |
| |
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 | 是否待充值 |
| char(50) | utf8_general_ci |
| 是 |
| |
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,例如:标题、关键词、缩略图等,主表具体字段可以查询织梦帮助中心(http://help.dedecms.com)的有关二次开发手册数据表部分的内容;
•附加表 不同内容模型对应不同的附加表,通常以dede_addon[识别ID]命名,附加表中存放的都是详细内容的相关字段(非公用),例如:文章内容(dede_addonarticle)、软件类型(dede_addonsoft)、图片集合(dede_addonimage)等;
•单表独立模型 存储时候不用到“主表+附加表”的结构形式,直接使用单个数据表进行存储内容数据,这样脱离主从表,减少主表数据服在开销,可以从很大程度上解决数据负载问题;
明白了以上几个概念我们可以来学习如何来自己创建一个内容模型了。
一个完整的内容模型包含模型数据表、数据字段、模型模板、模型参数4个部分,制作一个内容模型大致有以下几个步骤:1.模型规划;2.模型制作;3.模板制作;4.栏目设置,下面我们从上面4个步骤来讲解内容模型的制作。这里我们以一个图书模型(book)为例子,这个模型主要功能就是介绍书籍。
模型规划
模型规划分为几个部分一个是模型应用方面的规划,其次就是字段信息方面的规划,以图书(book)模型为例子,我们现规划一个频道使用这个模型,这个频道作用就是让大家分享一些好的学习资料,这里主要是编程方面的书籍,所以栏目划分大致如下:
[网络编程书籍]
|____[ASP相关]
|____[PHP相关]
|____[JSP相关]
|____[.NET相关]
这几个栏目是支持会员投稿的,因为这个推荐的书籍不是很多,所以直接采用主从表的形式,不使用独立单表模型,因为涉及到会员分享,所以这里需要会员投稿,我们给投稿会员级别设置为中级会员才有权限,并且需要摘要和说略图,投稿之后需要经过管理员审核,这样基本的使用规划完成,下面就是字段方面的规划了。
因为介绍一本书,我们规划了以下内容:
出 版 社 | publish | 单行文本(varchar) |
出版时间 | pubtime | 时间类型 |
字 数 | cnum | 整数类型 |
版 次 | pubnum | 整数类型 |
页 数 | pagenum | 整数类型 |
印刷时间 | pritime | 时间类型 |
开 本 | kbook | 单行文本(varchar) |
印 次 | prinum | 整数类型 |
纸 张 | pages | 单行文本(varchar) |
I S B N | isbn | 单行文本(varchar) |
包 装 | packs | 单行文本(varchar) |
内容简介 | body | HTML文本 |
作者简介 | wrbody | HTML文本 |
目录 | bindex | HTML文本 |
这样,我们完成了第一步模型的规划。
模型制作
规划完成了,接下来我们开始将这些规划的内容创建为一个内容模型。首先以超级管理员身份登录到系统后台。点击[核心]-[模型管理],点击“增加新模型”按钮来创建模型。
按照系统提示配置模型的基本信息,这里因为选择的是自动模型,所以档案发布的相管程序页面只需要保留默认即可。因为我们发布的是图书,所以这里“投稿标题使用名称”设置为:图书名称。
因为这里我们使用的是自动模型,没有自己制作相应的发布管理程序,所以下面的相关模型发布程序保持默认即可,当然如果你有一定的编程能力,可以自己制作一个内容发布程序,然后在这里指定即可。
基本信息设置完毕,直接单击确定即可,进入到字段管理的页面,点击字段管理中的“添加新字段”按钮,进入字段添加页面,我们根据相关的字段信息进行字段添加。
下面是一些字段类型我们对部分字段进行一些说明:
|
了解了这些字段类型我们就可以添加我们的字段信息了。
添加完成点击确定即可,这样我们就完成了这个模型的制作。模型添加完毕之后我们发现在内容发布的地方多出来一个发布图书的选项,这个说明我们的模型就已经成功添加了。
模板制作
我们通过织梦帮助中心的《主要模板文件与功能说明》了解到每个模型还需要制作对应的模型模板文件,我们可以通过后台模型管理中的模板文件说明查看模板文件。
模板制作主要有2个地方需要讲解下。
1. 列表页模板list_[识别ID].htm中显示在列表中需要调用添加扩展的字段需要在添加字段页面勾选“使字段可以在列表的底层模板中获得(自定义字段默认仅能在文档模板显示,启用此选项将使列表查询变慢,如无必要请不要选择)”,这样在{dede:list/}标签中就可以使用[field:fieldname/]来进行调用。
2. 内容页的标签可以使用{dede:field.fieldname /} 进行调用,具体可以参考帮助中心模板相关的帮助文档。
栏目设置
接下来我们就可以来添加一个栏目,在栏目设置中将栏目的内容模型设置为图书
然后我们就可以在这个栏目下添加文档,会发现我们现在可以发布图书内容了
添加完成之后,我们可以浏览我们的网站页面,预览我们的模型效果。
至此我们完成了整个模型的制作,整个过程还是非常简单的。这里只介绍了自动模型的制作,当然有一定PHP基础的用户可以自己开发系统模型,这样就会拥有更为强大的织梦系统,使得网站内容更加丰富。
4.2、联动类别使用说明教程
织梦在新版本V5.3中加入了一个联动类别的功能,不少人不理解这个联动类别的使用方法,本教程天涯就来介绍如何使用这个功能。
联动类别使用的地方还是比较多的,首先我们可以通过后台的[核心]-[频道模型]-[联动类别管理]查看,联动类别其定义如下:系统一种特殊的枚举数据类别,可以有系统内置或由用户管理。系统内置的枚举用户是不可以删除的,但可以对这些数据进行添加子分类及修改。到这里可能一些用户还是不了解什么是联动类型,下面我们举几个简单的例子。
一个最简单的联动类型是只有一级选择的类型,比如说系统内置的星座、教育程度、血型,这种类型你可以点击进去查看,其结构很简单,例如星座(star):
在这个联动类别中级数为“一级选择”,就是在这个星座类别下面只有一列品级数据进行选择,我们点击进去可以查看到以下内容:
这个让我们很容易联想到许多网站中设置用户资料的时候,需要用户选择星座,我们就可以通过一个下拉框进行选择:
当然,上面说到的是最简单的联动类别,只有一级联动,这种一级联动就可以好比是一个下拉框,用户在选择具体数据的时候只要通过下拉框这种形式就可以对数据进行选择。但是我们在很多联动数据中遇到不少需要二级联动的类型,例如我们在资料设置中选择“所在城市”这个类别,如下图所示
这种数据类型就属于需要选择2次分类,首先选择上海市,然后列出上海市拥有的地区,然后再进行第二次选择,这就是一个二级联动的类别,我们可以通过系统后台查看联动类别中的地区来看看系统的枚举类型。
通过以上2个例子我们不难理解联动类型的概念,其实说简单了就是一种特殊的枚举数据类型,这种特殊的枚举类型运用在创建内容模型、用户资料等数据录入的页面中,其中应用在创建模型及用户自定义表单是联动类别最常用的地方,下面我们来介绍如何使用这个联动模型。
我们以创建一个“图书(book)”内容模型为例,这个模型中我们需要网站管理员(用户)提交一个图书特征的分类,我们知道以下图书特征的分类:
线装书,精装书,平装书,袋装书,电子书,有声读物,盲人书
下面我们就创建一个这个一级选择的枚举类型,这个类型叫图书特征(bookfeature),我们点击“新增类别组”来创建分类。
创建完成后我们将类别的内容全部添加到这个类别中去,在页面中提示我们如果一次性添加多个类别可以用“,”将不同类别隔开,然后一次性添加。
这样我们就创建完成了这个图书特征(bookfeature)的联动类型,接下来我们要应用这个联动类型,我们在新创建的模型中添加字段,在字段添加的页面中添加相应的字段名称,选择数据类型为联动类型,如下图所示:
在我们发布图书内容的时候,就会发现有一个选择是图书特征的内容类型选择,不过个人建议如果设计一级联动选择,最好还是使用“option下拉框”这个数据类型。
使用同样的字段设置方法也可以添加其他二级联动的字段,这个我们可以查看“分类信息”这个模型里面的联动类型数据。
当然我们在系统的自定义表单中也可以使用这个联动类型,使用的方法和模型管理里面添加字段是一样的,这里就不再重复了。当然,在二次开发中也会遇到在一些页面调用这些枚举的列表,可以查看/include/enums.func.php第61行GetEnumsForm这个函数,具体的使用可以参考下会员中心编辑用户信息这个页面文件的方法,具体文件为/member/templets/ edit_info_person.htm。
枚举类型在模型制作和系统开发中用到的地方还是比较多的,大家可以有空的时候进行一些研究,会发现更多关于联动类型的应用方法,不要忘记分享哦。
五、标签篇
仅内容模板
V55,V56,V57
获得责任编辑名称
基本语法
{dede:adminname /}
arclist
全局标记
V55,V56,V57
获取指定文档列表
基本语法
{dede:arclist flag='h' typeid='' row='' col='' titlelen='' infolen='' imgwidth='' imgheight='' listtype='' orderby='' keyword='' limit='0,1'}
<a href='[field:arcurl/]'>[field:title/]</a>
{/dede:arclist}
标签属性
· col:分多少列显示(默认为单列),5.3版中本属性可以通过多种方式进行多行显示
· row:返回文档列表总数
· typeid:栏目ID,在列表模板和档案模板中一般不需要指定,在首页模板中允许用","分开表示多个栏目
· getall:在没有指定这属性的情况下,在栏目页、文章页模板,不会获取以","分开的多个栏目的下级子类
· titlelen:标题长度 等同于titlelength
· infolen:表示内容简介长度 等同于infolength
· imgwidth:缩略图宽度
· imgheight:缩略图高度
· listtype: 栏目类型 image含有缩略图 commend推荐
· orderby:文档排序方式
· keyword:含有指定关键字的文档列表,多个关键字用","分
· innertext:单条记录样式
· aid:指定文档ID
· idlist:提取特定文档(文档ID
· channelid:频道ID
· limit:(起始ID从0开始)表示限定的记录范围(如:limit='1,2' 表示从ID为1的记录开始,取2条记录
· flag:自定义属性值:头条[h]推荐[c]图片[p]幻灯[f]滚动[s]跳转[j]图文[a]加粗[b]
· noflag:同flag,但这里是表示不包含这些属性
· orderway:值为 desc 或 asc ,指定排序方式是降序还是顺向排序,默认为降序
· subday:表示在多少天以内的文档
arclistsg
全局标记
V55,V56,V57
单表独立模型的文档列表调用标记
基本语法
{dede:arclistsg flag='h' typeid='' row='' col='' titlelen='' orderway='' keyword='' limit='0,1'}
<a href='[field:arcurl/]'>[field:title/]</a>
{/dede:arclistsg}
标签属性
· row:返回文档列表总数
· typeid:栏目ID,在列表模板和档案模板中一般不需要指定,在封面模板中允许用","分开表示多个栏目
· titlelen:标题长度 等同于titlelength
· orderwey:排序方向
· keyword:含有指定关键字的文档列表,多个关键字用","分
· innertext:单条记录样式(innertext是放在标签之间的代码)
· arcid:指定文档ID
· idlist:提取特定文档(文档ID)
· channelid: 频道ID
· limit:表示限定的记录范围
· flag:自定义属性值:头条[h]推荐[c]图片[p]幻灯[f]滚动[s]跳转[j]图文[a]加粗[b]
· subday:表示在多少天以内的文档
arcpagelist
ask
全局标记
V55,V56,V57
问答调用标签
基本语法
{dede:ask row='6' qtype='new' tid='0' titlelen='24'}
<dd>
<span class="tclass">[<a href='[field:typeurl/]'>[field:tidname/]</a>]</span>
<span class="tlink"><a href="[field:url/]">[field:title/]</a></span>
</dd>
{/dede:ask}
标签属性
· row:调用条数
· qtype:排序类型 commend 推荐、ok 表示已解决问题、high 高分问题 、new 最新问题
· tid:栏目id,默认是全部
autochannel
全局标记
V55,V56,V57
指定排序位置的单个栏目的链接
基本语法
{dede:autochannel partsort='' typeid=’’}{/dede:autochannel}
标签属性
· partsort:栏目所在的排序位置
bookcontentlist
全局标记
V55,V56,V57
连载图书最新内容调用
基本语法
{dede:bookcontentlist row='12' booktype='-1' orderby='lastpost' author='' keyword=''}
<table width="100%" border="0" cellspacing="2" cellpadding="2">
<tr>
<td width='40%'>
[[field:cataloglink/]] [field:booklink/]</td>
<td width='40%'>[field:contentlink/]</td>
<td width='20%'>[field:lastpost function="GetDateMk(@me)"/]</td>
</tr>
</table>
{/dede:bookcontentlist}
标签属性
· row:调用记录条数
· booktype:图书类型,0 图书、1 漫画,默认全部
· orderby:排序类型,当按排序类型为 commend 表示推荐图书
· author:作者
booklist
全局标记
V55,V56,V57
连载图书调用
基本语法
{dede:booklist row='12' booktype='-1' orderby='lastpost' author='' keyword=''}
<a href='[field:bookurl /]'>[field:bookname /]</a><br />
{/dede:booklist}
标签属性
· row:调用记录条数
· booktype:图书类型,0 图书、1 漫画,默认全部
· orderby:排序类型,当按排序类型为 commend 表示推荐图书
· author:作者
cattree
全局标记
V55,V56,V57
调用树形类目
基本语法
{dede:cattree typeid='' catid='' showall=''/}
标签属性
· typeid:顶级树id
· catid:上级栏目id
· showall:在空或不存在时,强制用产品模型id;如果是 yes 刚显示整个语言区栏目树;为其它数字则是这个数字的模型的id
channel
全局标记
V55,V56,V57
用于获取栏目列表
基本语法
{dede:channel type='top' row='8' currentstyle="<li><a href='~typelink~' class='thisclass'>~typename~</a> </li>"}
<li><a href='[field:typelink/]'>[field:typename/]</a> </li>
{/dede:channel}
标签属性
· typeid:栏目ID
· reid:上级栏目ID
· row:调用栏目数
· col:分多少列显示(默认为单列)
· type:son表示下级栏目,self表示同级栏目,top顶级栏目
channelartlist
全局标记
V55,V56,V57
获取当前频道的下级栏目的内容列表标签
基本语法
{dede:channelartlist row=6}
<dl>
<dt><a href='{dede:field name='typeurl'/}'>{dede:field name='typename'/}</a></dt>
<dd>
{dede:arclist titlelen='42' row='10'} <ul class='autod'>
<li><a href="[field:arcurl /]">[field:title /]</a></li>
<li>([field:pubdate function="MyDate('m-d',@me)"/])</li>
</ul>
{/dede:arclist}
</dl>
{/dede:channelartlist}
标签属性
· typeid:频道ID
demotag
全局标记
V55,V56,V57
这仅是一个演示标签
基本语法
{dede:demotag /}
feedback
全局标记
V55,V56,V57
用于调用最新评论
基本语法
{dede:feedback}
<ul>
<li class='fbtitle'>[field:username function="(@me=='guest' ? '游客' : @me)"/] 对 [field:title/] 的评论:</li>
<li class='fbmsg'> <a href="plus/feedback.php?aid=[field:aid/]" class='fbmsg'>[field:msg /]</a></li>
</ul>
{/dede:feedback}
标签属性
· row:调用评论条数
· titlelen:标题长度
flink
全局标记
V55,V56,V57
用于获取友情链接
基本语法
{dede:flink row='24'/}
标签属性
· type:链接类型
· row:链接数量
· titlelen:站点文字的长度
· linktype:链接位置内页
· typeid:所有类型,可以在系统后台[模块]-[友情链接]中的“网站类型管理”中查看
flinktype
全局标记
V55,V56,V57
用于获取友情链接类型
基本语法
{dede:flink row='24'/}
标签属性
· row:链接类型数量
group
全局标记
V55,V56,V57
圈子调用标签
基本语法
{dede:group row='6' orderby='threads' titlelen='30'}
<li>
<span><img style="visibility: inherit;" title="[field:groupname/]" src="[field:icon/]" /></span>
<span><a href="[field:url/]" title="[field:groupname/]" target="_blank">[field:groupname/]</a></span>
</li>
{/dede:group}
标签属性
· row:调用条数
· orderby:排列顺序(默认是主题数)
groupthread
全局标记
V55,V56,V57
圈子主题调用标签
基本语法
{dede:groupthread gid='0' orderby='dateline' orderway='desc' row='12' titlelen='30'}
<li>
<a href='[field:groupurl/]' target="_blank">[[field:groupname function="cn_substr(@me,10)"/]]</a>
<a href="[field:url/]" title="[field:subject/]" target="_blank">[field:subject/]</a>([field:lastpost function="GetDateMk('@me')"/])
</li>
{/dede:groupthread}
标签属性
· gid:圈子id,默认为全部
· orderby:排序,默认为时间
· orderway:排序方向,默认是最新主题在前
· row:记录数
hotwords
全局标记
V55,V56,V57
获取网站搜索的热门关键字
基本语法
{dede:hotwords /}
标签属性
· num:关键词数目
· subday:天数
· maxlength:关键词最大长度
infoguide
全局标记
V55,V56,V57
分类信息的地区与小分类搜索
基本语法
{dede:infoguide /}
全局标记
V55,V56,V57
调用分类信息地区与类型快捷链接
基本语法
{dede:infolink /}
json
全局标记
V57
调用某个远程连接的json数据库
基本语法
{dede:json url='http://yoursite/json.php' cache=300}
[field:id/]-[field:title/]<br/>
{/dede:json}
标签属性
· url:json数据地址
likearticle
全局标记
V55,V56,V57
自动关连文档标签
基本语法
{dede:likearticle row='' col='' titlelen='' infolen=''}
<a href='[field:arcurl/]'>[field:title/]</a>
{/dede:likearticle}
标签属性
· col:分多少列显示(默认为单列)
· row:返回文档列表总数
· titlelen:标题长度 等同于titlelength
· infolen:表示内容简介长度 等同于infolength
· mytypeid:手工指定要限定的栏目id,用,分开表示多个
likepage
全局标记
V55,V56,V57
调用相同标识单页文档
基本语法
{dede:likepage likeid='' row=''/}
标签属性
· row:调用条数
· likeid:标识名
likesgpage
全局标记
V55,V56,V57
单页文档调用标签
基本语法
{dede:likespage row=''/}
标签属性
loop
全局标记
V55,V56,V57
调用任意表的数据标签
基本语法
{dede:loop table='dede_archives' sort='' row='4' if=''}
<a href='[field:arcurl/]'>[field:title/]</a>
{/dede:loop}
标签属性
· table:查询表名
· sort:用于排序的字段
· row:返回结果的条数
memberinfos
全局标记
V55,V56,V57
文档关连的用户信息
基本语法
{dede:memberinfos mid = '' /}
标签属性
memberlist
全局标记
V55,V56,V57
会员信息调用标签
基本语法
{dede:memberlist orderby='scores' row='20'}
<a href="../member/index.php?uid={dede:field.userid /}">{dede:field.userid /}</a>
<span>{dede:field.scores /}</span>
{/dede:memberlist}
标签属性
· row:调用数目
· iscommend:是否为推荐会员
· orderby:按登陆时间排序 money 按金钱排序 scores 按积分排序
myad
全局标记
V55,V56,V57
获取广告代码
基本语法
{dede:myad name=''/}
标签属性
· typeid:投放范围,0为全站
· name:广告标识
mynews
全局标记
V55,V56,V57
站内新闻调用标签
基本语法
{dede:mynews row='' titlelen=''/}
标签属性
· row:调用站内新闻数
· titlelen:新闻标题长度
mytag
全局标记
V55,V56,V57
用于获取自定义宏标记的内容
基本语法
{dede:mytag typeid='0' name=''/}
标签属性
· name:标记名称,该项是必须的属性,以下 2、3是可选属性
· ismake:默认是 no 表示设定的纯HTML代码, yes 表示含板块标记的代码
· typeid:表示所属栏目的ID,默认为 0 ,表示所有栏目通用的显示内容,在列表和文档模板中,typeid默认是这个列表或文档本身的栏目ID
php
全局标记
V55,V56,V57
调用PHP代码
基本语法
{dede:php}
$a = "dede";
echo $a;
{/dede:php}
productimagelist
softmsg
软件内容模板
V55,V56,V57
下载说明标签
基本语法
{dede:softmsg /}
sonchannel
全局标记
V55,V56,V57
子栏目调用标签
基本语法
{dede:sonchannel}
<a href='[field:typeurl/]'>[field:typename/]</a>
{/dede:sonchannel}
标签属性
· row:返回数目
· col:默认单列显示
· nosonmsg:没有指定ID子栏目显示的信息内容
sql
全局标记
V55,V56,V57
用于获取MySQL数据库内容的标签
基本语法
{dede:sql sql='' db='default'}
[field:title/]
{/dede}
标签属性
· sql:需要查询的sql语句
· appname: 默认为default,即当前dedecms的数据库,如果需要自定义,可以在data/tag/sql.inc.php中扩展,具体扩展方法查看配置文件头部说明
tag
全局标记
V55,V56,V57
TAG调用标签
基本语法
{dede:tag sort='new' getall='0'}
<a href='[field:link/]'>[field:tag /]</a>
{/dede:tag}
标签属性
· row:调用条数
· sort:排序方式 month,rand,week
· getall:获取类型 0 为当前内容页TAG标记,1为获取全部TAG标记
type
全局标记
V55,V56,V57
表示指定的单个栏目的链接
基本语法
{dede:type}
<a href="[field:typelink /]">[field:typename /]</a>
{/dede:type}
标签属性
vote
全局标记
V55,V56,V57
用于获取一组投票表单
基本语法
{dede:vote id='' lineheight='22' tablewidth='100%' titlebgcolor='#EDEDE2' titlebackground='' tablebgcolor='#FFFFFF'/}
{/dede}
标签属性
· id:数字,当前投票ID
· lineheight:表格高度
· tablewidth:表格宽度
· titlebgcolor:投票标题背景色
· titlebackground:标题背景图
· tablebg:投票表格背景色