dedecms模板怎么安装?求dedecms模板的详细安装步骤?

dedecms模板怎么安装?求dedecms模板的详细安装步骤?,第1张

一、修改文件:\include\taglib目录下的channellibphp,请将以下代码全部复制替换上述文件

<php

function lib_channel(&$ctag,&$refObj)

{

    global $_sys_globals,$envs,$dsql;

    $attlist = "typeid|0,reid|0,row|100,col|1,type|son,currentstyle|";

    FillAttsDefault($ctag->CAttribute->Items,$attlist);

    extract($ctag->CAttribute->Items, EXTR_SKIP);

    $innertext = $ctag->GetInnerText();

        $cacheid = trim($cacheid);

    if($cacheid !='') {

        $likeType = GetCacheBlock($cacheid);

        if($likeType != '') return $likeType;

    }

    $reid = 0;

    $topid = 0;

    if(empty($typeid) && $envs['typeid']!=0)

    {

        $typeid = $envs['typeid'];

        $reid = $envs['reid'];

    }else{

        $reid=0;

    }

    if($type==''||$type=='sun') $type="son";

    if($innertext=='') $innertext = GetSysTemplets("channel_listhtm");

    if($reid==0 && $typeid>0)

    {

        $dbrow = $dsql->GetOne("Select reid From dede_arctype where id='$typeid' ");

        if(is_array($dbrow)) $reid = $dbrow['reid'];

    }

    $likeType = '';

    if($type=='top')

    {

        $sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description

          From dede_arctype where reid=0 And ishidden<>1 order by sortrank asc limit 0,$row";

    }

    else if($type=="son")

    {

        //if($_sys_globals['typeid']>0) $typeid = $_sys_globals['typeid'];

        if($typeid==0) {

            return '';

        }

        $sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description

          From dede_arctype where reid='$typeid' And ishidden<>1 order by sortrank asc limit 0,$row";

    }

    else if($type=="self")

    {

        if($reid==0) {

            return '';

        }

        $sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description

            From `dede_arctype` where reid='$reid' And ishidden<>1 order by sortrank asc limit 0,$row";

    }

    //And id<>'$typeid'

    $needRel = false;

    $dtp2 = new DedeTagParse();

    $dtp2->SetNameSpace("field","[","]");

    $dtp2->LoadSource($innertext);

    $dsql2 = clone $dsql;

    $dsql->SetQuery($sql);

    $dsql->Execute();

    $line = $row;

        //检查是否有子栏目,并返回rel提示(用于二级菜单)

    if(ereg(':rel', $innertext)) $needRel = true;

   

    if(empty($sql)) return '';

    $dsql->SetQuery($sql);

    $dsql->Execute();

   

    $totalRow = $dsql->GetTotalRow();

    $GLOBALS['autoindex'] = 0;

    for($i=0;$i < $line;$i++)

    {

        if($col>1) $likeType = "<dl>\r\n";

        for($j=0;$j<$col;$j++)

        {

            if($col>1) $likeType = "<dd>\r\n";

            if($row=$dsql->GetArray())

            {

                            $row['sonids'] = $row['rel'] = '';

                if($needRel)

                {

                    $row['sonids'] = GetSonIds($row['id'], 0, false);

                    if($row['sonids']=='') $row['rel'] = '';

                    else $row['rel'] = " rel='dropmenu{$row['id']}'";

                }

                //处理同级栏目中,当前栏目的样式

                if( ($row['id']==$typeid || ($topid==$row['id'] && $type=='top') ) && $currentstyle!='' )

                {

                    if($currentstyle!='')

                    {

                    $linkOkstr = $currentstyle;

                    $row['typelink'] = GetOneTypeUrlA($row);

                    $linkOkstr = str_replace("~rel~",$row['rel'],$linkOkstr);

                    $linkOkstr = str_replace("~id~",$row['id'],$linkOkstr);

                    $linkOkstr = str_replace("~typelink~",$row['typelink'],$linkOkstr);

                    $linkOkstr = str_replace("~typename~",$row['typename'],$linkOkstr);

                    $likeType = $linkOkstr;

                    }

                }else

                {

                    $row['typelink'] = $row['typeurl'] = GetOneTypeUrlA($row);

                    if(is_array($dtp2->CTags))

                    {

                        foreach($dtp2->CTags as $tagid=>$ctag){

                            if(isset($row[$ctag->GetName()]))

                            {

                                $dtp2->Assign($tagid,$row[$ctag->GetName()]);

                            }

                            elseif (preg_match('/^sonchannel[0-9]$/',$ctag->GetName()))

                            {

                                $dtp2->Assign($tagid,lib_channel_son($ctag,$row['id'],$dsql2));

                            }

                        }

                    }

                    $likeType = $dtp2->GetResult();

                }

            }

            if($col>1) $likeType = "</dd>\r\n";

            $GLOBALS['autoindex']++;

        }//Loop Col

        if($col>1)

        {

            $i += $col - 1;

            $likeType = "    </dl>\r\n";

        }

    }//Loop for $i

    reset($dsql2);

    $dsql->FreeResult();

    return $likeType;

}

