设为首页收藏本站关注微信<<< 抵制 IE6 人人有责 >>>
搜索
热搜: 活动 交友 discuz
查看: 2164|回复: 5
打印 上一主题 下一主题

[dedecms] dedecms专题模板应用分析及解决方案

[复制链接]
跳转到指定楼层
楼主
发表于 2014-3-4 00:24:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DeDeCms的专题相关信息bbs上相对较少,之前查阅了很多资料都未找到其解决方案

无柰只有靠自己动手丰衣足食;在官方的版本上有这样的一段话:
1、文章列表用ID1,ID2,ID3这样形式分开,系统会自动排除不同节点的相同文章;
2、关于单条记录模板里的[field:fieldname /]标记的使用,请参考关于系统帮助关于 arclist 标记的说明;
3、节点ID是节点的唯一标识,允许在专题模板中用{dede:specnote id='标识'/}这样来表示单个节点。
4、正常的情况下,每个节点显示的是“节点文章列表”里的文档,如果你指定为“自动获取模式”,那么必须指定关键字和栏目ID。
可是经测试{dede:specnote id='标识'/}这个并没有升效;因此开始解决这个,以替换掉原来比较死板{dede:field name='note'/}标签;
举例说明:
我要分两栏显示不同节点的文章,目前用"note"就不能实现,只能是同一节点分栏,难免就显得有些捌扭,不够灵活。
下面我就把自己解决方案写下供同学们参考,首先得申明一点,只能是实现了功能,可算法不一定是最好的,因为我不太熟悉DEDECMS代码且没有认真的研究过,希望大家海涵!
步骤1:
文件位置:{include/inc_archives_view.php}

代码如下:

  1. //广告标记
  2. //-----------------------
  3. else if($ctag->GetName()=="myad"){
  4. $this->dtp->Assign($tagid,$this->PartView->GetMyAd($typeid,$ctag->GetAtt("name")));
  5. }
  6. // 专题标识
  7. // by phpfans
  8. else if($ctag->GetName()=="specnote"){
  9. $this->dtp->Assign($tagid,$this->ChannelUnit->GetSpecList('',$this->ChannelUnit->specrule,$ctag->GetAtt("id")));
  10. }
复制代码



  介绍:{在广告标记下增加专题标识}这样专题文章列表页就可以识别specnote标签了

步骤2:
文件位置:{include/inc_channel_unit.php}
  1. var $specrule;
  2. //-------------
  3. //php5构造函数
  4. //-------------
复制代码


介绍:增加了对$pecrule变量的定义

步骤3:
文件位置:{include/inc_channel_unit.php}

代码如下:

  1. else if($ftype=="specialtopic"){
  2. $this->specrule = $fvalue;
  3. $fvalue = $this->GetSpecList($fname,$fvalue);
  4. }
复制代码


介绍:这儿增加了$this->specrule = $fvalue;这句,以便获取addonspec表的note字段数据;
步骤4:
  文件位置:{include/inc_channel_unit.php}

代码如下:

  1. //获得专题文章的列表
  2. //--------------------------------
  3. function GetSpecList($fname,$noteinfo,$noteid="")
  4. {
  5. if(!isset($GLOBALS['__SpGetArcList'])) require_once(dirname(__FILE__)."/inc/inc_fun_SpGetArcList.php");
  6. if($noteinfo=="") return "";
  7. $rvalue = "";
  8. $tempStr = GetSysTemplets("channel/channel_spec_note.htm");
  9. $dtp = new DedeTagParse(); </p> <p></p> <p>$dtp->LoadSource($noteinfo);
  10. if(is_array($dtp->CTags))
  11. {
  12. foreach($dtp->CTags as $k=>$ctag){
  13. $notename = $ctag->GetAtt("name");
  14. if($noteid!="" && $ctag->GetAtt("noteid")!=$noteid){ continue; } //指定名称的专题节点
  15. if($noteid!="" && $ctag->GetAtt("noteid")===$noteid) {
  16. $isauto = $ctag->GetAtt("isauto");
  17. $idlist = trim($ctag->GetAtt("idlist"));
  18. $rownum = trim($ctag->GetAtt("rownum"));
  19. if(empty($rownum)) $rownum = 40;
  20. $keywords = "";
  21. $stypeid = 0;</p> <p>if($isauto==1){
  22. $idlist = "";
  23. $keywords = trim($ctag->GetAtt("keywords"));
  24. $stypeid = $ctag->GetAtt("typeid");
  25. }</p> <p>if(trim($ctag->GetInnerText())!="") $listTemplet = $ctag->GetInnerText();
  26. else $listTemplet = GetSysTemplets("spec_arclist.htm");
  27. $idvalue = SpGetArcList($this->dsql,
  28. $stypeid,$rownum,$ctag->GetAtt("col"),
  29. $ctag->GetAtt("titlelen"),$ctag->GetAtt("infolen"),
  30. $ctag->GetAtt("imgwidth"),$ctag->GetAtt("imgheight"),
  31. "all","default",$keywords,$listTemplet,100,0,$idlist);</p> <p>$notestr = str_replace("~notename~",$notename,$tempStr);
  32. $notestr = str_replace("~spec_arclist~",$idvalue,$notestr);
  33. $rvalue .= $notestr;
  34. if($noteid!="" && $ctag->GetAtt("noteid")==$noteid){ break; }
  35. }
  36. }
  37. }
  38. $dtp->Clear();
  39. return $rvalue;
  40. }
