DedeCms织梦系统程序二次开发详解一(DEDECMS学习必备)
调用说明:推荐会员(带用户头像)
[quote]
{dede:sql sql="SELECT mid,mtype,userid,uname,matt,face
FROM dede_member
where matt = 1 and mtype='个人'
LIMIT 0 , 10"}
头像:<img src="[field:face runphp='yes']
if(!@me)@me = '';
[/field:face]" />
用户名:<a [field:global name='cfg_cmspath'/]/member/ [field:userid/]/'>[field:uname/]</a>
{/dede:sql}
[field:face runphp='yes']
if(!@me)@me = '';
[/field:face]
为用户头像图片
[img][/img]
是如果用户头像为空的话要显示的图像 这个大家自己改吧
[/quote]
调用说明:会员积分排行
[quote]
{dede:sql sql="Select mid,userid,uname,scores From dede_member order by scores desc limit 0,10"}
<dd$amp;>amp;$lt;span class="name"$amp;>amp;$lt;a [field:global name='cfg_cmspath'/]/member/ [field:userid/]/'>[field:uname/]</a>
</span$amp;>amp;$lt;span class="jifen">积分[field:scores/]</span$amp;>amp;$lt;/dd>
{/dede:sql}
全部测试通过
[/quote]
这时需要通过dedecms后台中的ucenter模块进行Ucenter配置。
然后,在浏览器地址栏输入,打开后台管理登录界面,输入密码后进入dedecms后台管理。
dedecms后台管理界面的左侧导航栏,点击“模块”标签,注意下面的“UCenter模块”。
点击“UCenter配置”,进入以下页面。
“服务端地址“填:http://localhost/ucenter (本地机),创始人密码即是你在安装UCenter时设定的创始人密码;服务端IP地址填你的Ucenter安装的空间IP(本地机填127.0.0.1),输入后点“确认安装”。出现安装成功提示。
退出dedecms管理后台,再次进入UCenter用户管理中心,这时我们会发现在“应用管理”中多了一项“我的网站”,并且显示的是“通信成功”了。
我们再通过浏览器访问, 用管理员的账号进入Uchome首页,点击“设置”进入另外一页,再点击右上角的“高级管理”,输入密码后点击“进入平台”进入高级管理平台。
在左侧导航栏的“高级设置”中找到一项“UCenter应用”点击进入。
在这里我们可以看到我们加入的三个应用,分别点击三个应用下面的“提交更新“。退出管理界面,现在我们再回过头去测试一下看就可以同步了。
七、经验总结及疑问
如果没有做到Dedecms、UChome、Discuz!中同时登录及退出的问题其关键就是在uchome中的“ucenter应用”中没有“提交更新”。
有时候安装dedecms、uchome或ucenter出现问题安装不了或出错等等,有的很多就是环境没有搭载好,所以我建议就安装dedecms提供的DedeAMPZForServer套件,至少在服务器的搭载上我们不需要花费太多的精力。
另外注意的是UCenter的配置。比如“通信密钥”是否一致。这个一般是导致 UCenter 与Dedecms、UChome、Discuz!等通信失败的主要原因之一。这个密钥是可以自己随便写的,但要保证 UCenter 与 DIscuz 的密钥一致。又比如“ID”。查看 UCenter 后台的应用 ID 是否与Dedecms、UChome、Discuz!等后台的 ID 一致,如不一致,请修改各个应用后台的"UCenter 应用 ID"。这个也是导致 UCenter 与 DIscuz 通信失败的主要原因之一。关于UCenter的配置等这一点可以参考UCenter官方提供的说明手册。
功能:图书封面图片调用,含标题
代码:
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
{dede:sql sql="Select id,bookname,author,pubdate,body,litpic From dede_story_books order by id desc limit 0,10"}
<td$amp;>amp;$lt;a /book/[field:id function=DedeID2Dir(@me)/]/[field:bookname function=GetPinyin(@me)/]-[field:id/].html"$amp;>amp;$lt;img src="[field:litpic/]" border="0" width="75" height="100" /$amp;>amp;$lt;/a$amp;>amp;$lt;br /$amp;>amp;$lt;a /book/[field:id function=DedeID2Dir(@me)/]/[field:bookname function=GetPinyin(@me)/]-[field:id/].html">[field:bookname function="cn_substr(@me,12)"/]</a>
</td>
{/dede:sql}
</tr>
</table>
功能:最新连载内容调用,含栏目名称、书名、章节名、发布时间。
代码:
<table width="688" border="0" cellpadding="0" cellspacing="0">
{dede:bookcontentlist row=10 booktype=0 orderby=lastpost author= keyword=}
<tr>
<td align="left" width="30"$amp;>amp;$lt;/td>
<td width="300" align="left">[field:cataloglink/] [field:booklink/]</td>
<td width="318" align="left">[field:contentlink/]</td>
<td width="40" align="right">[field:lastpost function="GetDateMk(@me)"/]</td>
</tr>
{/dede:bookcontentlist}
</table>
功能:热门图书调用
代码:
{dede:booklist row=5 booktype=0 titlelen=10 imgwidth=80 imgheight=100 orderby=weekcc}[field:imglink /]{/dede:booklist}
功能:推荐图书调用
代码:
{dede:booklist row=5 booktype=0 titlelen=10 imgwidth=80 imgheight=100 orderby=commend}[field:imglink /]{/dede:booklist}
分类信息
功能:调用地区与类型
代码:
{dede:infolink}
<b>地区:</b>[field:nativeplace /]<br />
<b>类型:</b>[field:infotype /]
{/dede:infolink}
功能:调用最新信息
代码:{dede:arclistsg row=10 titlelen=32 orderby=pubdate channelid=-8 idlist=}
[[field:typelink/]] [field:textlink/][field:pubdate function="MyDate(m-d,@me)"/]
{/dede:arclistsg}
功能:分类信息图片调用
代码:
{dede:arclistsg row=1 titlelen=30 flag=c,a infolen=80 orderby=pubdate channelid=-8 typeid=6 imgwidth=105 imgheight=137}
<a [field:arcurl/]">[field:image/]</a$amp;>amp;$lt;br/$amp;>amp;$lt;a [field:arcurl/]" >[field:title /]</a>{/dede:arclistsg}
会员模块
功能:分列显示,按积分排行,带头像。正确链接到会员个人空间。
代码:
<table border="0" width="220" cellspacing="0" cellpadding="0">
<tr>
{dede:sql sql="Select mid,userid,uname,face,scores From dede_member order by scores desc limit 0,2"}
<td align="center" width="110"$amp;>amp;$lt;a [field:global name="cfg_cmspath"/]/member/index.php uid=[field:userid/]" target="_blank"$amp;>amp;$lt;img src="[field:face/]" alt=[field:spacename/] width="52" height="52" / border="0"$amp;>amp;$lt;br>[field:uname/]<br>积分:[field:scores/]< /a$amp;>amp;$lt;/td>
{/dede:sql}
</tr>
</table>
圈子模块
功能:调用圈子标题,分10行显示
代码:
{dede:sql sql=" SELECT groupimg,groupid,groupname FROM dede_groups WHERE ishidden=0 ORDER BY threads DESC LIMIT 0,10"}
<li$amp;>amp;$lt;a group/group.php id=[field:groupid/]" title="[field:groupname/]" target="_blank"> [field:groupname/]</a$amp;>amp;$lt;/li>
{/dede:sql}
功能:热门圈子,调用图片及标题,分10列显示
代码:
<table border="0" width="100%" id="table5" cellspacing="0" cellpadding="0">
<tr>
{dede:sql sql=" SELECT groupimg,groupid,groupname FROM dede_groups WHERE ishidden=0 ORDER BY threads DESC LIMIT 0,10"}
<td$amp;>amp;$lt;a group/group.php id=[field:groupid/]" _fcksavedurl=""group/group.php id=[field:groupid/]"" title="[field:groupname/]" target="_blank"$amp;>amp;$lt;img src="[field:groupimg/]" border="0" width="75" height="100" /$amp;>amp;$lt;br /> [field:groupname function="cn_substr(@me,12)"/]</a>
</td>
{/dede:sql}
</tr>
</table>
功能:圈子话题调用。
代码:{dede:sql sql=" SELECT subject,digest,replies,gid,tid FROM dede_group_threads WHERE closed=0 ORDER BY dateline DESC LIMIT 0,10"}
<li$amp;>amp;$lt;a group/viewthread.php id=[field:gid/]&tid=[field:tid/]" _fcksavedurl=""group/viewthread.php id=[field:gid/]&tid=[field:tid/]"" title="[field:subject/]" target="_blank"> [field:subject/]</a$amp;>amp;$lt;/li>
{/dede:sql}
功能:最新圈子,调用图片及标题,分10列显示
代码:
<table border="0" width="100%" id="table5" cellspacing="0" cellpadding="0">
<tr>
{dede:sql sql=" SELECT groupimg,groupid,groupname FROM dede_groups WHERE ishidden=0 ORDER BY groupid DESC LIMIT 0,3"}
<td$amp;>amp;$lt;a group/group.php id=[field:groupid/]" _fcksavedurl=""group/group.php id=[field:groupid/]"" title="[field:groupname/]" target="_blank"$amp;>amp;$lt;img src="[field:groupimg/]" border="0" width="75" height="100" /$amp;>amp;$lt;br /> [field:groupname function="cn_substr(@me,12)"/]</a>
</td>
{/dede:sql}
</tr>
</table>
下载模块
功能:显示符号、标题及发布日期
代码:
<table width=98% border=0 cellspacing=0 cellpadding=0>
{dede:arclist row=10 titlelen=36 typeid="120" orderby=pubdate}
<tr>
<td width=2%$amp;>amp;$lt;/td>
<td valign=bottom width=80% $amp;>amp;$lt;font color="#0000ff">↓</font> <a [field:arcurl /]">[field:title /]</a$amp;>amp;$lt;/td>
<td align=right valign=middle width=18% class=font_green>[field:pubdate function="MyDate(m-d,@me)"/]</td>
</tr>
{/dede:arclist}
</table>
问答模块
功能:包含问答分类及问答标题。
代码:
{dede:ask row=10 qtype=}
<span class="tclass">[<a href=[field:typeurl/]>[field:tidname/]</a>]</span>
<span class="tlink"$amp;>amp;$lt;a [field:url/]">[field:title/]</a$amp;>amp;$lt;/span$amp;>amp;$lt;br />
{/dede:ask}
适用于V5.5版本,其他版本未测试。
先来看一段代码:
{dede:sql sql='Select A.id,A.title,D.id,D.downloads from dede_archives as A Left Join dede_downloads as D ON
A.id = D.id order by downloads DESC limit 0,10; '}
<li$amp;>amp;$lt;a [field:id runphp='yes'] $id=@me;@me='';$url=GetOneArchive($id);@me=$url['arcurl'];[/field:id] ">[field:title/]</a>下载次数[field:downloads/]</li>
{/dede:sql}
这个就是SQL调用下载排行的,已经实现了静态地址调用。limit 0,10; 的意思是调用10调,想调用多少条只要修改“10”为你想要的数字,如过你想实现调用特定版块的下载排行,只需要在limit 0,10; 的后面加上"where typeid = xx " XX就是栏目ID。比如我想调用栏目10的下载排行,代码就是这样:
{dede:sql sql='Select A.id,A.title,D.id,D.downloads from dede_archives as A Left Join dede_downloads as D ON
A.id = D.id WHERE typeid = 10 order by downloads DESC limit 0,10;'}
<li$amp;>amp;$lt;a [field:id runphp='yes'] $id=@me;@me='';$url=GetOneArchive($id);@me=$url['arcurl'];[/field:id] ">[field:title/]</a>下载次数[field:downloads/]</li>
{/dede:sql}
这里有个小技巧:typeid =后面的值可以用当前栏目ID的标签,这样可以在每个栏目列表页实现当前栏目的下载排行调用,具体的望读者自己探究。当然也可以用typeid >或者<来限定栏目范围。
特定栏目调用已经解决,那么就剩下分时段调用了,可分为日,周,月,年,甚至自定义天数或者小时,代码如下:
{dede:sql sql='Select A.id,A.title,D.id,D.downloads from dede_archives as A Left Join dede_downloads as D ON
A.id = D.id WHERE typeid = 10 and pubdate > UNIX_TIMESTAMP( CURDATE( ) - INTERVAL 7 day) order by downloads DESC limit 0,10;'}
<li$amp;>amp;$lt;a [field:id runphp='yes'] $id=@me;@me='';$url=GetOneArchive($id);@me=$url['arcurl'];[/field:id] ">[field:title/]</a>下载次数[field:downloads/]</li>
{/dede:sql}
注意,我这是在上一个特定栏目的前提下再加一个时间条件语句,所以,我用了 and ,后面蓝色字体部分为所需要的内容,如果不想特定栏目,就把有色字体部分代码和紧跟着的“AND”去掉就行。pubdate > UNIX_TIMESTAMP( CURDATE( ) - INTERVAL 7 day) 的意思是取7天内的数据,我们只需要修改数字"7"就可以实现我们的目标,比如10天就是pubdate > UNIX_TIMESTAMP( CURDATE( ) - INTERVAL 10 day) ,如果想调用一个月的数据,那就是pubdate > UNIX_TIMESTAMP( CURDATE( ) - INTERVAL 1 month) 一年的话只要把"day"改成"year"即可。
标签到这里基本上已经完美了。希望大家自己多多实验,多探究,多查相关资料。
如果有不懂请留言。
附送另外一个小小的标签,关于调用今日更新情况的调用:
<dt class='light'$amp;>amp;$lt;strong>小小说阅读</strong$amp;>amp;$lt;div align=right$amp;>amp;$lt;font size=3>这些部分组成,
用于解释模板标记使用功能,建议新手都把这些标记功能看看,大致做一个了解。
由于Dedecms模板大致分为首页、频道、列表、内容以及其他附加模板组成,使用范围指出 这些标记在哪些模板中起作用。模板文件夹中(以Dedecms默认模板为例,即{cmspath} empletsdefault)大家可以仔细分析 下,模版中很多都是以下列这些名字出现index.htm,index_X.htm(封面模板),list_X.htm(列表模 板),article_X.htm(内容模板),你可以对照标记的适用范围,查看这些标签在哪个模板中能起到作用。
用于介绍模板基本使用方法,在使用时候可以拿来根据自己的需要进行响应的修改。
这些属性,决定你调用的内容,决定Dedecms解析这些标记的形式,属性非常重要。
以上这些介绍主要是让大多数新手 学会看帮助文件,模板修改使用的大多数问题都是因为自己不去看这些帮助文件导致的,希望广大Dedecms新人引以为戒。
下面就来简单说下Dedecms模板的分类,搞过ASP的人应该知道,动态网页基本上就是对变量、数组(数据库)的操作,然后通过语句输出为 HTML,dedecms的这些标记也是起到同样的效果。
下面根据起到的不同效果对模板进行如下分类:
一.变量操作型这里的变量不同于对编程中那个复杂的变量,新人不懂,我这里所指出的变量是Dedecms调用局部内容进行输出的一些标记,这里有: 以及还有系统不常用的(其实天涯经常使用),例如global 标记、include 标记、mytag标记、position 标记,这些标记大家可以看出,都是输出来为一部分内容,并不可以重复,这个标记在解析时候生成的只是一块不重复的内容。
二.数组操作型这里的数组当然在模板标记中,指的是循环输出一些内容的标记,例如N行文章、N个软件、N个会员信息等等,Dedecms这些标记有: 当然 也有foreach这种“罕见”的标记,这些标记使用时,通过属性设置,能循环输出一些列内容,很多重复的东西,往往 只要一个标记就搞定,不信可以开个模板仔细观察观察。
有了这个分类以后,在修改、制作模板时候相信会得心应手了,天涯在修改、制作模板中经常使用的标记有sql、include、loop(貌似现在被sql 取代了)、mytag这些标记,因为这些标记很“自由”,当 然新人可以在模板制作修改中尝试使用这些灵活自由的标记。
本篇接下来简单讲一下数组操作性标记的原理以及他的使用方法。
我们在Dedecms模板中经常看到下面这样的例子:
{dede:arclist row=4 titlelen=20 orderby=pubdate typeid=58}
<dd$amp;>amp;$lt;span>[field:pubdate function=strftime('%m-%d',@me)/]</span>[field:textlink/]</dd>
{/dede:arclist}
这里我们使用了arclist标记,通过属性我们可以得到下列相关信息:
row=4 调用4行这样的数据
titlelen=20 取标题的前20个字符(2个字符为一个中文字符)
orderby=pubdate 排列顺序为按照发布时间排列,当然你也可以选择其他,帮助有详细说明。
typeid=58 调用栏目id为58栏目的文章
标记都是通过 {dede:arclist}这个开始,{/dede:arclist}结束,这个和html有的相像,所以做dedecms模板,最好熟练下html的 相关知识。
开始、结束标记中含有[field:textlink/]这样的标记,新手需要记住的是[field:textlink/]只可能存在于{dede:XXX}{/dede:XXX}之间,绝对不肯能拿出来单独使用!
其他数组操作性标记都是同样的原理,只是将繁琐的从数据库调用的东西简化为dedecms标记,dedecms在解析时候读取标记然后进行查询、输出等一 些后续操作。新手注意的是,熟练掌握什么是频道页、列表页、内容页,以及调 用内容关系和范围,根据自己的页面需要,使用不同的标记达到效果,这是新手在不断实践的基础下才能掌握的。
文件:include/inc_function.php 系统默认会载入此文件
GetCurUrl()
获得当前得脚本得URL
GetAlabNum($str)
把字符串里得全角数字转为半角数字(会把非数字类型字符删除)
Text2Html($txt)
文本转HTML
Html2Text($str)
获得HTML里得文本
function ClearHtml($str)
清除HTML标记
cnw_left($str,$len)
中文截取把双字节字符也看做一个字符
cn_substr($str,$slen,$startdd=0)
中文截取2,单字节截取模式
GetMkTime($dtime)
把中文得时间格式转换为Linux时间截,对于不能识别得格式,会返回time()
SubDay($ntime,$stime)
返回减少一天得Linux时间截
AddDay($ntime,$aday)
返回增加一天得Linux时间截
GetDateTimeMk($mktime)
从指定得Linux时间截返回 0000-00-00 00:00:00 格式得时间
GetDateMk($mktime)
从指定得Linux时间截返回 0000-00-00 格式得时间
GetIP()
获取客户部IP
GetPinyin($str,$ishead=0,$isclose=1)
获取一串中文字符得拼音 ishead=0 时,输出全拼音 ishead=1时,输出拼音首字母
ShowMsg($msg,$gourl,$onlymsg=0,$limittime=0)
显示Dedecms提示信息,其中当onlymsg=1时,不跳转,仅显示alert提示
dd2char($dd)
把符合规则得数字转为字母(符合a-zA-Z Ascii码得数字转换为字母,不符合则不变)
PutCookie($key,$value,$kptime,$pa="/")
按默认参数设置一个Cookie(dede得cookie是经过加密得,必须用GetCookie获取值,以防止用户模拟登录)
DropCookie($key)
使Cookie失效
function GetCookie($key)
获得一个cookie值
function GetCkVdValue()
获得验证码得session值
FtpMkdir($truepath,$mmode,$isMkdir=true)
用FTP创建一个目录
FtpChmod($truepath,$mmode)
用FTP改变一个目录得权限
OpenFtp()
打开FTP连接
CloseFtp()
关闭FTP连接
TestStringSafe(&$uid)
用户ID和密码或其它字符串安全性测试,返回true或false
htmlEncode($string)
过滤HTML代码
function AjaxHead()
发送一个ajax头
sendmail($email, $mailtitle, $mailbody, $headers)
邮件发送函数
highlight($string, $words, $hrefs='')
加亮一段HTML里得某些词汇
文件:include/inc_channel_unit_functions.php
GetFileUrl($aid,$typeid,$timetag,$title,$ismake=0,$rank=0,
$namerule='',$namerule2='',$money=0,$aburl=false,$siteurl='')
获得文章得链接网址(对于动态得文章返回得是/plusview.php aid=$aid)
这些参数必须通过主表dede_archives联结栏目表dede_arctype查询来获得(注:dede得主表不是固定得)
GetTypeUrl($typeid,$typedir,$isdefault,$defaultname,$ispart,$namerule2,$siteurl='')
获得某栏目得链接网址
GetParentIDS($tid,&$dsql)
获得某栏目得所有上级栏目得ID,返回得ID用 , 号分开
TypeGetSunID($ID,&$dsql,$tb="dede_archives",$channel=0,$onlydd=false)
获得某栏目得所有下级栏目ID,当 $onlydd=true 时返回得才是用','分开得ID列表
否则返回得是SQL条件语句,形式为 $tb.typeid=$ID1 or $tb.typeid=$ID2 这样得形式
GetHotKeywords(&$dsql,$num=8,$nday=365,$klen=16,$orderby='count')
获取网站搜索得热门关键字
CkLitImageView($imgsrc,$imgwidth)
判断是否有缩略图片,有则返回一个img标记,一般在底层模板中使用,如:
[Field:litpic function="CkLitImageView(@me,80)"/]
文件:pub_charset.php
utf82gb($utfstr)
UTF8编码转gbk编码
gb2utf8($gbstr)
gbk转utf8编码
big52gb($Text)
big5转gb12312编码
gb2big5($Text)
gb2312转big5编码
(注意:gb2312编码一般不包含那些脑开残体之类得生冷字,而gbk通常是支持得)
文件:inc_photograph.php
ImageResize($srcFile,$toW,$toH,$toFile="")
缩图片自动生成函数,来源支持bmp、gif、jpg、png
WaterImg($srcFile)
给图片加水印
DedeCms基本得类文件说明
(这里只说明 include 或其它目录一些重要得inc 文件,至于模块或功能性得文件,实际上一般每个文件或文件+action对应该着一个功能,如article_add.php这些已经很直观了,确实不知 道得不妨在操做得地方点击右键看属性就知道你操做得功能对应什么文件了,因此不单独说明。)
dedecms前台使用到模板得东西基本都是面向对象得,至于具体每个对象得流程我就不解析了,对于菜鸟说也是不懂得。
inc_arcbook_view.php
小说得列表、内容都是在这里操做得
inc_archives_view.php
所有dede内核涉及得文章页,如文章、图集、软件或自定义模型得内容展示页都是在这个文件处理得
inc_arclist_view.php
内容列表得处理类
inc_arcpart_view.php
封面频道和通用调用标记得处理类
inc_arcsearch_view.php
搜索类
inc_arcspec_view.php
专题列表类
inc_bookfunctions.php
小说文本保存操做函数
inc_channel_unit.php
内容模型得特殊字段转换处理类
inc_channel_unit_functions.php
与内核相关得重要函数
inc_custom_fields.php
自定义字段得表单和值得获取处理函数
inc_digglist_view.php
Digg列表类
inc_freelist_view.php
自由列表类
inc_memberlogin.php
会员登录类
inc_modules.php
模块类
inc_rss_view.php
Rss列表类
inc_sitemap.php
网站地图类
inc_taglist_view.php
标签Tag列表类
inc_typelink.php
栏目属性类
inc_userlogin.php
管理员登陆类
inc_vote.php
投票类
mail.class.php
邮件类
pub_collection.php
pub_collection_functions.php
采集类和函数
pub_datalist.php
数据列表类(模板用dede标签)
pub_datalist_dm.php
数据列表类(动态用php)
pub_db_mysql.php
数据库类
pub_dedeattribute.php
属性解析类
pub_dedehtml2.php
HTML解析类(主要是获取HTML里得图片、链接等信息)
pub_dedetag.php
dede模板解析类
pub_
dede下载类
pub_oxwindow.php
dede高级提示窗口类
pub_splitword_www.php
dede分词类
zip.lib.php
zip处理类