function lib_channel_son($ctag,$typeid = 0,$dsql2)

{

    $attlist = "row|100,col|1,currentstyle|";

    FillAttsDefault($ctag->CAttribute->Items,$attlist);

    extract($ctag->CAttribute->Items, EXTR_SKIP);

    $innertext = $ctag->GetInnerText();

    $dsql3 = clone $dsql2;

    $likeType = '';

    //if($_sys_globals['typeid']>0) $typeid = $_sys_globals['typeid'];

    if($typeid==0) {

        return '';

    }

    $sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath,description

          From dede_arctype where reid='$typeid' And ishidden<>1 order by sortrank asc limit 0,$row";

    //And id<>'$typeid'

    $dtp2 = new DedeTagParse();

    $dtp2->SetNameSpace("field","[","]");

    $dtp2->LoadSource($innertext);

    $dsql2->SetQuery($sql);

    $dsql2->Execute();

    $line = $row;

    for($i=0;$i < $line;$i++)

    {

        if($col>1) $likeType = "<dl>\r\n";

        for($j=0;$j<$col;$j++)

        {

            if($col>1) $likeType = "<dd>\r\n";

            if($row=$dsql2->GetArray())

            {

                $row['typelink'] = $row['typeurl'] = GetOneTypeUrlA($row);

                if(is_array($dtp2->CTags))

                {

                    foreach($dtp2->CTags as $tagid=>$ctag){

                        if(isset($row[$ctag->GetName()]))

                        {

                            $dtp2->Assign($tagid,$row[$ctag->GetName()]);

                        }

                        elseif (preg_match('/^sonchannel[0-9]$/',$ctag->GetName()))

                        {

                            $dtp2->Assign($tagid,lib_channel_son($ctag,$row['id'],$dsql3));

                        }

                    }

                }

                $likeType = $dtp2->GetResult();

            }

            if($col>1) $likeType = "</dd>\r\n";

        }//Loop Col

        if($col>1)

        {

            $i += $col - 1;

            $likeType = "    </dl>\r\n";

        }

    }//Loop for $i

    reset($dsql3);

    $dsql2->FreeResult();

    return $likeType;

}

>

二、在模板调用

实例:

{dede:channel type='son' typeid='改成你的大栏目ID'}

              [field:typename/]

                    <ul>

                    [field:sonchannel0]

                    <li><a href="[field:typelink/]">[field:typename/]</a></li>

                         [field:sonchannel1]

                        <li><a href="[field:typelink/]">---[field:typename/]</a></li>

                             [field:sonchannel2]

                            <li><a href="[field:typelink/]">===[field:typename/]</a></li>

                                [field:sonchannel3]

                                <li><a href="[field:typelink/]">===[field:typename/]</a></li>

                                 [/field:sonchannel3]

                             [/field:sonchannel2]

                         [/field:sonchannel1]

                    [/field:sonchannel0]

                    </ul>

 {/dede:channel}

模板调用    [field:sonchannel0] [/field:sonchannel0] 这个是用来取子栏目用的(使用[sonchannel+数字] 作为标签名是为了防止嵌套的时候无法正确解析标签)

这个的作用就是当你的栏目有很多子栏目 无限分级的时候方便你取子栏目的。

函数TestPurview($n)虽然,看上去只是一个相对比较简单的函数,但是这个函数是非常非常重要的,试想一下如果一个系统中没有检验某个用

户是否有权限操作某些功能的话,那么,这个系统一定非常危险,因为,随便一个人都可以操作某个功能,例如,进入后台,删除栏目,删除数据库等,就如同一个

