dedecms 怎么生成静态页面,第1张

在Dedecms系统中,

文章摘要(可以通过infolen或description相关标签调用)被设置了字数上限为250字符,设置上限的主要目的是减少数据库的冗余,保证网站良好的性能。因此,如果对简介内容不设置上限显然不合理,但是如果可以自由控制这一上限,那么将对网页内容布局带来积极作用。在网页设计过程中,往往需要在频道列表页面调用到文章摘要,如果可以有效控制文章摘要的字数,那么就可以使得页面布局很灵活。 在Dedecms中,在列表页调用文章摘要的方法主要有:

1:[field:info /]

2:[field:description /]

3:[field:info function="cn_substr(@me,字符数)"/]

4:[field:description function="cn_substr(@me,字符数)"/]

第1、2种方法是直接调用文章摘要,在调用的字数问题上,当使用[field:info /]时,可以在{dede:arclist infolen=' ' }{/dede:arclist}中,设置调用摘要的字符数(最高可设置为系统设置的250);如果使用[field:description /],则直接使用后台设置的摘要字符上限。显然,这两种方式都很被动,灵活性太差。

第3、4种方法通过function函数实现了对文章摘要显示字符的灵活调整。当然,在没有修改文章摘要内容字符上限时,这4个方法的差异并不大。但是,下面我们来说如何修改这一上限值,就可以体现出[field:description function="cn_substr(@me,字符数)"/]这一方式的重要性。

在Dedecms中,与文章摘要相关的php文件主要有:

/dede/archives_addphp

/dede/archives_editphp

/dede/article_addphp

/dede/article_editphp

/dede/article_description_mainphp

在add页面,有一句话是:“$description =

cn_substrR($description,$cfg_auot_description); ”,这句话实现了[field:description function="cn_substr(@me,字符数)"/]这一功能。因为这一语句确实有利于页面布局,因此我们在实验中没有修改。

在edit页面,有一句话是:“$description = cn_substrR($description,250); ”,这句话中出现了一个熟悉的字符数“250”,这就是系统设置的文章摘要字符数的上限值。 如果是gbk编码则显示出来的就是125个字。如果是utf-8编码则是81个字。显然,我们要突破文章摘要字符数上限,肯定得拿它开刀了。是的,这里修改“250”为其他值即可,例如“500”。

我们完成了环境的准备之后,下面就可以通过在浏览器中输入安装向导的网址开始进行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登陆,别人就不容易猜到你的后台地址。

利用模板。目前PHP的模板可以说是很多了,有功能强大的smarty,还有简单易用的smarttemplate等。它们每一种模板,都有一个获取输出内容的函数。我们生成静态页面的方法,就是利用了这个函数。用这个方法的优点是,代码比较清晰,可读性好。

这里我用smarty做例子,说明如何生成静态页:

<php

require("smarty/Smartyclassphp");

$t = new Smarty;

$t->assign("title","Hello World!");

$content = $t->fetch("templates/indexhtm");

//这里的 fetch() 就是获取输出内容的函数,现在$content变量里面,就是要显示的内容了

$fp = fopen("archives/2005/05/19/0001html", "w");

fwrite($fp, $content);

fclose($fp);

>

一、修改文件:\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+数字] 作为标签名是为了防止嵌套的时候无法正确解析标签)

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

◆DedeCms模板安装/制作概述:

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

一、概念,设计和使用模板,必须要理解下面几个概念

1、板块(封面)模板:

  指网站主页或比较重要的栏目封面频道使用的模板,一般用“index_识别IDhtm”命名,此外,用户单独定义的单个页面或自定义标记,也可选是否支持板块模板标记,如果支持,系统会用板块模板标记引擎去解析后才输出内容或生成特定的文件。

2、列表模板:

  指网站某个栏目的所有文章列表的模板,一般用 “list_识别IDhtm” 命名。

3、档案模板:

  表示文档查看页的模板,如文章模板,一般用 “article_识别IDhtm” 命名。

4、其它模板:

  一般系统常规包含的模板有:主页模板、搜索模板、RSS、JS编译功能模板等,此外用户也可以自定义一个模板创建为任意文件。

二、 命名,DedeCms模板默认命名规则如下

1、模板保存位置:

  模板目录:cmspath/templets/样式名称(英文,默认为default,其中system为系统底层模板,plus为插件使用的模板)/具体功能模板文件}

2、 模板文件命名规范:

(1)index_识别IDhtm: 表示板块(栏目封面)模板;

(2)list_识别IDhtm: 表示栏目列表模板;

(3)article_识别IDhtm: 表示内容查看页(文档模板,包括专题查看页);

(4)searchhtm: 搜索结果列表模板;

(5)indexhtm: 主页模板;

注解:[识别ID]可以在“频道模型管理”的地方获得,当然,你也可以在“频道模型管理”的地方确定某个频道的模板命名。

例:list_imagehtm 表示是就是内容类型为集的栏目默认列表模板。

  article_articlehtm 表示的是文章查看页模板。

三、其它模板说明

1、默认底层模板

位置: cmspath/templets/system

功能:在没有指定标记的默认底层模板的时候,系统将自动调用这个文件夹的相应文件作为底层模板。

2、插件目录模板

位置: cmspath/templets/plus

功能:评论、友情链接、RSS地图等模板。

3、会员后台模板

位置: cmspath/member/templets

功能:会员后台的模板。

四、二次开发

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

希望能帮到你

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » dedecms 怎么生成静态页面

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情