Dede二次开发程序详解(dede爱好者必备)

调用说明:推荐会员(带用户头像) 
[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 = 'http://bbs.dedecms.com/attachment/upload/87/11787.gif'; 
[/field:face]" /> 
用户名:<a href='[field:global name='cfg_cmspath'/]/member/?[field:userid/]/'>[field:uname/]</a> 
{/dede:sql} 

[field:face runphp='yes'] 
if(!@me)@me = 'http://bbs.dedecms.com/image/post/smile/default/14.gif'; 
[/field:face] 
为用户头像图片 
[img]http://bbs.dedecms.com/attachment/upload/87/11787.gif[/img] 
是如果用户头像为空的话要显示的图像 这个大家自己改吧
[/quote]


调用说明:会员积分排行 
[quote]
{dede:sql sql="Select mid,userid,uname,scores From dede_member order by scores desc limit 0,10"} 
<dd><span class="name"><a href='[field:global name='cfg_cmspath'/]/member/?[field:userid/]/'>[field:uname/]</a> 
</span><span class="jifen">积分[field:scores/]</span></dd> 
{/dede:sql} 

全部测试通过
[/quote]

这时需要通过dedecms后台中的ucenter模块进行Ucenter配置。

    然后,在浏览器地址栏输入http://localhost/dede/login.php,打开后台管理登录界面,输入密码后进入dedecms后台管理。

      dedecms后台管理界面的左侧导航栏,点击“模块”标签,注意下面的“UCenter模块”。

      点击“UCenter配置”,进入以下页面。

     “服务端地址“填:http://localhost/ucenter (本地机),创始人密码即是你在安装UCenter时设定的创始人密码;服务端IP地址填你的Ucenter安装的空间IP(本地机填127.0.0.1),输入后点“确认安装”。出现安装成功提示。

      退出dedecms管理后台,再次进入UCenter用户管理中心,这时我们会发现在“应用管理”中多了一项“我的网站”,并且显示的是“通信成功”了。

 

      我们再通过浏览器访问http://localhost/uchome/index.php, 用管理员的账号进入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><a href="/book/[field:id function=DedeID2Dir(@me)/]/[field:bookname function=GetPinyin(@me)/]-[field:id/].html"><img src="[field:litpic/]" border="0" width="75" height="100" /></a><br /><a href="/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"></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 href="[field:arcurl/]">[field:image/]</a><br/><a href="[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"><a href="[field:global name="cfg_cmspath"/]/member/index.php?uid=[field:userid/]" target="_blank"><img src="[field:face/]" alt=[field:spacename/] width="52" height="52" / border="0"><br>[field:uname/]<br>积分:[field:scores/]< /a></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><a href="group/group.php?id=[field:groupid/]" title="[field:groupname/]" target="_blank"> [field:groupname/]</a></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><a href="group/group.php?id=[field:groupid/]" _fcksavedurl=""group/group.php?id=[field:groupid/]"" title="[field:groupname/]" target="_blank"><img src="[field:groupimg/]" border="0" width="75" height="100" /><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><a href="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></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><a href="group/group.php?id=[field:groupid/]" _fcksavedurl=""group/group.php?id=[field:groupid/]"" title="[field:groupname/]" target="_blank"><img src="[field:groupimg/]" border="0" width="75" height="100" /><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%></td>
<td valign=bottom width=80% ><font color="#0000ff">↓</font> <a href="[field:arcurl /]">[field:title /]</a></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"><a href="[field:url/]">[field:title/]</a></span><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><a href="[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><a href="[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><a href="[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'><strong>小小说阅读</strong><div align=right><font size=3>【{dede:sql sql="SELECT count( ID ) AS c FROM dede_archives WHERE pubdate > UNIX_TIMESTAMP( CURDATE( ) ) and typeid = 特定栏目ID"}今

这个HACK是在现有的两个版本上修改而成的,没有进行完全测试,如有问题请告知。 

将以下内容存为CREDIT_DEL.PHP文件 



<?php 
if(!defined("CREDIT_DEL")) { 
        die("Access Denied"); 

############ 以下是安装方法 ############ 
/* 

1.将本文件放到 index.php所在目录下 

2.        购买人数 hack 
        请用数据库管理工具 phpmyadmin 
        TABLE : cdb_threads 的最尾 
        ----新增---- 
        栏位        : buy 
        型态        : INT 
        长度        : 3 
        预设值        : 0 


3. 将本文件放到 index.php所在目录下 

在 viewthread.php 中的32行左右 
        在下面代码 
        if(!$forum[getattachperm] && !$allowgetattach) { 
                showmessage("对不起,您的级别〔{$grouptitle}〕无法下载附件。"); 
        } elseif($forum[getattachperm] && !strstr($forum[getattachperm], "\t$groupid\t")) { 
                showmessage("对不起,只有特定用户可以下载本论坛的附件,请返回。"); 
        } 
        的下面加上以下代码 
        #### 付款下载限制的帖加/减积分的HACK开始 #### 
        if($attach[creditsrequire] && $attach[creditsrequire] <= $credit && !$ismoderator) { 
                if(!$credit_del_yes) 
                        showmessage("此文件需要支付<b><font color=red>$attach[creditsrequire]</b></font>{$creditunit}{$credittitle} 才能下载<br><p> <a href=viewthread.php?action=attachment&aid=$aid&credit_del_yes=yes><font color=blue>算你狠我买!</font></a><p>太奸诈了,我不干!"); 
                define("CREDIT_DEL", TRUE); 
                $credit_del = 'down'; 
                include'credit_del.php'; 
        } 
        $ck_credit_del = $tid.'_credit_del'; 
        if($credit < "$thread[creditsrequire]") { 
                if($HTTP_COOKIE_VARS[$ck_credit_del] =="" and $status!="游客"){ 
                        showmessage("你没有钱买呀,请努力灌水赚钱吧 ^^"); 
                }elseif($HTTP_COOKIE_VARS[$ck_credit_del] =="" and $status=="游客"){ 
                        showmessage("游客不能购买的。"); 
                        }elseif($HTTP_COOKIE_VARS[$ck_credit_del] !="" and $status=="游客"){ 
                        showmessage("游客不能购买的。"); 
                        } 
        } 

        #### 付款下载限制的帖加/减积分的HACK结束 #### 

在 viewthread.php 中的138行左右 
        修改以下代码 
        if(!$forum[viewperm] && !$allowview) { 
                showmessage("对不起,您的等级〔{$grouptitle}〕无法浏览文章。"); 
        } elseif($forum[viewperm] && !strstr($forum[viewperm], "\t$groupid\t")) { 
                showmessage("对不起,本论坛只有特定会员可以浏览,请返回。"); 
        } elseif($thread[creditsrequire] && $thread[creditsrequire] > $credit && !$ismoderator) { 
                showmessage("对不起,本贴要求{$credittitle}高于 $thread[creditsrequire] {$creditunit}才可浏览,请返回。"); 
        } 

        将以上代码 改成以下代码 

        #### 付款浏览限制的帖加/减积分的HACK开始 #### 
        if(!$forum[viewperm] && !$allowview) { 
                showmessage("对不起,您的等级〔{$grouptitle}〕无法浏览文章。"); 
        } elseif($forum[viewperm] && !strstr($forum[viewperm], "\t$groupid\t")) { 
                showmessage("对不起,本论坛只有特定会员可以浏览,请返回。"); 
        } elseif($thread[creditsrequire] && $thread[creditsrequire] > $credit && !$ismoderator) { 
                showmessage("对不起,本贴要求{$credittitle}高于 $thread[creditsrequire] {$creditunit}才可浏览,请返回。"); 
        } 

        if($thread[creditsrequire] && $thread[creditsrequire] <= $credit && !$ismoderator) { 
                $ck_credit_del = $tid.'_credit_del'; 
                if(!$credit_del_yes && !$HTTP_COOKIE_VARS[$ck_credit_del]) 
                        showmessage("此主题需要支付<b><font color=red>$thread[creditsrequire]</b></font>$creditunit{$credittitle} 才能观看内容, <br>已有 $thread[buy]人 购买了,<p> <a href=viewthread.php?tid=$tid&credit_del_yes=yes><font color=blue>算你狠我买!</font></a><p>太奸诈了,我不干!我返回。"); 
                define("CREDIT_DEL", TRUE); 
                $credit_del = 'view'; 
                include'credit_del.php'; 

                } 

        $ck_credit_del = $tid.'_credit_del'; 
        if($credit < "$thread[creditsrequire]") { 
                if($HTTP_COOKIE_VARS[$ck_credit_del] =="" and $status!="游客"){ 
                        showmessage("你没有钱买呀,请努力灌水赚钱吧 ^^"); 
                }elseif($HTTP_COOKIE_VARS[$ck_credit_del] =="" and $status=="游客"){ 
                        showmessage("游客不能购买的。"); 
                        }elseif($HTTP_COOKIE_VARS[$ck_credit_del] !="" and $status=="游客"){ 
                        showmessage("游客不能购买的。"); 
                        } 

                } 

        #### 付款浏览限制的帖加/减积分的HACK结束 #### 

------------------------viewthread.php 条改完成------------------------ 

*/ 
############ 以上是安装方法 ############ 

############ (请不要更改以下设定以下是具体设置 都给出了默认值 以供参考 ################################################# 
$credit_del_view = 0; //针对所有有积分限制的帖子 进入时所扣除的分数如果不想扣除指定分数而是扣除发帖者所给的限制分 请设为 
$credit_del_down = 0; //针对所有有积分限制的下载 下载时所扣除的分数如果不想扣除指定分数而是扣除发帖者所给的限制分 请设为 
$credit_add_down_y = 1; //选择是否给提供附件者加分 1为是  0为否 
$credit_add_down1 = 0; //针对所有有积分限制的下载 下载时给提供者的分数如果不想增加指定分数而是增加发帖者所给的限制分 请设为 
$credit_add_down_lim = 10; //$credit_add_down1=0时 这是限定分 即限制他人下载附件时给作者增加的分数(有可能作者设定的限制分很高
############ 具体设置到此为止 ####################################################################### 

############ 以下是浏览扣分和加分的部份 ############ 
if($cdbuser and $credit_del == 'view') { 
        $ck_credit_del = $tid.'_credit_del'; 
        if(!$HTTP_COOKIE_VARS[$ck_credit_del]) { 
                if($credit_del_view>$credit) $credit_del_view = $credit; 
                $credit_del_view = $credit_del_view?$credit_del_view:$thread[creditsrequire]; 
                $db->query("UPDATE $table_members SET credit=credit-'$credit_del_view' WHERE username='$cdbuser'"); 
                $CDB_SESSION_VARS[credit] = $credit-$credit_del_view; 

                //以下是付款给发表主题者(金钱 是由发表主题者所设
                $query_xgzone = $db->query("SELECT tid,author FROM cdb_threads WHERE tid='$tid'"); 
                $post = $db->fetch_array($query_xgzone); 
                $db->query("UPDATE $table_members SET credit=credit+'$credit_del_view' WHERE username='$post[author]'"); 
                //以上是付款给发表主题者(金钱 是由发表主题者所设


                //以下是该主题购买人数 
                $db->query("UPDATE cdb_threads SET buy=buy+'1' WHERE tid='$tid'"); 
                //以上是该主题购买人数 

                setcookie($ck_credit_del, $tid, 9999999999, $cookiepath, $cookiedomain); 
        }else setcookie($ck_credit_del, $tid, 9999999999, $cookiepath, $cookiedomain); 

############ 以上是浏览扣分和加分的部份 ############ 

############ 以下是下载扣分和加分的部份 ############ 

elseif ($credit_del == 'down') { 
        if($credit_del_down>$credit) $credit_del_down = $credit; 
        $credit_del_down = $credit_del_down?$credit_del_down:$attach[creditsrequire]; 
        $db->query("UPDATE $table_members SET credit=credit-'$credit_del_down' WHERE username='$cdbuser'"); 
        $CDB_SESSION_VARS[credit] = $credit-$credit_del_down; 
        if($credit_add_down_y) { 
                if(!$credit_add_down1) { 
                        if($attach[creditsrequire]>$credit_add_down_lim) 
                                $credit_add_down = $credit_add_down_lim; 
                        else $credit_add_down = $attach[creditsrequire]; 
                } 
                else 
                        $credit_add_down = $credit_add_down1; 
                $query_ck = $db->query("SELECT a.aid, t.author FROM $table_attachments a LEFT JOIN $table_threads t ON a.tid=t.tid WHERE aid='$aid'"); 
                $attach_ck = $db->fetch_array($query_ck); 
                $db->query("UPDATE $table_members SET credit=credit+'$credit_add_down' WHERE username='$attach_ck[author]'"); 
                
        } 

############ 以上是下载扣分和加分的部份 ############ 

?>

1.修改列表页码序列HTML组合串: /include/arc.listview.class.php

动态分页方 法:function GetPageListDM($list_len,$listitem="index,end,pre,next,pageno")

静态 分页方法:function GetPageListST($list_len,$listitem="index,end,pre,next,pageno")

2. 一、二级导航嵌套输出:在

  {dede:channelartlist type='top' row='8'}
   <UL>
     <LI class="bh1 b"><A href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</A> </LI>
     <LI>
    <P class="index_mulu_p1 b">分类:</P>
    <P class=index_mulu_p2>
    {dede:channel type='son' }
     <a href='[field:typeurl/]'>[field:typename/]</a>|
    {/dede:channel}
    
    </P>
     </LI>
   </UL>
  {/dede:channelartlist}

3.如上在list_article模板哪怕指定是 type='top' ,仍然会以传为参数为基准。(不知道是不是dede 的一个BUG

4.{dede:arclist}{/dede:arclist} 此标签有一个不太爽的地方就是输出行之间会自动的加入一个硬回车\r\n 由其是我们在进行js变量组合的时候会比较的不爽,或者会出错,解决方法如下:

修改include/taglib /arclist.lib.php 找到return $artlist 改为return str_replace("\r\n","",$artlist);

5. table :dede_arcatt 文档属性 添加相关的属性之后需要在table:dede_archives.flag 枚举属性中相应的加入

6.DEDECMS根据副栏目进行文 章调用
DEDECMS中一个文章可以同时属于两个栏目,即一个主栏目一个副栏目,{dede:arclist} 属性中可以通过typeid进行主栏目有效性筛选,但是有时我们却想根据副栏目进行筛选,查了dedecms的在线用户手册发现没有此功能,airzen 就动手改了标签对应的源文件 dedecmsROOT/include/taglib/arclist.lib.php,其中我们更改方法

function lib_arclist(&$ctag,&$refObj){

...

return lib_arclistDone(...,$ctag->GetAtt('noflag') , $ctag->GetAtt('typeid2') );

}

然后更改方法:

function lib_arclistDone(..., $noflag='',$typeid2=0){
.....
$typeid2= AttDef($typeid2,0);
....

if($typeid2 !=0)
  {

    $orwheres[] = " arc.typeid2 = $typeid2 ";

  }

if(!empty($typeid))
  {

.....

  }

 

}

 

其中上面加粗下划线的部 分为airzen修改的地方可以完美的与{dede:arclist typeid2='n'}{/dede:arclist}进行数据调用了。

7.DEDECMS 列表页调用主副栏目有一个位栏目ID的文章列表

 
{dede:list} 对应的是/include/arc.listview.class.php 要同时获得副栏目的文章修改此文件 查找$cfg_need_typeid2

 
会 找到

 
function CountRecord()
 {
  global $cfg_list_son,$cfg_need_typeid2;
  if(empty($cfg_need_typeid2)) $cfg_need_typeid2 = 'N';//增加下面一行
$cfg_need_typeid2 = 'Y';

 
 ....

 
}

 
好 了,在副栏目列表中就会出现主栏目和副栏目ID都为栏目ID的文章,崩溃吧。
8.伪静态分页BUG解决

打开文 件:/include/arc.listview.class.php 找到下面这个方法

//获取动态的分页列表
 function GetPageListDM($list_len,$listitem="index,end,pre,next,pageno"){

....

  if($cfg_rewrite == 'Y')
  {
   $plist = str_replace('.php?tid=', '-', $plist);
   $plist = str_replace('&TotalResult=', '-', $plist);
   $plist = preg_replace("/&PageNo=(\d+)/i",'-\\1.html',$plist);
   return str_replace("/plus/","/",$plist); //加上这句
  }
  return $plist;

}

 9. 在添加文档的时候同时添加至文档关键字

一般我们希望为某个文章定为某个关键词,在其它文章中出现该关键词的时候,就显示内链至该文档,我 们需要两步,一。添加文档,二。在文档关键字维护中添加关键字和链接。

下面我们通过修改文档模型,只需要直接添加关键字,就一步完成关键 字和本文链接的添加,下面介绍一下操作步骤:

step1,修改文档模型,添加一个text的字段叫做guanjianzi,此值会自动修 改表dede_addonarticle

step2.在后台目录/article_add.php else if($dopost=='save') 处理完成,提示信息之前加入以下代码

 //by airzen 20090729 关键字自动添加至关键字表.start
 $guanjianzi = trim($guanjianzi);
 $rank = 30;
 if($guanjianzi!='')
 {
  $rpurl ="http://域名/view-{$arcID}-1.html";//链接这里需要手动修改,这里是伪静态链接
  $row = $dsql->GetOne("Select * From `#@__keywords` where keyword like '$guanjianzi'");
  if(!is_array($row))
  {
   $inquery = "Insert INTO `#@__keywords`(keyword,rank,sta,rpurl) VALUES ('$guanjianzi','$rank','1','$rpurl');";
   $dsql->ExecuteNoneQuery($inquery);
  }

 }

dede主要目录结构及数据表结构

二 次开发 2010-01-10 16:11:48 阅读26 评论0 字号:大中小 


  说说经 验,dedecms的代码注释还是比较清楚的,相对比较容易看懂,有php基础的可以看看,没有的。部分功能扩展,程序的核心在include目录下,该 目录的说明如下: 
  1、程序核心程序目录及简介
/include目录   程序核心目录 
config_base.php 环境定义文件。用于检测系统环境,定义工作目录,保存数据库链接信息,引入常用函数等,建议不要修改。 
config_hand.php 系统配置文件。定义系统常用的配置信息定义,可从后台管理直接生成该文件。 
config_passport.php 通行证文件 
config_rglobals.php 检测系统外部变量 
config_rglobals_magic.php 同上 
inc_archives_view.php 用于浏览文档或对文档生成HTML 
inc_arclist_view.php 用于浏览频道列表或对内容列表生成HTML 
inc_arcmember_view.php 用于浏览会员发布的文档 
inc_arcpart_view.php 用于解析和创建全局性质的模板,如频道封面,主页,单个页面等 
inc_arcsearch_view.php 用于文档搜索 
inc_arcspec_view.php 用于浏览所有专题列表或对专题列表生成HTML 
inc_channel_unit.php 用户解析特定频道的附加数据结构信息 
inc_channel_unit_functions.php 系统共用函数集合 
inc_downclass.php 防采集随机字符串函数 
inc_freelist_view.php 用于对特定内容列表生成HTML 
inc_functions.php 可供用户使用的函数集合 
inc_imgbt.php GetTypeidSelMember 
inc_memberlogin.php 用于用户登录及获得会员状态 
inc_photograph.php 用于处理系统中的图片,例如水印,缩略图等 
inc_photowatermark_config.php 图片处理参数定义 
inc_rss_view.php 用于浏览频道RSS或对RSS生成静态文件 
inc_separate_functions.php SpGetArcList函数,用于获得文档列表 
inc_sitemap.php 用于生成网站地图 
inc_type_tree.php 用于选择栏目的目录树 
inc_type_tree_member.php 同上,会员使用 
inc_typelink.php 用于显示文章的位置和栏目位置等 
inc_typeunit_admin.php 用于频道管理时的一些复杂操作,主要用于后台 
inc_typeunit_menu.php 同上 
inc_userlogin.php 用于管理员登录 
inc_vote.php 用于管理投票 
jump.php 用于超链接跳转 
pub_charset.php 共用字符处理函数,GB/UTF-8/Unicode/BIG5等互换 
pub_collection.php 用于采集 
pub_collection_functions.php 采集用函数 
pub_datalist.php 后台管理用数据列表 
pub_datalist_dm.php 同上,不使用模板 
pub_db_mysql.php 用于操作数据库 
pub_dedehtml2.php 用于采集中的HTML解析 
pub_dedehtml.php HTML解析器 
pub_dedetag.php 用于dede模板标签解析 
pub_httpdown.php 用于下载http中的资源 
pub_oxwindow.php 后台程序扩展 
pub_splitword_www.php 织梦分词算法 
validateimg.php 验证码 
vdimgck.php 验证码 
/inc 共用函数目录 
inc_fun_funAdmin.php 获取拼音码等函数 
inc_fun_funString.php html代码处理等函数 
inc_fun_SpGetArcList.php 获取文档列表SpGetArcList

  对于 菜鸟来说,对于菜鸟来说,config_base.php,这个文件,当你的程序出现问题,需要覆盖,当你的程序出现问题,需要覆盖。不要覆盖 config_base.php和config_hand.php文件,里面都是dede一些核心配置文件,对于高手来说,也许修改几个php页面已经达 不到目的了,就需要了解dede的数据库结构,下面是部分关键数据表的结构和说明,不完全,还没有整理完全,过几天发布完整版本。

   2、主要数据结构表
  已经可以指导开发了
dede_addonarticle   附加文章表 
aid int(11) 文章编号 
typeid int(11) 分类栏目编号 
body mediumtext 文章内容 
dede_addonflash 附加Flash表 
aid int(11) FLASH编号 
typeid int(11) 分类栏目编号 
filesize varchar(10) 文件大小 
playtime varchar(10) 播放时长 
flashtype varchar(10) 作品类型 
flashrank smallint(6) 作品等级 
width smallint(6) 影片宽度 
height smallint(6) 影片高度 
flashurl varchar(80) FLASH地址 
dede_addonimages 附加图集表 
aid int(11) 图集编号 
typeid int(11) 分类栏目编号 
pagestyle smallint(6) 表现方式(1单页显示 2分多页显示 3多行多列展示) 
maxwidth smallint(6) 大图限制宽度 
imgurls text 图片集内容(标签存放) 
row smallint(6) 多列式参数(行) 
col smallint(6) 多列式参数(列) 
isrm smallint(6) 是否下载远程图片 
ddmaxwidth smallint(6) 小图片宽度限制 
dede_addonsoft 附加软件表 
aid int(11) 软件编号 
typeid int(11) 分类栏目编号 
filetype varchar(10) 文件类型 
language varchar(10) 界面语言 
softtype varchar(10) 软件类型 
accredit varchar(10) 授权方式 
os varchar(30) 运行环境 
softrank int(11) 软件等级 
officialUrl varchar(30) 官方网址 
officialDemo varchar(50) 程序演示地址 
softsize varchar(10) 软件大小 
softlinks text 软件下载链接列表 
introduce text 软件介绍 
dede_addonspec 附加专题表 
aid int(11) 专题编号 
typeid int(11) 分类栏目编号 
note text 专题内容(仅存放标签代码) 
dede_admin 管理员信息表 
ID int(10) 自动编号 
usertype int(10) 用户类型 
userid varchar(30) 用户登录ID 
pwd varchar(50) 用户密码 
uname varchar(20) 用户笔名 
tname varchar(30) 真实姓名 
email varchar(30) 电子邮箱 
typeid int(11) 负责频道(0表示全部) 
logintime datetime 登录时间 
loginip varchar(20) 登录IP 
dede_admintype 系统用户组管理表 
rank smallint(6) 组级别编号 
typename varchar(30) 组名称 
system smallint(6) 是否为系统默认组 
purviews text 权限列表 
dede_arcatt 文档自定义属性表 
att smallint(6) 编号 
attname varchar(30) 属性名称 
dede_archives 文章表 
ID int(11) 自动编号 
typeid int(11) 所属主栏目编号 
typeid2 int(11) 所属副栏目编号 
sortrank int(11) 文章排序(置顶方法) 
iscommend smallint(6) 是否推荐 
ismake smallint(6) 是否生成静态 
channel int(11) 文章所属模型 
arcrank smallint(6) 阅读权限 
click int(11) 点击次数 
money smallint(6) 消费点数 
title varchar(80) 标题 
shorttitle varchar(36) 简略标题 
color varchar(10) 标题颜色 
writer varchar(30) 作者 
source varchar(50) 来源 
litpic varchar(100) 缩略图 
pubdate int(11) 录入时间 
senddate int(11) 发布时间 
arcatt smallint(6) 自定属性(att) 
adminID int(11) 发布管理员ID 
memberID int(11) 发布会员ID 
description varchar(250) 摘要 
keywords varchar(60) 关键词 
templet varchar(60) 文档模板 
lastpost int(11) 最近评论时间 
postnum int(11) 评论数目 
redirecturl varchar(150) 跳转网址 
mtype int(11) 用户自定义分类 
userip varchar(20) 用户IP 
locklikeid smallint(6) 是否锁定相关文章 
likeid varchar(240) 相关文章ID 
dede_arcrank 阅读权限表 
ID int(10) 自动编号 
rank smallint(10) 权限等级 
membername varchar(20) 等级名称 
adminrank smallint(10) 管理等级 
money int(11) 消费点数 
dede_arctype 栏目管理表 
ID int(10) 栏目编号(自动编号) 
reID int(10) 父栏目编号 
topID int(10)   
sortrank smallint(6) 排序编号 
typename varchar(30) 栏目名称 
typedir varchar(100) 栏目目录 
isdefault smallint(6) 栏目列表选项(1链接到默认页 0链接到列表第一页 -1使用动态页) 
defaultname varchar(20) 默认页的名称 
issend smallint(6) 是否支持投稿 
channeltype smallint(6) 频道类型 
maxpage int(11) 保留 
ispart smallint(6) 栏目属性 
corank smallint(6) 浏览权限 
tempindex varchar(60) 封面模板 
templist varchar(60) 列表模板 
temparticle varchar(60) 文章模板 
tempone varchar(60) 单独页面模板 
namerule varchar(50) 文章命名规则 
namerule2 varchar(50) 列表命名规则 
modname varchar(30) 模板名称 
description varchar(200) 栏目介绍 
keywords varchar(100) 关键词 
moresite smallint(6) 多站点支持 
siterefer smallint(6) 多站点站点根目录属性 
sitepath varchar(60) 多站点站点根目录 
siteurl varchar(60) 多站点绑定域名 
ishidden smallint(6) 是否隐藏栏目 
dede_area 地区表 
eid int(11) 地区编号 
name varchar(20) 地区名称 
rid int(11) 编号属性

 1. 请对POSIX风格和兼容Perl风格两种正则表达式的主要函数进行类比说明

  ereg preg_match

   ereg_replace preg_replace

  2. 请说明在php.inisafe_mode开启之后对于PHP系统函数的影响

  3. PHP5中魔术方法函数有哪几个,请举例说明各自的用法

__sleep
__wakeup
__toString
__set_state
__construct,
__destruct
__call,
__get,
__set,
__isset,
__unset
__sleep,
__wakeup,
__toString,
__set_state,
__clone
__autoload

   4. 请写出让,并说明如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?

  5. PHP的垃圾收集机制是怎样的

  6.使对象可以像数组一样进行foreach循环,要求属性必须是私有。

   (Iterator模式的PHP5实现,写一类实现Iterator接口)

  7.请写一段PHP代码,确保多个进程同时写入同一个文件 成功

  8. 用PHP实现一个双向队列

  9. 使用正则表达式提取一段标识语言(htmlxml)代码段中指定标签的指定属性值(需考虑属性值对不规则的情况,如大小写不敏感,属性名值与等号间有空 格等)。此处假设需提取test标签的attr属性值,请自行构建包含该标签的串

  <test attr=”ddd”>

   <test attrs*=s*[“ ¦’](.*?)[” ¦’].*?>

   10.请使用socket相关函数(非curl)实现如下功能:构造一个post请求,发送到指定http server的指定端口的指定请求路径(如http://www.example.com:8080/test)。请求中包含以下变量:
本篇文章 来自<A href='http://www.soidc.net'>IDC专家网</a> 原文链接:http://www.soidc.net/articles/1213781103032/20081022 /1215945542222_1.html

PHP面试题汇总(1
作者:狼图腾   出处:豆豆网-php   20081022日 00:00   进入论坛 
 
相关主题:php面试题php面试题 答案php面试题及答案php程序员面试题最新php面试题php经典面试题面试题1面试题java面试题大学生村官面试题
   这是一份比较全 面的PHP面试题.对准备去新公司应聘PHP职位的开发者应该有帮助.

  或者说,对招聘PHP开发人员的企业也有些帮助,不过就不要原 样打印出来考了,稍微改一改.

  简述题(50)

  1、用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2)

  2echo(),print(),print_r()的区别(3)

  3、能够使 HTMLPHP分离开使用的模板(1)

  4、使用哪些工具进行版本控制?(1)

  5、如何实现字符串翻转? (3)

   ---------------------------------------------------------------

   6、优化MYSQL数据库的方法。(4分,多写多得)

  7PHP的意思(1)

  8MYSQL取得当前时间 的函数是?,格式化日期的函数是(2)

  9、实现中文字串截取无乱码的方法。(3)

   ---------------------------------------------------------------

   10、您是否用过版本控制软件如果有您用的版本控制软件的名字是?(1)

  11、您是否用过模板引擎如果有您用的模板引擎的名字是?(1)

  12、请简单阐述您最得意的开发之作(4)

  13、对于大流量的网站您采用什么样的方法来解决访问量问题?(4)

   -----------------------------------------------------------------

   14、用PHP写出显示客户端IP与服务器IP的代码1)

  15、语句includerequire的区别是什么?为避免多次包 含同一文件,可用(?)语句代替它们? (2)

  16、如何修改SESSION的生存时间(1).

  17、有一 个网页地址比如PHP研究室主页: http://www.phpv.net/index.html,如何得到它的内容?($1)

   18、在HTTP 1.0中,状态码401的含义是(?);如果返回找不到文件的提示,则可用 header 函数,其语句为(?);(2)

<?php
/*
DedeCms 数据库使用实例说明
*/
require_once dirname(__FILE__)."pub_db_mysql.php";//引用数据库文件
//确保数据库信息填写正确

//数据库连接信息
$cfg_dbhost = 'localhost';
$cfg_dbname = 'sccms';
$cfg_dbuser = 'root';
$cfg_dbpwd = '123456';
$cfg_dbprefix = 'sc_';
$cfg_db_language = 'utf8';

//新建一个数据库操 作类
$dsql = new ScSql(false);

//////////////////////////////// 获取一条记录的内容///////////////////////////////
// 下面是获取一条记录使用实例
$row = $dsql->GetOne("Select * From dede_* where id = $aid");
//获取数据内容保存在数组$row中,通过下标可以将其调用出来
echo $row['id'];
//下面是循环调用记录
///////////////////////////////////////////////////////////////////////////////


//////////////////////////////将查询获取总数输出 /////////////////////////////
//获取一个查询记录 总数
$row = $dsql->GetOne("select count(*) as dd where typeid = $typeid");
echo $row['dd'];//输出总数
///////////////////////////////////////////////////////////////////////////////


//////////////////////////////将查询的若干条记录输出 //////////////////////////////////
$sql = "Select * from dede_*";
$dsql->SetQuery($sql);// SQL查询语句格式化
$dsql->Execute();//执行SQL操 作
//通过循环输出执行查询中的结果
while($row = $dsql->GetArray()){
echo $row['id'];
echo $row['title'];
}
//或者采取这种方式输出内容



while($row = $dsql->GetObject()){
echo $row->id;
echo $row->Title;
}
///////////////////////////////////////////////////////////////////////////////

////////////////////////////// 插入一条记录///////////////////////////////
$sql = "
INSERT INTO `dede_member_flink`(mid,title,url,linktype,imgurl,imgwidth,imgheight) 
VALUES(".$cfg_ml->M_ID.",'$title','$url','$linktype','$imgurl','$imgwidth','$imgheight');";// 插入记录数据库
$dsql->SetQuery($sql);//格式化查询 语句
$dsql->ExecNoneQuery();//执行SQL操作
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////// 删除一条记录///////////////////////////
$sql = "Delete From dede_member_flink where aid='$aid' And mid='".$cfg_ml->M_ID."';";
$dsql->SetQuery($sql);
$dsql->ExecNoneQuery();
//或者使用简化模式
$dsql->ExecNoneQuery("Delete From dede_member_flink where aid='$aid' And mid='".$cfg_ml->M_ID."';");
///////////////////////////////////////////////////////////////////////////////

////////////////////////////////////// 更新一条记录//////////////////////////
$upquery = "
Update dede_member_flink set 
title='$title',url='$url',linktype='$linktype',
imgurl='$imgurl',imgwidth='$imgwidth',imgheight='$imgheight'
where aid='$aid' And mid='".$cfg_ml->M_ID."';
";
$rs = $dsql->ExecuteNoneQuery($upquery);

///////////////////////////////////////////////////////////////////////////////

//////////////////////////////// 判断获取数据库内容的常用方法///////////////////
$row = $dsql->GetOne("Select * From dede_moneycard_type where tid={$pid}");
if(!is_array($row)){
echo "失败";
exit();


/////////////////////////////
$upquery = " Update dede_member_flink set 
title='$title',url='$url',linktype='$linktype',
imgurl='$imgurl',imgwidth='$imgwidth',imgheight='$imgheight'
where aid='$aid' And mid='".$cfg_ml->M_ID."';
";
$rs = $dsql->ExecuteNoneQuery($upquery);
if($rs){
echo "成功";
}else{
echo "失败";
}
//////////////////////////////////获取总数 //////////////////////////////////
$dsql = new DedeSql(false);
$dsql->SetQuery("Select * from `dede_admin` where userid='$userid' Or uname='$uname'");
$dsql->Execute();
$ns = $dsql->GetTotalRow();
//////////////////////////////// 关闭数据库///////////////////////////////////
$dsql->Close();
///////////////////////////////////////////////////////////////////////////////
?>

Dedecms新版本(V5系列)模板标记非常灵活,对于很多新人是一个头疼的问题,天涯今天就来和大家谈谈这些标记,为 以后大家修改、制作模板打下扎实基础。

首先我们去官方的《模板制作 帮助文档》查看这些标记的简介,如何来看帮助文档呢,下面天涯就来简单的说一下,我 们拿最常用的Arclist标记来做说明。

帮助文档中都有【功能说明】【适 用范围】【基本语法】【属性说明】这些部分组成,
功能说明】用于解释模板标记使用功能,建议新手都把这些标记功能看看,大致做一个了解。
适用范围】由于Dedecms模板大致分为首页、频道、列表、内容以及其他附加模板组成,使用范围指出 这些标记在哪些模板中起作用。模板文件夹中(Dedecms默认模板为例,即{cmspath}\templets\default)大家可以仔细分析 下,模版中很多都是以下列这些名字出现index.htm,index_X.htm(封面模板),list_X.htm(列表模 板),article_X.htm(内容模板),你可以对照标记的适用范围,查看这些标签在哪个模板中能起到作用。
基本语法】用于介绍模板基本使用方法,在使用时候可以拿来根据自己的需要进行响应的修改。
属性说明】这些属性,决定你调用的内容,决定Dedecms解析这些标记的形式,属性非常重要。

以上这些介绍主要是让大多数新手 学会看帮助文件,模板修改使用的大多数问题都是因为自己不去看这些帮助文件导致的,希望广大Dedecms新人引以为戒

下面就来简单说下Dedecms模板的分类,搞过ASP的人应该知道,动态网页基本上就是对变量、数组(数据库)的操作,然后通过语句输出为 HTMLdedecms的这些标记也是起到同样的效果。
下面根据起到的不同效果对模板进行如下分类:
.变量操作型这里的变量不同于对编程中那个复杂的变量,新人不懂,我这里所指出的变量是Dedecms调用局部内容进行输出的一些标记,这里有: Flink (friendlink)标记】【Page 标记】【Pagelist 标记】【Pagebreak 标记】【Prenext 标记】【Pagetitle 标记】【Myad 标记】【Vote 标记】以及还有系统不常用的(其实天涯经常使用),例如global 标记、include 标记、mytag标记、position 标记,这些标记大家可以看出,都是输出来为一部分内容,并不可以重复,这个标记在解析时候生成的只是一块不重复的内容。

.数组操作型这里的数组当然在模板标记中,指的是循环输出一些内容的标记,例如N行文章、N个软件、N个会员信息等等,Dedecms这些标记有:Arclist 标记Field 标记】【Channel 标记】 Type 标记】【Autochannel 标记】【Mynews 标记】【LOOP 标记】【Channelartlist 标记】【List 标记】【Ask 标记】【Sql 标记】【Group 标记】【Groupthread 标记】【booklist 标记】【catalog 标记】【chapter 标记】【contentlist 标记】当然 也有foreach这种罕见的标记,这些标记使用时,通过属性设置,能循环输出一些列内容,很多重复的东西,往往 只要一个标记就搞定,不信可以开个模板仔细观察观察。

有了这个分类以后,在修改、制作模板时候相信会得心应手了,天涯在修改、制作模板中经常使用的标记有sqlincludeloop(貌似现在被sql 取代了)mytag这些标记,因为这些标记很自由,当 然新人可以在模板制作修改中尝试使用这些灵活自由的标记。

本篇接下来简单讲一下数组操作性标记的原理以及他的使用方法。

我们在Dedecms模板中经常看到下面这样的例子:
{dede:arclist row=4 titlelen=20 orderby=pubdate typeid=58}
<dd><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 调用栏目id58栏目的文章
标记都是通过 {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(dedecookie是经过加密得,必须用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和密码或其它字符串安全性测试,返回truefalse 

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) 
gbkutf8编码 

big52gb($Text) 
big5gb12312编码 

gb2big5($Text) 
gb2312big5编码 

(注意:gb2312编码一般不包含那些脑开残体之类得生冷字,而gbk通常是支持得


文件:inc_photograph.php 

ImageResize($srcFile,$toW,$toH,$toFile="") 
缩图片自动生成函数,来源支持bmpgifjpgpng 

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_httpdown.php 
dede下载类 

pub_oxwindow.php 
dede高级提示窗口类 

pub_splitword_www.php 
dede分词类 

zip.lib.php 
zip处理类 


其它重要文件 
dede/inc/inc_archives_functions.php 
发文章时一些远程抓图、自定义模型字段列出之类函数都在这个文件 


dede/inc/inc_batchup.php 
DelArc($aid,$onlyfile=false,$channelid=0) 
删除某个文档得函数

dede_addonarticle

附加文章表

 

aid

int(11)

文章编号

 

 

typeid

int(11)

分类栏目编号

 

 

body

mediumtext

文章内容

 

 

dede_addonflash

附加Flash

 

 

aid

int(11)

FLASH编号

 

 

typeid

int(11)

分类栏目编号

 

 

filesize

varchar(10)

文件大小

 

 

playtime

varchar(10)

播放时长

 

 

flashtype

varchar(10)

作品类型

 

 

flashrank

smallint(6)

作品等级

 

 

width

smallint(6)

影片宽度

 

 

height

smallint(6)

影片高度

 

 

flashurl

varchar(80)

FLASH地址

 

 

dede_addonimages

附加图集表

 

 

aid

int(11)

图集编号

 

 

typeid

int(11)

分类栏目编号

 

 

pagestyle

smallint(6)

表现方式(1单页显示 2分多页显示 3多行多列展示)

 

 

maxwidth

smallint(6)

大图限制宽度

 

 

imgurls

text

图片集内容(标签存放)

 

 

row

smallint(6)

多列式参数(行)

 

 

col

smallint(6)

多列式参数(列)

 

 

isrm

smallint(6)

是否下载远程图片

 

 

ddmaxwidth

smallint(6)

小图片宽度限制

 

 

dede_addonsoft

附加软件表

 

 

aid

int(11)

软件编号

 

 

typeid

int(11)

分类栏目编号

 

 

filetype

varchar(10)

文件类型

 

 

language

varchar(10)

界面语言

 

 

softtype

varchar(10)

软件类型

 

 

accredit

varchar(10)

授权方式

 

 

os

varchar(30)

运行环境

 

 

softrank

int(11)

软件等级

 

 

officialUrl

varchar(30)

官方网址

 

 

officialDemo

varchar(50)

程序演示地址

 

 

softsize

varchar(10)

软件大小

 

 

softlinks

text

软件下载链接列表

 

 

introduce

text

软件介绍

 

 

dede_addonspec

附加专题表

 

 

aid

int(11)

专题编号

 

 

typeid

int(11)

分类栏目编号

 

 

note

text

专题内容(仅存放标签代码)

管理员信息表及系统用户组管理表


dede_admin管理员信息表

 

 

ID

int(10)

自动编号

 

 

usertype

int(10)

用户类型

 

 

userid

varchar(30)

用户登录ID

 

 

pwd

varchar(50)

用户密码

 

 

uname

varchar(20)

用户笔名

 

 

tname

varchar(30)

真实姓名

 

 

email

varchar(30)

电子邮箱

 

 

typeid

int(11)

负责频道(0表示全部)

 

 

logintime

datetime

登录时间

 

 

loginip

varchar(20)

登录IP

 

 

dede_admintype

系统用户组管理表

 

 

rank

smallint(6)

组级别编号

 

 

typename

varchar(30)

组名称

 

 

system

smallint(6)

是否为系统默认组

 

 

purviews

text

权限列表

dede_arcatt文档自定义属性表

 

 

att

smallint(6)

编号

 

 

attname

varchar(30)

属性名称

 

 

dede_archives

文章表

 

 

ID

int(11)

自动编号

 

 

typeid

int(11)

所属主栏目编号

 

 

typeid2

int(11)

所属副栏目编号

 

 

sortrank

int(11)

文章排序(置顶方法)

 

 

iscommend

smallint(6)

是否推荐

 

 

ismake

smallint(6)

是否生成静态

 

 

channel

int(11)

文章所属模型

 

 

arcrank

smallint(6)

阅读权限

 

 

click

int(11)

点击次数

 

 

money

smallint(6)

消费点数

 

 

title

varchar(80)

标题

 

 

shorttitle

varchar(36)

简略标题

 

 

color

varchar(10)

标题颜色

 

 

writer

varchar(30)

作者

 

 

source

varchar(50)

来源

 

 

litpic

varchar(100)

缩略图

 

 

pubdate

int(11)

录入时间

 

 

senddate

int(11)

发布时间

 

 

arcatt

smallint(6)

自定属性(att

 

 

adminID

int(11)

发布管理员ID

 

 

memberID

int(11)

发布会员ID

 

 

description

varchar(250)

摘要

 

 

keywords

varchar(60)

关键词

 

 

templet

varchar(60)

文档模板

 

 

lastpost

int(11)

最近评论时间

 

 

postnum

int(11)

评论数目

 

 

redirecturl

varchar(150)

跳转网址

 

 

mtype

int(11)

用户自定义分类

 

 

userip

varchar(20)

用户IP

 

 

locklikeid

smallint(6)

是否锁定相关文章

 

 

likeid

varchar(240)

相关文章ID

 

 

dede_arcrank

阅读权限表

 

 

ID

int(10)

自动编号

 

 

rank

smallint(10)

权限等级

 

 

membername

varchar(20)

等级名称

 

 

adminrank

smallint(10)

管理等级

 

 

money

int(11)

消费点数

 

 

dede_arctype

栏目管理表

 

 

ID

int(10)

栏目编号(自动编号)

 

 

reID

int(10)

父栏目编号

 

 

topID

int(10)

 

 

 

sortrank

smallint(6)

排序编号

 

 

typename

varchar(30)

栏目名称

 

 

typedir

varchar(100)

栏目目录

 

 

isdefault

smallint(6)

栏目列表选项(1链接到默认页 0链接到列表第一页 -1使用动态页)

 

 

defaultname

varchar(20)

默认页的名称

 

 

issend

smallint(6)

是否支持投稿

 

 

channeltype

smallint(6)

频道类型

 

 

maxpage

int(11)

保留

 

 

ispart

smallint(6)

栏目属性

 

 

corank

smallint(6)

浏览权限

 

 

tempindex

varchar(60)

封面模板

 

 

templist

varchar(60)

列表模板

 

 

temparticle

varchar(60)

文章模板

 

 

tempone

varchar(60)

单独页面模板

 

 

namerule

varchar(50)

文章命名规则

 

 

namerule2

varchar(50)

列表命名规则

 

 

modname

varchar(30)

模板名称

 

 

description

varchar(200)

栏目介绍

 

 

keywords

varchar(100)

关键词

 

 

moresite

smallint(6)

多站点支持

 

 

siterefer

smallint(6)

多站点站点根目录属性

 

 

sitepath

varchar(60)

多站点站点根目录

 

 

siteurl

varchar(60)

多站点绑定域名

 

 

ishidden

smallint(6)

是否隐藏栏目

 

 

dede_area

地区表

 

 

eid

int(11)

地区编号

 

 

name

varchar(20)

地区名称

 

 

rid

int(11)

编号属性

首页模板

\templets\default\index.html

文章频道首页

\templets\default\index_article.htm

文章列表页

\templets\default\list_article.htm

文章内容页

\templets\default\article_article.htm

图集频道首页

\templets\default\index_image.htm

图集列表页

\templets\default\list_image.htm

图集内容页

\templets\default\article_image.htm

图集详细页面

\templets\plus\showphoto.htm

软件频道首页

\templets\default\index_soft.htm

软件列表页

\templets\default\list_soft.htm

软件内容页

\templets\default\article_soft.htm

软件最终下载页

\templets\plus\download_links_templet.htm

动画频道首页

\templets\default\index_flash.htm

动画列表页

\templets\default\list_flash.htm

动画内容页

\templets\default\article_flash.htm

产品频道首页

\templets\default\index_product.htm

产品列表页

\templets\default\list_product.htm

产品内容页

\templets\default\article_product.htm

分类信息频道首页

\templets\default\index_info.htm

分类信息列表页

\templets\default\list_info.htm

分类信息内容页

\templets\default\article_info.htm

分类信息搜索页

\templets\default\infosearch.htm

专题列表页

\templets\default\list_spec.htm

专题内容页

\templets\default\article_spec.htm



图书模块 

图书首页

\templets\default\books_index.htm

图书列表页

\templets\default\books_list.htm

图书搜索页

\templets\default\books_search.htm

图书内容页

\templets\default\books_book.htm

小说章节内容页

\templets\default\books_story.htm

漫画章节内容页

\templets\default\books_photo.htm

vip章节内容页

\templets\default\book_member_err.htm



问答模块 

问答首页

\ask\template\default\dede.htm

问答列表页

\ask\template\default\browser.htm

问答内容页

\ask\template\default\question.htm

问答提问页

\ask\template\default\post.htm

问答内容维护页

\ask\template\default\post.adopt.htm 
\ask\template\default\post.extra.htm 
\ask\template\default\post.upreward.htm

问答搜索结果页

\ask\template\default\search.htm

问答消息提示页

\ask\template\default\showmsg.htm



其他功能与插件 

TAG列表页

\templets\default\taglist.htm

TAG内容列表

\templets\default\tag.htm

DIGG列表页

\templets\default\digg.htm

搜索结果页

\templets\default\search.htm

高级搜索页

\templets\plus\heightsearch.htm

评论页模板

\templets\plus\feedback_templet.htm

评论验证码确认页

\templets\plus\feedback_confirm.htm

评论JS内容页

\templets\plus\feedback_templet_js.htm

站点地图页

\templets\plus\sitemap.htm

RSS地图页

\templets\plus\rssmap.htm

RSS内容页

\templets\plus\rss.htm

投票页

\templets\plus\vote.htm

栏目JS文件

\templets\plus\js.htm

推荐文档信息页

\templets\plus\recommend.htm

友情连接提交页

\templets\plus\flink-add.htm

友情链接列表页

\templets\plus\flink-list.htm

留言板插件

\templets\plus\guestbook.htm

根目录    
/dede    管理后台目录 
/freelist    自由文档列表生成目录 
/html    默认文章生成目录 
/include    程序核心文件目录 
/member    会员管理目录 
/plus    插件及辅助功能目录 
/setup    安装目录 
/special    专题生成目录 
/templets    默认模板存放目录 
/upimg    上传下载文件保存目录 
base.css    基本样式表 
index.php    网站默认首页 
robots.txt    搜索控制文件 
    
/templets模板目录    
/dedecmsv31    3模板目录 
/default    默认模板目录 
article_article.htm    普通文章页面模板 
article_default.htm    一般文档页面模板 
article_flash.htm    flash页面模板 
article_image.htm    图集页面模板 
article_soft.htm    软件页面模板 
article_spec.htm    专题页面模板 
index.htm    网站首页模板 
index_article.htm    文章频道封面模板 
index_article_webart1.htm    
index_article_webart2.htm    
index_article_webart.htm    
index_default.htm    一般文档封面模板 
index_flash.htm    flash频道封面模板 
index_image.htm    图集频道封面模板 
index_soft.htm    软件频道封面模板 
list_article.htm    文章列表模板 
list_default.htm    一般文档列表目录模板 
list_flash.htm    flash文档列表模板 
list_free.htm    自由列表模板 
list_image.htm    图集列表模板 
list_soft.htm    软件列表模板 
list_spec.htm    专题列表模板 
/img    模板图片目录(含样式表) 
/plus    辅助插件模板目录 
download_links_templet.htm    下载链接模板 
feedback_confirm.htm    评论确认模板 
feedback_templet.htm    用户评论模板 
feedback_templet_js.htm    
flink-add.htm    友情链接添加模板 
flink-list.htm    友情链接列表模板 
guestbook.htm    留言本模板 
heightsearch.htm    高级搜索模板 
js.htm    
recommend.htm    推荐好友模板 
rss.htm    RSSXML模板 
rssmap.htm    RSS订阅文件 
showphoto.htm    图片显示模板 
sitemap.htm    网站地图模板 
view_msg.htm    会员提示信息模板 
vote.htm    投票结果显示模板 
/system    系统模板目录 
channel_list.htm    栏目列表系统模板 
list_fulllist.htm    文档列表系统模板 
mynews.htm    站内新闻系统模板 
part_arclist.htm    文章列表系统模板 
part_autochannel.htm    分类栏目系统模板 
part_channelartlist.htm    包含文章列表的栏目系统模板 
part_imginfolist.htm    使用imginfolist标签调用的模板 
part_imglist.htm    使用imglist标签调用的模板 
part_type_list.htm    单个栏目的系统模板 
spec_arclist.htm    专题列表文章系统模板 
spec_list.htm    专题用模板 
tag_arclist.htm    
tag_fieldlist.htm    fieldlist用系统模板 
/system/channel    频道特殊底层模板目录 
channel_downlinkpage.htm    下载地址列表链接模板 
channel_downlinks.htm    下载地址列表模板 
channel_spec_note.htm    专题节点列表模板 
    
/include目录  程序核心目录    
config_base.php    环境定义文件。用于检测系统环境,定义工作目录,保存数据库链接信息,引入常用函数等,建议不要修改。 
config_hand.php    系统配置文件。定义系统常用的配置信息定义,可从后台管理直接生成该文件。 
config_passport.php    通行证文件 
config_rglobals.php    检测系统外部变量 
config_rglobals_magic.php    同上 
inc_archives_view.php    用于浏览文档或对文档生成HTML 
inc_arclist_view.php    用于浏览频道列表或对内容列表生成HTML 
inc_arcmember_view.php    用于浏览会员发布的文档 
inc_arcpart_view.php    用于解析和创建全局性质的模板,如频道封面,主页,单个页面等 
inc_arcsearch_view.php    用于文档搜索 
inc_arcspec_view.php    用于浏览所有专题列表或对专题列表生成HTML 
inc_channel_unit.php    用户解析特定频道的附加数据结构信息 
inc_channel_unit_functions.php    系统共用函数集合 
inc_downclass.php    防采集随机字符串函数 
inc_freelist_view.php    用于对特定内容列表生成HTML 
inc_functions.php    可供用户使用的函数集合 
inc_imgbt.php    GetTypeidSelMember 
inc_memberlogin.php    用于用户登录及获得会员状态 
inc_photograph.php    用于处理系统中的图片,例如水印,缩略图等 
inc_photowatermark_config.php    图片处理参数定义 
inc_rss_view.php    用于浏览频道RSS或对RSS生成静态文件 
inc_separate_functions.php    SpGetArcList函数,用于获得文档列表 
inc_sitemap.php    用于生成网站地图 
inc_type_tree.php    用于选择栏目的目录树 
inc_type_tree_member.php    同上,会员使用 
inc_typelink.php    用于显示文章的位置和栏目位置等 
inc_typeunit_admin.php    用于频道管理时的一些复杂操作,主要用于后台 
inc_typeunit_menu.php    同上 
inc_userlogin.php    用于管理员登录 
inc_vote.php    用于管理投票 
jump.php    用于超链接跳转 
pub_charset.php    共用字符处理函数,GB/UTF-8/Unicode/BIG5等互换 
pub_collection.php    用于采集 
pub_collection_functions.php    采集用函数 
pub_datalist.php    后台管理用数据列表 
pub_datalist_dm.php    同上,不使用模板 
pub_db_mysql.php    用于操作数据库 
pub_dedehtml2.php    用于采集中的HTML解析 
pub_dedehtml.php    HTML解析器 
pub_dedetag.php    用于dede模板标签解析 
pub_httpdown.php    用于下载http中的资源 
pub_oxwindow.php    后台程序扩展 
pub_splitword_www.php    织梦分词算法 
validateimg.php    验证码 
vdimgck.php    验证码 
/inc    共用函数目录 
inc_fun_funAdmin.php    获取拼音码等函数 
inc_fun_funString.php    html代码处理等函数 
inc_fun_SpGetArcList.php    获取文档列表SpGetArcList

时间格式
{dede:field name='pubdate' function='strftime("%Y年%m月%d日 %H:%M:%S","@me")' /}2007年1月1日 18:30:02
{dede:field name='pubdate' function='strftime("%Y-%m-%d %H:%M:%S","@me")' /}2007-1-1 18:30:02
{dede:field name='pubdate' function='strftime("%Y年%m月%d日 %H时%M分%S秒","@me")' /}2007年1月1日 18时30分02秒
{dede:field name='pubdate' function='strftime("%m-%d %H:%M:%S","@me")' /}1-1 18:30:02
{dede:field name='pubdate' function='strftime("%m-%d","@me")' /}1-1
%Y-年
%m-月
%d-日
%H-小时
%M-分
%S-秒
24小时内的时间显示红色..
[field:pubdate runphp='yes'] 
$a="<font color='#ff0000'>";
$b="</font>";
$c=strftime("%Y年%m月%d日 %H:%M:%S","@me");
$ntime = time();
$oneday = 3600 * 24;
if(($ntime - @me)<$oneday) @me = $a.$c.$b;
else @me =$c;
[/field:pubdate]
最后更新时间
最后更新时间:{dede:tagname runphp='yes'}@me = date("Y-m-d H:i:s", time());{/dede:tagname}
XX天前
[field:pubdate runphp='yes'] 
$today = Floor(time()/(3600 * 24));
$senday= Floor(@me/(3600 * 24));
$updays = $today-$senday;
if($updays==0) @me = "今日";
else @me = $updays."天前";
[/field:pubdate]

织梦系统中,分类信息模型属于独立单表模型的,他的调用标签为 ArcListsg 标签,而使用系统内置的Arclistsg 标签是无法调用信息的发布人的!也就是说没有[field:信息发布人/] 这样的字段可供选择。

织梦系统提供了强大的SQL标签供高级用户使用,他的基本格式为:

1. {dede:sql sql=“完整的SQL查询语句”}   

2. 底层模板,用于输出[field:字段名/]<!–字 段名取值范围为查询结果的所有字段–>  

3. {/dede:sql} 

我们了解了上面的这种方式以后,那么我们就可以使用SQL语句来调用分类信息模型了。一个简单的例子:

1. {dede:sql sql=“select * FROM #@__addoninfos limit 0,10″}   

2. 信息标题:[field:title/]   

3. {/dede:sql}  

上面的这种基本调用就是调用了信息发布的最新10条信息。这里的* 号就可以取值到信息发布者的会员id号,他的字段是mid,那么我们就可以在底层模板中通过 [field:mid/] 来进行输出了。但是这里我们只输出这个id号,无法取得他的会员名及昵称啊?怎么办呢?

   这里我们就可以想到利用left join 来进行匹配了,因为他既然能够获取他的会员id号,那么这个值他是与织梦的会员表是相互关联的,通过这个值我们可以关联到织梦会员表来获取更加详细的会员 资料。比如:

Select a.*,m.* FROM #@__addoninfos a left join #@__member m on a.mid = m.mid

这里利用left join 来进行匹配,让他们两边的ID号码相等,就可以了。所以我们调用分类信息发布者到首页的具体代码就为:

1. {dede:sql sql=“Select a.*,m.* FROM #@__addoninfos a left join #@__member m on a.mid = m.mid limit 0 2″}   

2. [field:字段名/]<!–这里的字段名的取值就 可以为addoninfos与member两个表的所有字段了–>  

3. {/dede:sql}  

当然,这里提供的仅仅是一个思路!比如,后面的限制调用的栏目,只需要在 a.mid = m.mid 后面加上一个where a.typeid = 栏目id 来进行表示,如果你的栏目为多个,还可以使用 where a.typeid IN(栏目1,栏目2….栏目N)等等。

文章正文页常用函数:

1.相应文章上下文调用:

{dede:prenext function="str_replace(' 下一篇:','<'.'br'.' />下一篇:

2.文章关键字TAG调用,每个关键字附带链接地址

{dede:field name='keywords' runphp='yes' }

if(!empty(@me)){

$kws = explode(' ',@me);

@me = "";

foreach($kws as $k){

@me .= "<a href='/plus/search.php?keyword=$k' target='blank'>$k</a> ";

}

@me= str_replace('+', ' ',trim(@me));

}

{/dede:field}<BR>

3.复制相应文章地址按钮

<INPUT onclick=copyToClipBoard() type=button value=复制本页文章地址,传给QQ/MSN上的好友 name=Submit width="100" height="16">

<SCRIPT language=javascript>

function copyToClipBoard(){

var clipBoardContent="";

clipBoardContent+=document.title;

clipBoardContent+="";

clipBoardContent+=this.location.href;

window.clipboardData.setData("Text",clipBoardContent);

alert("复制成功,请粘贴到你的QQ/MSN上推荐给你的好友");

</SCRIPT>

<SCRIPT>

document.body.oncopy = function () { setTimeout( function () { var text = clipboardData.getData("text"); if (text) { text = text + "\r\n参考链接:"+location.href; clipboardData.setData("text", text); } }, 100 ) }

</SCRIPT>

4.文章正文评论调用

<form action="{dede:field name='phpurl' /}/feedback.php?action=send" method="post" name="feedback">

<input type="hidden" name="arcID" value="{dede:field name="id"/}">

<input name="notuser" type="hidden" id="notuser" value="1" checked>

<><LABEL for=message>内容:</LABEL><TEXTAREA id=message onfocus=showcode() name=message></TEXTAREA></P>

<><BUTTON id=submitcomm

style="ADDING-RIGHT: 30px; PADDING-LEFT: 30px; PADDING-BOTTOM: 0px; MARGIN-LEFT: 2.8em; COLOR: #090; LINE-HEIGHT: 35px; PADDING-TOP: 0px; HEIGHT: 35px; BACKGROUND-COLOR: #ffffff" name=submitcomm type=submit value="submit">发表评论</BUTTON></P><INPUT id=itemid

type=hidden value="submit" name=itemid> </FORM>

5.调用收藏夹,添加文章到各大网站收藏夹

<!-- 添加网摘 --><STRONG><FONT color=#0e63e4></FONT><FONT

color=#58c600></FONT><FONT color=#996699></FONT><FONT

color=#c00012></FONT><FONT color=#795f00></FONT><FONT

color=#327f00>:</FONT></STRONG> <A title=Baidu搜藏

href='javascript:u=location.href;t=document.title;c%20=%20""%20+%20(window.getSelection%20? window.getSelection() : document.getSelection ? document.getSelection() : document.selection.createRange().text);var url="http://cang.baidu.com/do/add?it="+encodeURIComponent(t)+"&iu="+encodeURIComponent(u)+"&dc="+encodeURIComponent(c)+"&fr=ien#nw=1";window.open(url,"_blank","scrollbars=no,width=600,height=450,left=75,top=20,status=no,resizable=yes"); void 0'><IMG

alt=Baidu搜藏 src="/wm_img/baidu.gif" border=0></A> <A

href="javascript:window.open('http://shuqian.qq.com/post?title='+encodeURIComponent(document.title)+'&uri='+encodeURIComponent(document.location.href)+'&jumpback=2&noui=1','favit','width=960,height=600,left=50,toolbar=no,menubar=no,location=no,scrollbars=yes,status=yes,resizable=yes');void(0)"><IMG

title=QQ书签 alt=QQ书签 src="/wm_img/qq.gif" border=0></A> <A

href="javascript:location.href='http://www.google.com/bookmarks/mark?op=add&bkmk='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title)"><IMG

alt=Google书签 src="/wm_img/google.gif" border=0></A> <A

href="javascript:location.href='http://del.icio.us/post?&url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title)"><IMG

title=Del.icio.us alt=Del.icio.us src="/wm_img/delicious.gif" :

border=0></A> <A title=POCO网摘

href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:'')d.getSelection?d.getSelection():'');void(keyit=window.open('http://my.poco.cn/fav/storeIt.php?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t)+'&img=http://www.h-strong.com/blog/logo.gif','keyit','scrollbars=no,width=475,height=575,status=no,resizable=yes'));keyit.focus();"><IMG

alt=POCO网摘 src="/wm_img/poco.gif" border=0></A> <A title=Yahoo书签 jhref="javascript:location.href='http://myweb2.search.yahoo.com/myresults/bookmarklet?u='+encodeURIComponent(location.href)+'&t='+encodeURIComponent(document.title)"><IMG

alt=Yahoo书签 src="/wm_img/yahoo.gif" border=0></A> <A title=新浪

href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:'')d.getSelection?d.getSelection():'');void(vivi=window.open('http://vivi.sina.com.cn/collect/icollect.php?pid=28&title='+escape(d.title)+'&url='+escape(d.location.href)+'&desc='+escape(t),'vivi','scrollbars=no,width=480,height=480,left=75,top=20,status=no,resizable=yes'));vivi.focus();"><IMG

alt=新浪ViVi src="/wm_img/vivi.gif" border=0></A> <A title=365Key网摘

href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:'')d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();"><IMG

alt=365Key网摘 src="/wm_img/365key.gif" border=0></A> <A title=天极网摘

href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:'')d.getSelection?d.getSelection():'');void(yesky=window.open('http://hot.yesky.com/dp.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t)+'&st=2','yesky','scrollbars=no,width=400,height=480,left=75,top=20,status=no,resizable=yes'));yesky.focus();"><IMG alt=天极网摘 src="/wm_img/yesky.gif" border=0></A> <A title=和讯网摘

href="javascript:t=document.title;u=location.href;e=document.selection?(document.selection.type!='None'?document.selection.createRange().text:'')document.getSelection?document.getSelection():'');void(open('http://bookmark.hexun.com/post.aspx?title='+escape(t)+'&url='+escape(u)+'&excerpt='+escape(e),'HexunBookmark','scrollbars=no,width=600,height=450,left=80,top=80,status=no,resizable=yes'));"><IMG

alt=和讯网摘 src="/wm_img/hexun.gif" border=0></A> <A

href="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:'')d.getSelection?d.getSelection():'');void(live=window.open('https://favorites.live.com/quickadd.aspx?marklet=1&mkt=en-us&url='+escape(d.location.href)+'&title='+escape(d.title)+'&top=1','live','scrollbars=no,status=no,resizable=yes'));live.focus();"><IMG

alt="Windows Live" src="/wm_img/live.gif" border=0></A> <A

# m8 O* S9 j2 f+ l2 @: U$ N$ ~3 y4 B5 m) `' U

title=鼠标选中部分作为描述,提交到diglog.com

onclick="javascript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:'')d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.diglog.com/submit.aspx?title='+escape(d.title)+'&url='+escape(d.location.href)+'&description='+escape(t),'keyit','scrollbars=yes,width=500,height=500,left=65,top=20,status=no,resizable=yes'));keyit.focus();"

href="javascript://"><IMG alt="提交新发现,Dig it" src="/wm_img/digit.gif"

border=0></A> <!-- 添加网摘结束 --><INPUT onclick=javascript:window.external.addFavorite(window.location.href,document.title) type=button value=" 加入收藏夹 " name=add>

其他调用:

<!------------------------------------站内新闻调用 ------------------------------------>

<UL class=***>

{dede:mynews row='7' titlelen='30'}

<LI><a href="[field:arcurl /]" target=_blank>[field:title /]</a></LI>

{/dede:mynews}

</UL>

<!------------------------------------圈子调用 ------------------------------------>

{dede:group row="8" orderby='threads'}

[field:groupname/]

{/dede:group}

<!------------------------------------友情链接调用 ------------------------------------>"

图片调用:{dede:flink type='image' row='1' col='9' titlelen='22'/}

文字调用:{dede:flink type='text' row='2' col='9' titlelen='24'/}

[<!------------------------------------热门TAG调用 ------------------------------------>

{dede:hotwords num='20' subday='30'/}

<!------------------------------------获取Phpwind论坛的最新主题贴子调用 ------------------------------------>

{dede:loop table='pw_threads' sort='tid' row='8' if=''}<br>

<a href="/bbs/read.php?tid=[field:tid/]"> ·[field:subject function="cn_substr('@me',30)"/]

([field:lastpost function="date('m-d H:M','@me')"/])</a> <br/>

{dede:loop}

-----------------------------------文章图片幻灯片显示 ------------------------------------>

<script language='javascript'>

linkarr = new Array();

picarr = new Array();

textarr = new Array();

var focus_width=240;

var focus_height=180;

var text_height=24;

var pics = "";

var links = "";

var texts = "";

var swf_height = focus_height+text_height;

var defJpeg = "{dede:global name='cfg_phpurl'/}/img/jpeg.jpg";

{dede:arclist type='image' att='3' row='5' function='FormatScript(@me)'}

linkarr[[field:global name=autoindex/]] = "[field:arcurl/]

picarr[[field:global name=autoindex/]] = "[field:picname/]

textarr[[field:global name=autoindex/]] = "[field:title/]";

{/dede:arclist}

    for(i=1;i<picarr.length;i++){

if(picarr.indexOf("jpg")==-1 && picarr.indexOf("JPG")==-1) picarr = defJpeg;

if(pics=="") pics = picarr;

else pics += "|"+picarr;

}

for(i=1;i<linkarr.length;i++)

if(links=="") links = linkarr;

else links += "|"+linkarr;

}

for(i=1;i<textarr.length;i++){

if(texts=="") texts = textarr;

else texts += "|"+textarr;

}

document.write('<object

classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase=http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0

width="'+ focus_width +'" height="'+ swf_height +'">');

document.write('<param name="allowScriptAccess" value="sameDomain"><param name="movie" value="{dede:global name='cfg_templeturl'/}/img/slide.swf">');

document.write('<param name="quality" value="high"><param name="bgcolor" value="#ffffff">');

document.write('<param name="menu" value="false"><param name=wmode value="opaque">');

document.write('<param name="FlashVars" value="pics='+pics+'&links='+links+'&texts='+;

texts+'&borderwidth='+focus_width+'&borderheight='+focus_height+'&textheight='+text_height+'">');

document.write('<embed src="{dede:global name='cfg_templeturl'/}/img/slide.swf" )

wmode="opaque" FlashVars="pics='+pics+'&links='+links+'&texts='+texts+'&borderwidth='+

focus_width+'&borderheight='+focus_height+'&textheight='+text_height+'" menu="false" bgcolor="#ffffff" quality="high"

width="'+ focus_width +'" height="'+ focus_height +'" allowScriptAccess="sameDomain"

type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />')

document.write('</object>'

</script>

DedeCms系统的模板是非固定的,用户可以在新建栏目时可以自行选择栏目模板,官方仅提供最基本的默认模板,即是内置系统模型的各个模板,由于 DedeCms支持自定义频道模型,用户自定义新频道模型后,还需要按该模型的字段设计一套新的模板,此外,DedeCms也支持使用风格的形式使用模 板,默认风格是 default,它表示系统默认使用 cmspath/templets/default 这个文件夹的模板,如果你下载了一套新的模板,你可以不必要删除 default 原有的文件,把下载的模板文件夹命名你想要的风格名称,如 style2 等,然后在后台修改了默认的模板风格名称为 style2 ,那系统将使用 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
  功能:会员后台的模板。

  四、二次开发

  DedeCms主要的模板解析类是 include/inc_arcpart_view.php、include/inc_arclist_view.php、include /inc_archives_view.php,这些类是与pub_dedetag.PHP一起工作的,如果你想为文档模板、列表模板、板块模板增加一些 功能,可以直接修改这几个类的ParseTemplet()或ParseTempletsFirst()这类的方法,把标记名称,属性对应试相应该的功能 函数即时。

   织梦模板标记简介

  在了解DedeCms的模板代码之前,了解一下织梦模板引擎的知识是非常有意义的。织梦模板引擎是一种使用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。

  织梦内容管理系统模板标签代码参考

  【Arclist 标记】 
  这个标记是DedeCms最常用的一个标记,也叫自由列表标记,其中 hotart、coolart、likeart、artlist、imglist、imginfolist、specart、autolist 这些标记都是由这个标记所定义的不同属性延伸出来的别名标记。 
  功能说明:获取指定的文档列表适用范围:封面模板、列表模板、文档模板。 
  基本语法:
  {dede:arclist typeid='' row='' col='' titlelen='' infolen=''imgwidth='' imgheight='' listtype='' orderby='' keyword=''}
  底层模板(InnerText){/dede:arclist} 
  属性说明:
  [1] typeid='' 表示栏目ID,在列表模板和档案模板中一般不需要指定,在封面模板中允许用","分开表示多个栏目;
  [2] row='' 表示返回文档列表总数;
  [3] col='' 表示分多少列显示(默认为单列);
  [4] titlelen='' 表示标题长度;
  [5] infolen='' 表示内容简介长度;
  [6] imgwidth='' 表示缩略图宽度;
  [7] imgheight='' 表示缩略图高度;
  [8] type='' 表示档案类型,其中空值、不使用这个属性或type='all'时为普通文档
  § type='commend'时,表示推荐文档,等同于 {dede:coolart}{/dede:coolart}
  § type='image'时,表示必须含有缩略图片的文档,等同于{dede:imglist} {/dede:imglist}、{dede:imginfolist}{/dede:imginfolist}
  § type='spec'时,表示专题,等同于标记{dede:specart}{/dede:specart}
  以上属性值可以联合使用,如: type='commend image' 表示推荐的图片文档
  [9] orderby='' 表示排序方式,默认值是 senddate 按发布时间排列。 
  § orderby='hot' 或 orderby='click' 表示按点击数排列
  § orderby='pubdate' 按出版时间排列(即是前台允许更改的时间值)
  § orderby='sortrank' 按文章的新排序级别排序(如果你想使用置顶文章则使用这个属性)
  § orderby='id' 按文章ID排序
  § orderby='postnum' 按文章评论次数排序
  § orderby='rank' 随机获得指定条件的文档列表
  [10] orderway='' 值为 desc 或 asc ,指定排序方式是降序还是顺向排序,默认为降序。
  [11] keyword='' 表示含有指定关键字的文档列表,多个关键字用","分开
  [12] channelid='' 表示特定的频道模型ID,内置的频道:专题(-1)、文章(1)、图集(2)、Flash(4)、软件(3)
  [13] limit='起始,结束' 表示限定的记录范围,row属性必须等于"结束 - 起始",MySQL的limit语句是由0起始的,如 “limit 0,5”表示的是取前五笔记录,“limit 5,5”表示由第五笔记录起,取下五笔记录,使用了本属性后,row属性将无效。
  [14] att='数值' 表示自定义属性值
  [15] subday='天数' 表示在多少天以内的文档,通常用于获取指定天数的热门文档、推荐文档、热门评论文档等
  [16] partsort='排列位数' 表示自动获得父栏目的所有子数中排列在第几位的栏目ID,标记为{dede:autolist}{/dede:autolist} 时,使用本属性才有效。 
  底层模板字段:
  ID(同 id),title,iscommend,color,typeid,ismake,description(同 info),writer,shorttitle,memberid
  pubdate,senddate,arcrank,click,litpic(同 picname),typedir,typename,
  arcurl(同 filename),typeurl,stime(pubdate 的"0000-00-00"格式),
  textlink,typelink,imglink,image 
  其中:
  textlink = <a href='arcurl'>title</a>
  typelink = <a href='typeurl'>typename</a>
  imglink = <a href='arcurl'><img src='picname' border='0' width='imgwidth' height='imgheight'></a>
  image = <img src='picname' border='0' width='imgwidth' height='imgheight'> 
  字段调用方法:[field:varname/]
  如:{dede:arclist infolen='100'}
  [field:textlink/]
  <br>
  [field:info/]
  <br>
  {/dede:arclist} 
  注:底层模板里的Field实现也是织梦标记的一种形式,因此支持使用PHP语法,Function扩展等功能
  如:给当天发布的内容加上 (new) 标志
  [field:senddate runPHP='yes'] 
  $ntime = time();
  $oneday = 3600 * 24;
  if(($ntime - @me)<$oneday) @me = "<font color='red'>(new)</font>";
  else @me = "";
  [/field:senddate]


  【Field 标记】

  功能说明:用于获取特定栏目或档桉的字段值及常用的环境变量值
  适用范围:封面模板、列表模板、文档模板
  (1)基本语法
  {dede:field name='字段名'/}
  (2) 系统分配的field
  板块模 板:PHPurl,indexurl,indexname,templeturl,memberurl,powerby,webname,specurl 
  列表模 板:position,title,PHPurl,templeturl,memberurl,powerby,indexurl,indexname,specurl, 栏目表dede_arctype的所有字段
  其中 position 为 “栏目一 > 栏目二” 这样形式的链接,title则为这种形式的标题 
  文档模 板:position,PHPurl,templeturl,memberurl,powerby,indexurl,indexname,specurl,id(同 ID,aid)
  (3) 文档所有内容字段
  档案dede_archives表 和 附加表的所有字段。

  【Channel 标记】

  功能说明:用于获取栏目列表 
  适用范围:封面模板、列表模板、文档模板 
  (1)基本语法
  {dede:channel row='' type=''}
  自定义样式模板(InnerText)
  {/dede:channel} 
  (2)属性 
  [1] row='数字' 表示获取记录的条数(通用在某级栏目太多的时候使用,默认是 8) 
  [2] type = top,sun/son,self 
  type='top' 表示顶级栏目
  type='son' 或 'sun' 表示下级栏目
  type='self' 表示同级栏目 
  其中后两个属性必须在列表模板中使用。 
  (3)底层模板变量 
  ID,typename,typedir,typelink(仅表示栏目的网址) 
  例:
  {dede:channel type='top'}
  <a href='[field:typelink /]'>[field:typename/]</a> 
  {/dede:channel} 
  注:在没有指定typeid的情况下,type标记与模板的环境有关,如,模板生成到栏目一,那么type='son'就表示栏目一的所有子类

  【Type 标记】别名 onetype

  功能说明:表示指定的单个栏目的链接
  适用范围:封面模板、列表模板、文档模板
  (1)语法 {dede:type typeid=''}{/dede:type}
  (2)属性 typeid='栏目ID'
  (3)底层模板变量 
  typename,typelink(仅表示栏目的网址)

  【Autochannel 标记】

  功能说明:表示指定排序位置的单个栏目的链接
  适用范围:封面模板、列表模板、文档模板
  (1)语法 {dede:autochannel partsort=''}{/dede:autochannel}
  (2)属性 partsort='栏目所在的排序位置'
  (3)底层模板变量 
  typename,typelink(仅表示栏目的网址)

  【Mytag 标记】

  功能说明:用于获取自定义宏标记的内容 
  适用范围:封面模板、列表模板、文档模板 
  (1)基本语法 
  {dede:mytag typeid='' name='' ismake=''/} 
  (2)属性 
  [1] typeid = '数字' 表示栏目ID,默认为 0,在没有设定的栏目没有定义这个名称的标记,会按如下搜索方式来搜索“先向上查找父栏目 -> 通用标记(typeid=0)的同名标记”。 
  [2] name = '' 标记名称。 
  [3] ismake = yes|no 默认为 no 表示mytag里的内容不包含其它封面模板的标记,yes则表示标记内容含有其它封面模板标记。

  【Vote 标记】

  功能说明:用于获取一组投票表单 
  适用范围:封面模板 
  (1) 基本语法
  {dede:vote id='投票ID' lineheight='22'
  tablewidth='100%' titlebgcolor='#EDEDE2'
  titlebackground='' tablebgcolor='#FFFFFF'}
  {/dede:vote} 
  注:本标记直接生成投票的HTML表单,为了让你更方便修改其样式,建议在后台->投票管理的地方直接复制生成的HTML代码来使用。

  【Flink 标记】,等同 friendlink

  功能说明:用于获取友情链接 
  适用范围:封面模板 
  (1)基本语法 
  {dede:flink type='' row='' col='' titlelen='' tablestyle=''}{/dede:flink}
  (2)属性
  [1]type:链接类型,值:
  a. textall 全部用文字显示
  b. textimage 文字和图得混合排列
  c. text 仅显示不带Logo的链接
  d. image 仅显示带Logo的链接
  -------------------------------------
  [2]row:显示多少行,默认为4行
  [3]col:显示多少列,默认为6列
  [4]titlelen:站点文字的长度
  [5]tablestyle: 表示 <table 这里的内容>

  【Mynews 标记】


  功能说明:用于获取站内新闻 
  适用范围:封面模板 
  (1) 基本语法 
  {dede:mynews row='条数' titlelen='标题长度'}Innertext{/dede:mynews}
  (2)属性
  [1] row 新闻条数
  [2] titlelen 标题长度
  (3)底层模板变量
  [field:title/]、[field:writer/]、
  [field:senddate function="strftime('%y-%m-%d %H:%M',@me)"/](时间)、[field:body/]

  【LOOP 标记】

  功能说明:用于调用任意表的数据,一般用于调用论坛贴子之类的操作
  适用范围:所有模板
  (1) 基本语法
  {dede:loop table=' sort='' row='' if=''} 
  底层模板
  {dede:loop} 
  (2) 属性
  [1] table 表示查询的数据表
  [2] sort 用于排序的字段
  [3] row 返回结果的条数
  [4] if 查询条件
  (3)底层模板变量
  这个标记的底层模板变量即是被查询表的所有字段
  例:获取DZ论坛的最新主题贴 子:amp;amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {dede:loop&amp;nbsp;table='pw_threads'&amp;nbsp;sort='tid'&amp;nbsp;row='8'&amp;nbsp;if=''}&amp;lt;br&amp;gt;
            &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;a&amp;nbsp;href="/bbs/read.PHP?tid=[field:tid/]"&amp;gt;&amp;nbsp;·[field:subject&amp;nbsp;function="cn_substr('@me',30)"/]&amp;nbsp;
            &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;([field:lastpost&amp;nbsp;function="date('m-d&amp;nbsp;H:M','@me')"/])&amp;lt;/a&amp;gt;&amp;nbsp;&amp;lt;br/&amp;gt;
            &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{dede:loop}


  【Channelartlist 标记】

  功能说明:用于获取当前频道的下级栏目的内容列表 
  适用范围:封面模板

  (1)基本语法
  {dede:channelArtlist typeid=0 col=2 tablewidth='100%'}
  <table width="99%" border="0" cellpadding="3" cellspacing="1" bgcolor="#BFCFA9">
  <tr>
  <td bgcolor="#E6F2CC">
  {dede:type}
  <table border="0" cellpadding="0" cellspacing="0" width="98%">
  <tr>
  <td width='10%' align="center"><img src='[field:global name='cfg_plus_dir'/]/img/channellist.gif' width='14' height='16'></td>
  <td width='60%'>
  <a href="[field:typelink /]">[field:typename /]</a>
  </td>
  <td width='30%' align='right'>
  <a href="[field:typelink /]">更多...</a>
  </td>
  </tr>
  </table>
  {/dede:type}
  </td>
  </tr>
  <tr>
  <td height="150" valign="top" bgcolor="#FFFFFF">
  {dede:arclist row="8"}
  <a href="[field:arcurl /]">[field:title /]</a><br>
  {/dede:arclist}
  </td>
  </tr>
  </table>
  <div style='font-size:2px'> </div>
  {/dede:channelArtlist} 
  除了宏标记外,channelArtlist 是唯一一个可以直接嵌套其它标记的标记,不过仅限于嵌套 
  {dede:type}{/dede:type} 和 {dede:arclist}{/dede:arclist} 两个标记。 
  (2) 属性
  [1]typeid=0 频道ID,默认的情况下,嵌套的标记使用的是这个栏目ID的下级栏目,如果你想用特定的栏目,可以用","分开多个ID。 
  [2]col=2 分多列显示 
  [3]tablewidth='100%' 外围表格的大小

  【List 标记】


  功能说明:表示列表模板里的分页内容列表 
  适用范围:仅列表模板 list_*.htm

  (1)基本语法
  {dede:list col='' titlelen='' 
  infolen='' imgwidth='' imgheight='' orderby='' pagesize=''}{/dede:list} 
  (2)属性
  [1]col 内容列数
  [2]titlelen 标题长度
  [3]infolen 内容摘要长度
  [4]imgwidth 缩略图宽
  [5]imgheight 缩略图高
  [6]orderby 排序方式,有效的排序方式有 senddate、pubdate、id、click、lastpost、postnum ,默认为 sortrank 
  [7]pagesize 分页大小

  (3)底层模板变量 
  ID(同 id),title,iscommend,color,typeid,ismake,description(同 info),postnum,lastpost,shorttitle
  pubdate,senddate,arcrank,click,litpic(同 picname),typedir,typename,
  arcurl(同 filename),typeurl,stime(pubdate 的"0000-00-00"格式),
  textlink,typelink,imglink,image

  注:list标记除了支持档案表的基本模板变量外,还支持附加表的字段,你可以在模型管理中知道附加表支持列表使用的字段有哪些。

  【Page 标记】


  功能说明:表示分页页面的附加参数 
  适用范围:列表模板 
  语法: {dede:page pagesize="每页结果条数"/} 
  注:此标记在dedecms3.1中已经过期,dedecms3.1中直接把 pagesize属性加在 list 标记中,表示记录分页大小。

  【Pagelist 标记】


  功能说明:表示分页页码列表 
  适用范围:列表模板

  (1)语法
  {dede:pagelist listsize='3' listitem=''/} 
  (2)属性 
  [1] listsize 表示 [1][2][3] 这些项的长度 x 2 
  [2] listitem 表示页码样式,可以把下面的值叠加
  index  首页
  pre 上一页
  pageno 页码
  next 下一页
  end 末页
  option 下拉跳转框

  例: {dede:pagelist listsize='3' listitem='index pre pageno next end option'/}

  【Pagebreak 标记】

  功能说明:表示文档的分页链接列表。
  适用范围:仅文档模板。 
  语法:{dede:pagebreak/}

  【Prenext 标记】

  功能说明:表示获取文档“上一篇/下一篇”的链接列表。
  适用范围:仅文档模板。 
  语法:{dede:prenext/}

  注:此标记默认为横向排列,如果你想用竖向排列,可以用
  {dede:prenext function="str_replace('   下一篇:','<'.'br'.' />下一篇:',@me)"/} 表示

  【Pagetitle 标记】

  功能说明:表示获取文档的分页标题
  适用范围:仅文档模板。 
  (1)语法:{dede:pagetitle style='select'/}
  (2)属性:style 表示分页标题的展示样式
  select 表示下拉框、link 表示文字直接链接

  【Fieldlist 标记】


  功能说明:获得附加表的所有字段信息。
  适用范围:仅文档模板。 
  语法:
  {dede:fieldlist}
  [field:name/] : [field:value/] <br>
  {/dede:fieldlist}

下面我们就开始增加这个小扩展,我们知道在V5.3中织梦的标签已经分离出来,也就是类似于arclist这样的标签可以自己修改或者二次开发,程序这些 标签存放的目录在/include/taglib文件夹下面,我们可以看那个文件名,就很容易知道这些标签文件名和标签的对应关系。
那我们现在需 要修改的是{dedesql/}这个标签,那我们就修改sql.lib.php这个文件。
打开后我们找到第34行,也就是代码
$ctp->LoadSource($Innertext);
处, 在下面加上以下一段代码:
$GLOBALS['autoindex'] = 0;
这段代码就是定义一个全局变量,并赋值为0,接下来我们 只需要将下面代码进行下修改:
while($row = $dsql->GetArray($thisrs))
{
$sqlCt++;
foreach($ctp->CTags as $tagid=>$ctag){
   if(!empty($row[$ctag->GetName()])){ $ctp->Assign($tagid,$row[$ctag->GetName()]); }
}
$GLOBALS['autoindex']++; //每循环一次加上一个1然后解析出来
$revalue .= $ctp->GetResult();
}
这样一来,这个 [field:global.autoindex/]标签就可以在那个{dede:sql/}中使用了,我们举个例子:
{dede:sql sql='select * from [url=mailto:dede_archives]dede_archives'[/url]}
[field:global.autoindex/]-[field:title/]</br>
{/dede:sql}
怎 么样?很简单吧,其实这种扩展还有很多很多,自己可以试试哦。

跨站脚本攻击

首先打开文件:/include/common.func.php
在文件中加入函数

 


function RemoveXSS($val{
   $val preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/'''$val);

   $search 'abcdefghijklmnopqrstuvwxyz';
   $search .'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
   $search .'1234567890!@#$%^&*()';
   $search .'~`";:?+/={}[]-_|\'\\';
   for ($0$strlen($search); $i++{
      $val preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i'$search[$i], $val);
      $val preg_replace('/(&#0{0,8}'.ord($search[$i]).';?)/'$search[$i], $val);
   }

   $ra1 = array('javascript''vbscript''expression''applet''meta''xml''blink''link''style''script''embed''object''iframe''frame''frameset''ilayer''layer''bgsound''title''base');
   $ra2 = array('onabort''onactivate''onafterprint''onafterupdate''onbeforeactivate''onbeforecopy''onbeforecut''onbeforedeactivate''onbeforeeditfocus''onbeforepaste''onbeforeprint''onbeforeunload''onbeforeupdate''onblur''onbounce''oncellchange''onchange''onclick''oncontextmenu''oncontrolselect''oncopy''oncut''ondataavailable''ondatasetchanged''ondatasetcomplete''ondblclick''ondeactivate''ondrag''ondragend''ondragenter''ondragleave''ondragover''ondragstart''ondrop''onerror''onerrorupdate''onfilterchange''onfinish''onfocus''onfocusin''onfocusout''onhelp''onkeydown''onkeypress''onkeyup''onlayoutcomplete''onload''onlosecapture''onmousedown''onmouseenter''onmouseleave''onmousemove''onmouseout''onmouseover''onmouseup''onmousewheel''onmove''onmoveend''onmovestart''onpaste''onpropertychange''onreadystatechange''onreset''onresize''onresizeend''onresizestart''onrowenter''onrowexit''onrowsdelete''onrowsinserted''onscroll''onselect''onselectionchange''onselectstart''onstart''onstop''onsubmit''onunload');
   $ra array_merge($ra1$ra2);

   $found = true;
   while ($found == true{
      $val_before = $val;
      for ($0$sizeof($ra); $i++{
         $pattern '/';
         for ($0$strlen($ra[$i]); $j++{
            if ($0{
               $pattern .'(';
               $pattern .'(&#[xX]0{0,8}([9ab]);)';
               $pattern .'|';
               $pattern .'|(&#0{0,8}([9|10|13]);)';
               $pattern .')*';
            }
            $pattern .= $ra[$i][$j];
         }
         $pattern .'/i';
         $replacement substr($ra[$i], 02).'<x>'.substr($ra[$i], 2);
         $val preg_replace($pattern$replacement$val);
         if ($val_before == $val{
            $found = false;
         }
      }
   }
   return $val;
}

 

 

1. <p> 

2. 搜索 <strong class="fc_03c">{dede:global name='keyword'/}</strong> 的结果 

3.     </p> 

修改为:

 

1. <p> 

2.      搜索 <strong class="fc_03c">{dede:global name='keyword' function='RemoveXSS(@me)'/}</strong> 的结果 

3.  </p> 

在DedeCMS V5.3系统中,我们很多地方需要用到SQL语句,例如批量修改(替换)内容、数据内容调用等,在系统模板中有一个专门用于调用数据的模板标签 {dede:sql/}我们可以参考帮助中心的模板标签说明学习下这个标签如何使用。 
    当然我们在使用SQL语句和学习SQL语句的之前需要对织梦的数据库结构有一个大致的了解,我们可以通过帮助中心的数据库说明,来简单的了解这些内容。

以下为引用的内容:
标签名称:sql功能说明:用于从模板中用一个SQL查询获得其返回内容适用范围:全局使用基本语法:{dede:sql sql=""}底层模板{/dede:sql}参数说明:sql="" 完整的SQL查询语句底层模板字段:SQL语句中查出的所有字段都可以用[field:字段名/]来调用 
应用实例: 
1.调用某个特定会员发布的文章内容 
{dede:sql sql='Select * from dede_archives where mid=1'} 
<a href='/plus/view.php?aid=[field:id/]' target='_blank'>[field:title/]</a> 
{/dede:sql} 
mid为用户ID 可以参考二次开发中关于dede_archives的数据表字段介绍


    接下来我们收集整理一些常用的SQL语句帮助大家一同更好的使用DedeCMS系统。 

    我们将SQL语句分为两类,功能型的和内容调用型,功能型的主要是对数据库进行常规的操作,例如{insert、update},数据调用型的操作就 (select),两种类型的SQL语句使用发放也很简单,如果是功能型的只需要在系统后台[系统]-[SQL命令运行工具]中进行使用,如果是模板标签 的数据调用类型,只需要在模板相应位置添加标签即可。

感谢以下会员crenn,cunzhangwang,tbggbt,hefa,nichelous,hw74


功能型SQL语句整理: 
功能说明:添加自定义属性 
相关语句:

以下为引用的内容:
insert into `dede_arcatt`(sortid,att,attname) values(9,'d','评论'); 
alter table `dede_archives` modify `flag` set ('c','h','p','f','s','j','a','b','d') default NULL;

功能说明:批量为作者和来源赋值 
相关语句:

以下为引用的内容:
UPDATE dede_archives SET writer='要赋的值' WHERE writer=''; 
UPDATE dede_archives SET source='要赋的值' WHERE source='';


功能说明:删除指定IP的评论 
相关语句:

以下为引用的内容:
DELETE FROM `dede_feedback` WHERE `dede_feedback`.`ip` = '000.000.000.000' 

000.000.000.000 为垃圾评论发布者的IP

功能说明:清空文章中关键字字段 
相关语句:

以下为引用的内容:
update dede_archives set keywords=''

功能说明:批量替换发布时间,入库时间,更新 时间 
相关语句:

以下为引用的内容:
第一步。在后台新增一个文章。 
得到一个时间,比如 2009-01-13 14:13:32,这可以通过管理文章那里看到。 
第二步,后台执行SQL语句SELECT * FROM dede_archives order by id DESC limit 1 
这样你可以看到你刚才新加加的文章一所有字段值。 
观察以下的数据: 
pubdate:1231846313 
senddate:1231846313 
sortrank:1231846313 
其中1231846313就是时间数据了。 
然后就是替换了。 
UPDATE dede_archives SET sortrank = 1231846313; 
UPDATE dede_archives SET senddate = 1231846313; 
UPDATE dede_archives SET pubdate = 1231846313;


功能说明:批量修改栏目为动态或者静态 
相关语句:

以下为引用的内容:
UPDATE `dede_arctype` SET `isdefault` = '-1' 动态
UPDATE `dede_arctype` SET `isdefault` = '1' 静态


功能说明:文章内容批量替换SQL语句 
相关语句:

以下为引用的内容:
update `dede_addonarticle` set body=REPLACE(body,'论坛','社区') where body like "%论坛%" 
以上SQL语句作用是查找所有文章带有“论坛”的词组,并将论坛替换为“社区”

数据调用SQL语句整理: 
标签说明:常用内容统计代码 
相关标签: 

以下为引用的内容:
·共有文章:** 篇 
{dede:sql sql="select count(*) as c from dede_archives where channel=1"}·共有文章:[field:c /]篇{/dede:sql} 
·共有图集:** 个 
{dede:sql sql="select count(*) as c from dede_archives where channel=2"}·共有图集:[field:c /]个{/dede:sql} 
·共有软件:** 个 
{dede:sql sql="select count(*) as c from dede_archives where channel=3"}·共有软件:[field:c /]个{/dede:sql} 
·共有评论:**条 
{dede:sql sql="select count(*) as c from dede_feedback"}·共有评论:[field:c /]条{/dede:sql} 
·共有会员:**名 
{dede:sql sql="select count(mid) as c from dede_member "}·共有会员:[field:c /]名{/dede:sql} 
·文章阅读:** 人次 
{dede:sql sql="select sum(click) as c from dede_archives"}文章阅读:[field:c /]人次{/dede:sql} 
·今日更新:**篇 
{dede:sql sql="SELECT count( * ) AS c FROM dede_archives WHERE pubdate > UNIX_TIMESTAMP( CURDATE( ) ) "}今日更新:[field:c /]篇{/dede:sql}
总共留言:{dede:sql sql="select count(*) as cc From dede_guestbook"}[field:cc/]{/dede:sql} 条


调用说明:调用Discuz论坛附件带图片的 贴子 
相关标签: 

以下为引用的内容:
{dede:sql sql="SELECT` cdb_p_w_uploads`.`aid`, `cdb_p_w_uploads`.`p_w_upload`,`cdb_threads`.`tid`, `cdb_threads`.`fid`, `cdb_threads`.`subject` FROM `cdb_p_w_uploads` LEFT JOIN `cdb_threads` ON `cdb_threads`.`tid`=`cdb_p_w_uploads`.`tid` WHERE `cdb_p_w_uploads`.`readperm`='0' AND `displayorder`>='0' AND `filetype`='p_w_picpath/pjpeg' GROUP BY tid LIMIT 0,2"} 
<li><A href="/bbs/viewthread.php?tid=[field:tid /]"><IMG src="/bbs/p_w_uploads/[field:p_w_upload/]"></A></li> 
<li><A href="/bbs/viewthread.php?tid=[field:tid /]">[field:subject function="cn_substr('@me',30)" /]</A></li> 
{/dede:sql}


调用说明:调用UCHOME最新日志 
相关标签:

以下为引用的内容:
{dede:sql sql="Select subject,viewnum,blogid,uid From uchome_blog order by blogid desc limit 0,8"} 
<li><A href="http://www.dedecms.com/space.php?uid=[field:uid/]&do=blog&id=[field:blogid/]">[field:subject function="cn_substr('@me',24)" /]</A></li> 
{/dede:sql}


调用说明:会员积分排行 
相关标签:

以下为引用的内容:
{dede:sql sql="Select mid,userid,uname,scores From dede_member order by scores desc limit 0,10"} 
<dd><span class="name"><a href='[field:global name='cfg_cmspath'/]/member/?[field:userid/]/'>[field:uname/]</a> 
</span><span class="jifen">积分[field:scores/]</span></dd> 
{/dede:sql}


调用说明:企业最新产品调用方法(图片+标 题) 
相关标签:

以下为引用的内容:
{dede:sql sql="SELECT a.id,a.litpic,a.title FROM dede_addonshop p left join dede_archives a on a.id = p.aid order by a.id desc LIMIT 0 , 4"} 
<li><div><a href="/plus/view.php?aid=[field:aid/]" title="[field:title/]"><img src="[field:litpic/]" alt="[field:title/]"/></a></div><a href="/plus/view.php?aid=[field:aid/]" title="[field:title/]">[field:title/]</a></li> 
{/dede:sql}


调用说明:调用最新加入企业及企业所属行业代 码到首页 
相关标签: 

以下为引用的内容:
{dede:sql sql="SELECT m.mid,m.mtype,m.userid,m.matt,c.mid,c.company,c.comface,d.ename,d.evalue,d.egroup FROM dede_sys_enum as d ,dede_member as m left join dede_member_company c on m.mid = c.mid where m.mtype ='企业' and m.matt = 1 and c.vocation=d.evalue and d.egroup='vocation' LIMIT 0 , 10"} 
[field:company/] 
[field:ename/] 
{/dede:sql}


调用说明:推荐会员(带用户头像) 
相关标签:

以下为引用的内容:
{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 = 'http://bbs.dedecms.com/attachment/upload/87/11787.gif'; 
[/field:face]" /> 
用户名:<a href='[field:global name='cfg_cmspath'/]/member/?[field:userid/]/'>[field:uname/]</a> 
{/dede:sql} 

[field:face runphp='yes'] 
if(!@me)@me = 'http://bbs.dedecms.com/p_w_picpath/post/smile/default/14.gif'; 
[/field:face] 
为用户头像图片 
[img]http://bbs.dedecms.com/attachment/upload/87/11787.gif[/img] 
是如果用户头像为空的话要显示的图像 这个大家自己改吧


调用说明:推荐企业 
相关标签: 

以下为引用的内容:
{dede:sql sql="SELECT m.ID,m.type,m.userid,m.matt,m.spacep_w_picpath,c.id,c.comname 
FROM dede_member m left join dede_member_cominfo c on m.ID = c.id 
where m.type = 1 and m.matt = 1 
LIMIT 0 , 10"} 
头像:<img src="[field:spacep_w_picpath runphp='yes'] 
if(!@me)@me = 'http://bbs.dedecms.com/p_w_picpath/post/smile/default/14.gif'; 
[/field:spacep_w_picpath]" /> 
用户名:<a href='[field:global name='cfg_cmspath'/]/member/?[field:userid/]/'>[field:comname/]</a> 
{/dede:sql}


调用说明:UCenter Home会员调用(带头像) 
相关标签:

以下为引用的内容:
{dede:sql sql="SELECT * FROM `uchome_space` WHERE `avatar` =1 LIMIT 0 , 10"} 
<a href="你安装UCenter Home的地址/space.php?uid=[field:uid/]"> 
<img src='你安装UCenter的地址/avatar.php?uid=[field:uid/]&size=[field:small/]' border='0' width='99' height='88' > 
<br /> 
[field:username/]</a> 
{/dede:sql}

另建议安装《DEDECMS自动审核文档+自动生成插件》提供的HTML自动生成插件,自动审核是最好不要! 
  方法: 
  1、打开dede目录下的archives_do.php。注:也许你的不是dede是其它,各位站长根据自己情况 
  2、在archives_do.php文件查找成功审核指定的文档 
  3、向上查看到 
  while($row = $dsql->GetArray('ckall')) 
  在其中下面增加代码$time_wx = time() - rand(0,$cfg_index_cache * 10);//add code by wind shadow 
  成为这样
  while($row = $dsql->GetArray('ckall')) 
  
  $time_wx = time() - rand(0,$cfg_index_cache * 10);//add code by wind shadow 
  4、接着向下看找到有set arcrank='0' where id='$aid'的代码,共有3处 
  在setarcrank='0'之间加入 sortrank='$time_wx',pubdate='$time_wx',senddate='$time_wx' 
  形成set sortrank='$time_wx',pubdate='$time_wx',senddate='$time_wx',arcrank='0' 形式,共有3

<!--EndFragment-->

你可能感兴趣的:(二次开发)