家四周都没有墙一样,随便什么人都可以进入,这样的家完全就是公共场合,完全没有什么安全可言,一个系统也是如此。

所以,检测系统函数就比较重要了,当然,光这个一个函数还不够,不光要检验用户的使用权限,还要检验用户密码,是不是管理员,甚至是用户登录ip等,都要检验一下,这样才可以称得上安全的系统。

本函数在“管理员登陆类”userloginclassphp里面的第一个函数就是它,返回的值是true或false,若有权限则返回trure否则返回false。

通过教程“织梦中cookie和session的应用”我们知道了,当我们登录后台后,织梦系统会把登录的用户信息写入session里面,并把session存放在/data/session文件夹里面。

因为不同的用户登录后台,产生的session是不一样的,我就在后台注册一个发布员,用户名为fby。并且,在后台定义“信息发布员”的权限如下图所示。

登录/注册后可看大图

我整理了一下“信息发布员”的权限如下:

列出授权栏目(t_AccList)

发布授权文档(a_AccNew)

列出授权文档(a_AccList)

列出我发布的文档(a_MyList)

修改我发布的文档(a_MyEdit)

删除我发布的文档(a_MyDel)

更改个人密码(sys_MdPwd)

评论管理(sys_Feedback)

管理我的上传(sys_MyUpload)

当我用fby用户名登录后,在data/session/文件夹里面,生成一个名为sess_3vtlqpg0pnlmc63pd5ai86gl16 的 session 。这个session里面的内容如下所示。

securimage_code_value|s:4:"npll";

dede_admin_id|s:1:"8";

dede_admin_type|s:1:"1";

dede_admin_channel|s:0:"";

dede_admin_name|s:3:"fby";

<font color="Blue">dede_admin_purview|s:107:"t_AccList

a_AccNew a_AccList a_MyList a_MyEdit a_MyDel sys_MdPwd sys_Feedback

sys_MyUpload plus_留言簿模块 ";</font>

dede_admin_style|s:10:"newdedecms";

复制代码

如果我们以超级管理员,也就是最高级别的身份登录后台后,我们同样得到类似的如下内容。

securimage_code_value|s:4:"2gsf";

dede_admin_id|s:1:"1";

dede_admin_type|s:2:"10";

dede_admin_channel|s:1:"0";

dede_admin_name|s:5:"admin";

<font color="Blue">dede_admin_purview|s:15:"admin_AllowAll ";</font>

dede_admin_style|s:10:"newdedecms";

复制代码

当登录后,这些是如何生成的?这个我们在上面提到了,以前的教程已经详细讲解了,其实,就是通过“管理员登陆类”userloginclassphp里面的函数来实现的,当然,不只是这个文件。

我们分析上面这些,完全就是为了函数TestPurview($n)作准备的,好了,现在我们来分析一下这个用户权限检验函数。

函数:

function TestPurview($n)

{

$rs = FALSE;

$purview = $GLOBALS['cuserLogin']->getPurview();

if(preg_match('/admin_AllowAll/i',$purview))

{

return TRUE;

}

if($n=='')

{

return TRUE;

}

if(!isset($GLOBALS['groupRanks']))

{

$GLOBALS['groupRanks'] = explode(' ',$purview);

}

$ns = explode(',',$n);

foreach($ns as $n)

{

//只要找到一个匹配的权限,即可认为用户有权访问此页面

if($n=='')

{

continue;

}

if(in_array($n,$GLOBALS['groupRanks']))

{

$rs = TRUE; break;

}

}

return $rs;

}

复制代码

通过getPurview()方法,我们从session得到了dede_admin_purview里面的值,因

为,$GLOBALS['cuserLogin']是实例化“登录类”的对像,而这个登录类的构造函数,在我们实例化时,已经把session里面的值赋

给了$this->userPurview,代码如下所示。

$this->userID = $_SESSION[$this->keepUserIDTag];

$this->userType = $_SESSION[$this->keepUserTypeTag];

$this->userChannel = $_SESSION[$this->keepUserChannelTag];

$this->userName = $_SESSION[$this->keepUserNameTag];

$this->userPurview = $_SESSION[$this->keepUserPurviewTag];

$this->adminStyle = $_SESSION[$this->keepAdminStyleTag];

复制代码

从上面代码我们就不难发现$this->userPurview=$_SESSION['dede_admin_purview'],即