复制代码



介绍:有些小改动,自己对比一下就清楚了,这儿就不再哆嗦了
步骤5:
说明: 原{dede:field name='note'/}标签失效了,如果要用的朋友请自行修改步骤四部份。。
很简单的;
完工!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享淘帖
回复

使用道具 举报

沙发
 楼主| 发表于 2014-3-4 00:26:48 | 只看该作者
DedeCMS专题功能使用详细教程

一个网站通常会在不同时期推出一些针对性的专题内容,专题的功能其实就是将站点的内容根据特定的需求进行一次检索,将这些不同形式的内容进行一次整合,这个我们可以看看一些大的门户网站,例如新浪、搜狐,他们有自己的专题频道。一个专题可以包含几个不同栏目的内容或者包含不同内容模型如:文章、图片、音频、视频等,不同的专题需要有自己符合当时环境的页面风格,比如在元旦、新年就需要红色主题的专题模板,在春天、夏天就需要绿色主题的专题模板等。一个好的专题容易让网站会员更全面的了解相关信息,以增强对网站的关注度,下面我们介绍如何使用DedeCMS的专题功能来制作一个专题。

我们以超级管理员身份登陆后台,在系统的[核心]-[专题管理]中对专题进行管理。

因为这里的常用管理同文档管理类似,一些常用操作如添加、删除、更新、推荐这些操作在这里不做冗述,本教程主要介绍如何通过专题结合模板文件制作出自己的专题页面。

制作一个专题页面,需要准备2样东西:内容、模板,当然如果你没有自己设计的模板文件,系统默认是自带了一套专题页的风格的,可以在后台[核心]-[内容模型管理],点击专题类型的模板会查看到以下内容:


文档模板:/templets/default/article_spec.htm [修改]

列表模板:/templets/default/list_spec.htm [修改]

频道封面模板:/templets/default/index_spec.htm [修改]


这几个默认模板文件用户可以自己进行全局统一修改,但一般情况下都是在添加专题时在常规参数的“专题模板”中进行指定。

当然有一些专题也不必用到已经发布在内容管理系统中的内容,这种专题直接可以用静态页面就可以完成,不需要标签进行调用,但又希望在专题列表中显示出来,为了解决这个问题,建议用户在制作专题页时候把专题页面做成一个不含标记的模板文件,在添加专题时候指定模板即可。

接下来我们介绍下织梦的专题功能是如何划分的。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?免费注册

x
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2014-3-4 00:27:10 | 只看该作者

我们以chinaz两个专题页面为例:

DedeCms V5.3经典解析与揭秘(http://www.chinaz.com/zt/dedecms/

大家可以看出来admin5的专题是使用了统一的专题模板生成的,这种专题只需要网站管理员选择组织好网站专题内容,然后发布即可呈现出这类的网站专题。而chinaz的专题使用了独立的模板文件,这样使得专题更有特色,阅读效果更为明显。

DedeCMS自带了专题页面的模板文件能够满足大部分人对专题的要求,下面我们来介绍如何使用默认的模板文件来创建一个专题。

以超级管理员身份登陆系统后台,进入专题管理页面,点击或者进入专题添加页面。

在常规参数中添加专题的专题名称、责任编辑、专题说明、关键字、主分类,接下来进入“专题文档”选项卡来选择相关专题节点的内容。

在添加之前我们先明白一个概念:节点。

所谓节点就是一个专题中相同分类内容的一个组合,如下图中,有2个节点:Coreldraw 9 速成教程、Coreldraw 9 教程总汇,每个节点选取了系统中一些文章。

添加以上两个节点在系统设置中可以通过2种方式进行添加,第一种就是指定文章列表,在单个节点中“选择节点文章”,这种方式比较精确的指定专题节点的内容,在节点内容少量的情况下是首选。第二种就是自动获取文档的方式,这种方式只需要输入节点的“关键字”即可自动搜索出含有关键词文章的内容添加到内容列表中。

这样一来我们就完成了专题内容的添加,以这样的形式发布一个专题,其专题页面的样式是系统默认的系统样式,接下来我们就来介绍如何使用专题模板标签来制作特殊的专题页。

首页制作专题的模板页面需要了解基本的织梦模板引擎的一些概念,需要知道什么是模板引擎,织梦的一些模板标记的使用,这里如果您会使用arclist标记基本上就可以制作属于自己的专题模板。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?免费注册

x
回复 支持 反对

使用道具 举报

地板
 楼主| 发表于 2014-3-4 00:27:29 | 只看该作者

专题涉及到的模板文件有2个文件:

/templets/default/article_spec.htm 专题模板文件,这个模板决定你的网站专题页面的样式,是制作模板页面必备的文件

/templets/system/channel_spec_note.htm系统底层的专题节点模板,在制作节点的时候需要对其进行一定的修改

这两个文件是决定你专题样式的模板重要文件,当然这里还有一个底册模板(innertext),这个底层模板在每个节点处都可以单独指定。

这里还需要用户知道的一个专题节点的模板标签:{dede:field.note noteid=‘识别ID’/},这个标签是用来生成专题页面的文档列表的。

设计专题页面模板

我们首先用网页制作相关工具来设计一个专题页面的模板文件,当然我们这里因为是做一个示例,重点是讲解如何从页面到模板文件这个过程,所以模板文件的样子比较简单,如果是专业的美工人员,可以设计出各式各样专业的模板文件。

我这里只是在网页制作工具中使用Dreamweaver制作出一个专题模板的样子,专题主要分为2个部分,专题内容简介以及节点文章,当然这里专题的内容简介我已经固化在了专题模板文件中,用户也可以使用模板标签{dede:field name=‘description’/},然后在后台添加专题简介中完成。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?免费注册

x
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2014-3-4 00:27:52 | 只看该作者

加入专题页模板标签

从上面的内容我们知道,织梦的模板需要在页面中加入织梦模板标签后才能完成制作,接下来我们来加入模板标签。在加标签之前,我们先将上面设计出来的模板文件保存为:

/templets/default/article_spec2_templets.htm,保存完成以后我们可以修改这个页面,加入标签,使其变成专题页面的模板。

首先我们加入常用标签:{dede:field.title/}_{dede:global.cfg_webname/}

这个标签是加入在模板文件和之前,用于解析成为专题标题的,{dede:field.title/}代表是你在后台添加的专题名称,{dede:global.cfg_webname/}指的是你的网站名称,经过织梦的系统解析后成为:DedeCMS V5.3相关内容专题_织梦非官方演示站点

当然,在seo方面可以在和之间加入以下代码





这个代码就是将你在添加专题时候设置的关键字以及专题说明添加进页面。

接下来最重要的就是专题节点部分的添加了,因为节点部分主要是列表,所以涉及到一个底层模板(innertext)的概念,底层模板在织梦的标签语法简介中已经有相关说明。

(模板标签语法简介:http://help.dedecms.com/v53/archives/templets/start/

因为我们从模板文件中可以找出单挑记录循环的内容为:



站长学院dedecms列表页title优化方法


所以我们根据arclist的相关标记可以得到底层模板(innertext):



[field:typename/][url=[field:arcurl /]][field:title /][/url]



这个底层模板我们在添加节点的时候可以进行指定

接下来我们在节点部分加入节点标签{dede:field.note noteid=‘标识’/},因为我们这里有2个节点名称,标识ID分别为: use(使用介绍)、exp (体验说明),所以我们替换模板页面中循环部分:



使用介绍
{dede:field.note noteid=‘use’/}


这样一来,我们的专题模板就制作完成了,我们将其另存文件名为:

/templets/default/article_spec2.htm,这个文件就是我们的专题模板文件。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?免费注册

x
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2014-3-4 00:28:40 | 只看该作者

修改节点容器模板

在我们上面设计的模板中,有2个节点,因为我们其中有一部分内容已经固化在模板中,所以如果直接发布内容,会出现多出了节点标题的情况,一个节点生成为页面的时候,DedeCMS会读取他的节点容器模板,所以我们需要对节点容器模板进行一些修改,我们打开/templets/system/channel_spec_note.htm这是默认的节点容器模板。



~notename~






    ~spec_arclist~






这里需要介绍2个标记:~notename~和~spec_arclist~

~notename~ 节点的名称,在系统解析时候会在节点中将这个标签解析为当前设置的名称

~spec_arclist~ 节点内容列表,系统读取底层模板文件,并解析成节点设置的内容同这个标记进行替换

这个节点容器解析后的内容再同{dede:field.note noteid=‘标识’/}标记进行替换,完成模板的解析,所以我们在这里需要对其进行一些修改,因为前面设计时候的节点名称已经固化在模板文件中,所以这里不涉及到这部分的内容。我们只要将冗余部分的代码去除,直接使之变为:


~spec_arclist~


如果不想影响到其他模板文件的使用我们将其另存为:

/templets/system/channel_spec_note_dedecms.htm

我们在添加专题时候可以独立设置为:

至此我们完成了专题页面模板文件的制作,接下来做的只需要像上面所说的一样,直接选取相应的内容添加节点发布即可。

织梦的专题功能还有更为强大的功能,需要我们织梦的用户去用心体会,本文中已经较为全面介绍了如何使用专题功能,文章中设计到的一些文件可以在附件中下载,页面演示可以查看:http://www.dedemo.cn/news/cms/2008/1231/640.html


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?免费注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

QQ|手机版|Archiver|源于生活(个人生活娱乐工作的笔记)css3,html5,学习笔记    

GMT+8, 2024-4-27 21:37 , Processed in 0.218400 second(s), 27 queries .

Powered by Mr.Kevin-ying

© 2004-2015

快速回复 返回顶部 返回列表