t_AccList a_AccNew a_AccList a_MyList a_MyEdit a_MyDel sys_MdPwd

sys_Feedback sys_MyUpload plus_留言簿模块这些值,明白了这一点,这个TestPurview($n)就简单多了。

1、条件判断:

if(preg_match('/admin_AllowAll/i',$purview))

{

return TRUE;

}

复制代码

如果我们用的是管理员登录,那么,$_SESSION['dede_admin_purview']的值等于admin_AllowAll,返回true,所以,这句代码就是判断是不是管理登录。

2、条件判断

if($n=='')

{

return TRUE;

}

复制代码

若参数为空,直接返回true,也就是说,只要不提供功能参数,就认为是可以操作的,所以,这一点要注意了,如果你不小心,忘记写参数,那么,很可能本想过虑掉的用户结果没有过虑掉,这是非常危险的,所以,这个最好有个提示,有个对话框,这样可以提醒管理员。

3、把登录的后台的用户的权限,例如,本例子中的“信息发布员”权限$_SESSION['dede_admin_purview'],转换成数组存放到全局变量$GLOBALS['groupRanks']里面,以备下面之用。

if(!isset($GLOBALS['groupRanks']))

{

$GLOBALS['groupRanks'] = explode(' ',$purview);

}

复制代码

4、把功能参数转换成数组:$ns = explode(',',$n);

5、遍历:foreach($ns as

$n),就是把传递过来的功能参数,通过in_array($n,$GLOBALS['groupRanks'])这个函数进行对比,看一下$n里面的有

没有存功能在数组$_SESSION['dede_admin_purview']里面。例如:本例子信息发布员的权限在上我们已经知道了

有:t_AccList a_AccNew a_AccList a_MyList a_MyEdit a_MyDel sys_MdPwd

sys_Feedback sys_MyUpload plus_留言簿模块这些值。

如果$n是:a_AccNew,t_New,经过上面一个遍历,我们发现,其中a_AccNew在数

组$GLOBALS['groupRanks'],函数立马跳出来,返回一个true,也就是说织梦的这个函数,只要$n里面有一个是

与$GLOBALS['groupRanks']里面的值一样,

就可以操作这个页面。而不需要全部都在$GLOBALS['groupRanks']里面才可以操作这个页面。

当然,你可以根据自己需要,直接严格匹配,只有全部都在登录用户的权限里面才可以操作页面。这个功能也简单,只要作如下更改:

if(!in_array($n,$GLOBALS['groupRanks']))

{

$rs = FALSE; break;

}

复制代码

也就是把$n参数里面的值判断一下,只要有一个不在登录用户的权限里面,就返回false,退出操作。

我们完成了环境的准备之后,下面就可以通过在浏览器中输入安装向导的网址开始进行DedeCMS的安装,在安装完成之后我们就可以看到我们的站点。

我们下载下来通常是一个压缩包,将其解压,然后将upload文件夹中的文件上传到网站的根目录中。

提示:安装包解压后,一般含有使用协议、安装说明及版本说明几个文件,新人在第一次使用的时候希望阅读下相关的说明。

1我们在浏览器中打开http://你的网址/install/indexphp ,开始进行安装。

2选中“我已经阅读并同意此协议”点击继续,这里系统跳转到环境检测页面。

这里我们对系统环境做一个简单的说明:

DedeCMS是基于PHP和MySQL技术开发,可以同时使用在Windows、Linux、Unix平台,其具体环境如下:

◆Windows 平台 IIS/Apache + PHP4/PHP5 + MySQL3/4/5

如果在windows环境中使用,建议用DedeCms提供的DedeAMPZ套件以达到最佳使用性能。

◆Linux/Unix 平台 Apache + PHP4/PHP5 + MySQL3/4/5 (PHP必须在非安全模式下运行) 建议使用平台 Linux + Apache22 + PHP52 + MySQL50

◆PHP必须环境或启用的系统函数 [√]allow_url_fopen [√]GD扩展库

[√]MySQL扩展库 [√]系统函数(phpinfo、dir)

2如果环境检测全部正确([√]),我们点击“继续”进入“参数配置”

3首先我们配置“数据库设定”部分的参数,这里我们涉及到几个概念“数据库主机”、“数据库名称”、“数据库用户”、“数据库密码”、“数据表前缀”、“数据库编码”。

如果您使用的是虚拟主机或者合租服务器,一般空间商都会提供给你相关的数据,如果你是自己配置服务器或者本地测试,一般在环境架设时候会有相关的信息提示。

以 DedeAMPZ为例,因为Apache和MySQL共同安装在一台计算机上,所以数据库主机地址为“localhost”,数据库名称我们这是设置为默 认“dedecmsv53”,数据库用户名为“root”、密码为MySQL数据库默认密码“123456”,表前缀为“dede_”。

说 明:数据表前缀是为了方便一个数据库中存放多个程序的数据库,例如你一个数据库需要安装两个DedeCMS系统,第一个系统数据表前缀可以设置为 “dedea_”,第二个数据表可以设置为“dedeb_”,因为表前缀不同,数据表在数据库中存在的表名也不相同,例如第一个系统的管理员账号存放的数 据表则为“dedea_admin”,第二个数据表名为“dedeb_admin”,这样他们两个系统的数据库就可以共存在一个Mysql数据库中。

4网站设置中需要注意的是填写你的“网站网址”和“CMS安装目录”,其中“CMS安装目录”如果你安装在网站根目录不需要去理会,如果你安装在根目录的某个文件夹下需要进行相关的设置(程序会自动检测)。

5点击“继续”,完成DedeCMS的安装,到这里为止,我们的安装已经完成了,下面就是我们开始使用DedeCMS

6点击[登陆网站后台],网址自动转向到http://wwwyoursitecom/dede/loginphp(yoursite代表你的网站),输入我们安装时候填写的管理员用户名和密码,以超级管理员身份登陆系统。

提示:系统默认管理路径是dede,登陆管理后台可以通过地址http://wwwyoursitecom/dede/loginphp进行访问,但是为了确保系统的安全,建议新人在安装完成之后修改后台的管理路径,例如:myadmin,这样你可以通过http://wwwyoursitecom/myadmin/loginphp登陆,别人就不容易猜到你的后台地址。

织梦调用栏目的标签{dede:type typeid=''}[field:typename/]{/dede:type}。

IIS/Apache + PHP4/PHP5 + MySQL3/4/5 如果在windows环境中使用,建议用DedeCMS提供的DedeAMPZ套件以达到最佳使用性能。

这个才是栏目至于[field:arcurl/]这个表示的调用文章的路径,{dede:arclist row='12' titlelen=48 typeid='all' } ,表示的是调用全站的12篇文章,另外的也是这样的啊,把typeid换栏目自身的id就不会一样,还有可以调用全站随机的文章也会不一样就是在{dede:arclist row='12' titlelen=48 typeid='all' orderby='rand' } 就是随机调用文章了。

扩展资料:

1、Windows 平台

IIS/Apache + PHP4/PHP5 + MySQL3/4/5 如果在windows环境中使用,建议用DedeCMS提供的DedeAMPZ套件以达到最佳使用性能。

2、Linux/Unix 平台

Apache + PHP4/PHP5 + MySQL3/4/5 (PHP必须在非安全模式下运行) 建议使用平台:Linux+ Apache22 + PHP52 + MySQL50

3、PHP必须环境或启用的系统函数

allow_url_fopen GD扩展库 MySQL扩展库 系统函数 —— phpinfo、dir

4、基本目录结构

/ 根目录在安装可选模块时需设定可写入文件和创建目录的权限

/install 安装程序目录,安装完后可删除[安装时必须有可写入权限]

/dede 默认后台管理目录(建站后建议修改)

/include 类库文件目录

/plus 附助程序目录

/member 会员目录

/images 系统默认模板存放目录

/uploads 默认上传目录[必须可写入]

/a默认HTML文件存放目录[必须可写入]

/templets 系统默认内核模板目录

/data 系统缓存或其它可写入数据存放目录[必须可写入]

/special 专题目录[生成一次专题后可以删除special/indexphp,必须可写入]

5、PHP环境容易碰到的不兼容性问题

(1) data目录没写入权限,导致系统session无法使用,这将导致无法登录管理后台(直接表现为验证码不能正常显示);

(2) php的上传的临时文件夹没设置好或没写入权限,这会导致文件上传的功能无法使用;

(3) 出现莫名的错误,如安装时显示空白,这样能是由于系统没装载mysql扩展导致的,对于初级用户,可以下载dede的php套件包,以方便简单的使用。

-织梦

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » dedecms模板怎么安装?求dedecms模板的详细安装步骤?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情