TurboCMS.Java资料标准模板制作指南.doc

上传人:一*** 文档编号:2692745 上传时间:2020-04-29 格式:DOC 页数:35 大小:1.91MB
返回 下载 相关 举报
TurboCMS.Java资料标准模板制作指南.doc_第1页
第1页 / 共35页
TurboCMS.Java资料标准模板制作指南.doc_第2页
第2页 / 共35页
点击查看更多>>
资源描述

《TurboCMS.Java资料标准模板制作指南.doc》由会员分享,可在线阅读,更多相关《TurboCMS.Java资料标准模板制作指南.doc(35页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、.*TurboCMS内容管理系统(Java版本) 模 板 制 作 指 南北京泰得文通科技有限公司修订时间:2010年7月.*TurboCMS2009的模板制作(频道部分)一、概述TurboCMS是一个基于模板的内容管理系统,整个系统的使用流程如下图:XxXxXxHTML文件xxxxxxxxxxxx 表单数据库录入保存生成模板l 用户通过WEB表单录入信息l 表单中的信息被保存在数据库中的一条记录中l 某一个频道的所有信息构成了一张表,有多个频道,则数据库中可能有多个表存在。l 内容中的数据结合模板生成HTML文件。从上面的过程可以看出,每个频道需要定义一个表单,以及一个模板。模板定义了数据呈现

2、的形式,模板中定义的字段通常同表单中的字段是一一对应的。表单数据库中的表模板三者间的关系如下图:xxxxxxxxxxxx XxXxXx表单模板数据库中的表频道的表单可以使用系统提供的表单定义工具生成,而模板则必须要手工制作,本文主要介绍模板的制作。1、从什么地方定义模板所谓模板,在TurboCMS中其实是一个普通的HTML文件,它定义了所有用这个模板生成的HTML文件的大致表现形式,包括布局、字体、颜色、风格等信息。以管理员身份登陆TurboCMS,将会看到一个“模板”视图,其中保存的就是网站的模板文件。“模板”视图其实是“文件夹”视图的一个快截方式,专门管理/templates目录。我们建议

3、将所有的模板文件都保存在这里,如果一定要放在其他目录的话,也是允许的。如果要编辑模板文件,请首先选中某个模板文件,然后鼠标右键,选择“Notepad”,以源代码的方式编辑模板文件。在这个非常类似于Windows的Notepad的环境中,可以以源代码的方式编辑模板文件,并在其中插入定义模板专用的脚本。最后将文件保存下来便成为模板。2、模板和模板脚本模板一方面定义了最终的HTML文件的形式和风格,另一方面还定义了数据如何呈现在最终的HTML文件中。模板中的HTML定义的是形式和风格,而其中的脚本则定义了数据的呈现。当站点中的一个频道的所有信息被发布时,系统构造了一个数据环境,然后将频道中的一条记录

4、取出来,并放到数据环境中去,接下来将模板放到数据环境中去,解释执行其中的脚本,最后将所有的输出写入到HTML文件。系统依次处理所有的记录,每处理一条记录就执行一遍上面的这个过程。我们引入一种新的语言(TDL,Template Define Language)来定义模板中的数据输出。它是一种脚本语言,使用Java作为运行脚本,暴露了若干对象供脚本访问,以实现脚本中的灵活控制。模板中的TDL脚本用两个特殊符号分隔:。这两个符号之间的内容被当成TDL脚本处理,其他的内容原样地输出到HTML文件中去。请注意这里的分隔符与Java中的分隔符的区别。一段模板中的TDL脚本例: 也支持表达式直接输出,等同于

5、。模板中的TDL脚本是Java脚本,任何合法的Java代码都是被允许的。关于Java的语法基础,可以参考Java技术部分。在TDL脚本中,除了可以使用标准的Java代码之外,还可以访问系统提供的几个固有对象,用其同数据环境打交道,取出需要的数据。这几个对象分别是:System,ThisDocument,ThisChannel,ThisSite,ThisPage,ThisPageColumn,ThisColumn,ThisMagazine,ThisIssue,Response。本文中对这几个对象将进行详细的说明。二、TDL编程1、网站规划在讲解TDL编程前我们先来介绍一下网站规划的步骤,以便理解

6、模板的作用。某栏目的最新几条(头条信息)hotnewshotnewshotnewshotnews导航栏站点首页带摘要的top 10带摘要的top 10带摘要的top 10inc文件文章n文章1子栏目导航栏频道一首页频道二首页频道三首页子频道一首页子频道二首页文章标题列表.带摘要的top 10带摘要的top 10.文章3文章2文章1目录页(可能分页)当前频道top 5由上图可以看出,当一篇文章提交到某个频道后,有三种文件需要生成或修改:1、文章本身的HTML页面(文章内容页)2、频道的封面页3、上级频道以及首页中的top列表(通过inc文件体现)因此,有三种模板脚本存在:1、文章内容页模板2、封

7、面页模板3、附带发布的模板也即是说,对每一个频道,需要制作三个模板文件,其中的附带发布模板是可选的。2、文章内容页模板制作前面我们说过,TDL的脚本中可以访问若干个内置对象。所谓内置对象,是指不需要申明就可以直接访问的Class对象。文章内容页的模板制作需要访问的两个主要的内置对象是 Response和Document。Response对象的目的在于从TDL中输出,Document对象的主要作用是访问上下文中当前处理的文章的各字段的值。Document对象是最主要的对象,脚本通过它来取得当前数据环境中的数据,它只有三个方法.2.1 Document对象的方法Item(field Name)获取

8、字段fieldName的值,返回字段值,是一个对象例:String Name,Sex,Age;Name = (String)ThisDocument.Item(“Name”);Sex = (String)ThisDocument.Item(“Sex”);Age = (String)ThisDocument.Item(“Age”);如果确信调用会返回的是一个对象,则应该申明相应的对象来进行调用,例:java.util.Vector pageall = (java.util.Vector)ThisDocument.Item(pages);参数fieldName表示字段名,他们同频道的表单定义中为字

9、段取的名字是一样的。推荐全部使用英文做字段名。在使用Document的Item 方法返回字段值时应当确信字段名是在频道的表单定义中确实定义好了的,并且名称拼写没有错误。除了可以访问表单定义时定义的字段以外,有几个字段是始终可以访问的,他们是:l Id,当前数据环境中的那条记录在整个系统中的唯一编号l Title,内容的标题l Author,提交这条内容的用户的用户名l SubmitDate,这条内容的提交时间l Url,当前记录在生成HTML文件后,这个文件在系统中的URL,是绝对路径,如/site1/news/news3498.html Content,当前记录的正文字段。Title标题和C

10、ontent正文是不论在表单定义中是否定义,在内容提交时系统均会要求输入的两个字段,所以可以放心地访问这两个字段。l PageNum,如果一条记录的正文内容有多页,则每一页都将生成一个独立的HTML文件,在模板中不用担心,Content字段始终返回的是当前页的内容,而PageNum则返回当前页的页号,页号是从1开始的。l PrevPage,如果正文有多页,则PrevPage返回前一页的那个文件的URL,如果当前页是1,则这个字段返回空串。l NextPage,如果正文有多页,则NextPage返回下一页的那个文件的URL,如果当前页是最后一页,则这个字段返回空串。l CMSPIC,文章的图片字

11、段l CMSWLINK,文章的文件连接字段l CMSSUMMARY,文章的摘要字段l Pages,如果正文有多页,则Pages字段返回所有页的集合。特别注意的是,集合在Java中是一个对象,因此需要使用定义一个Vector来取得。集合中保存的是每一页的URL。输出所有页的一个目录的代码如下:!-%/内容页分页 最新 n 页 第 n 页String pPage, nPage;java.util.Vector pageall = (java.util.Vector)ThisDocument.Item(pages);Response.Output( 最新 + pageall.size()

12、+ 页 );for(int i=0;ipageall.size();i+)String Page = (String)pageall.get(i);if(Integer.parseInt(String)ThisDocument.Item(pageNum)=i)Response.Output( 第 + (i+1) + 页 );elseResponse.Output( 第 + (i+1) + 页 );%-如果不知道一条内容到底有无可能有分页,则最好在输出下一页的连接前先判断一下,如下:!-%/内容页分页 前一页 后一页String pPage, n

13、Page;pPage = (String)ThisDocument.Item(PrevPage);nPage = (String)ThisDocument.Item(NextPage);if(!pPage.equals()Response.Output(<<前一页    );if(!nPage.equals()Response.Output(后一页>>);%-注意,所有对字段的名称都是大小写无关的,即ThisDocument.Item(“Content”)与ThisDocument.Item(“CONTENT”)是等效的。2.2

14、Document对象的方法public Vector RelativeArticles(int lngCount, String RelDefine)RelativeArticles方法返回当前文章的相关文章。返回的是一个Link对象组成的向量。参数 lngCount为返回的条数。如果大于实际的条数,则只返回实际的条数。参数RelDefine为“相关文章”的名,请使用空串来表示缺省的相关文章。public Channel DocumentChannel() 返回当前文章所在的频道对象。public String DocumentSource() 返回当前文章的文章来源。Response对象负责

15、内容的输出,通常用来直接将字段的值输出到HTML文件。Response对象有两个方法:l Output(txtText),将txtText输出到HTML文件中去。l Clear,取消所有已经有的输出,将输出缓冲清空。模板文件中有普通的HTML以及模板脚本,普通的HTML将直接输出到缓冲区,脚本将被解释执行,脚本中也可以通过调用Output将文本输出到缓冲区。当模板文件结束时,缓冲区中的内容就被输出到HTML文件中去了。注意Clear方法除了将清除所有用Output输出的内容外,还将清除所有的已经在缓冲中的普通HTML内容。3、封面页模板的制作频道的封面页制作中的主要任务在于列出频道内所有文章的

16、标题和连接。这个列表支持分页显示,可以定义每页仅显示多少条。TDL解释器将只把当前页的文章返回。封面页制作需要访问的对象为Channel,它也是一个内置对象。另外,还可能涉及到类TOC和Link,这两个类是不能直接访问的,一定是通过对象Channel的属性返回的。Channel对象的属性和方法:l Top(x)方法,返回当前频道的最新文章,是Document对象的集合,例:!-%/头条新闻Response.Output(n);java.util.Vector vt=ThisChannel.Top(5);for(int i=0;ivt.size();i+)Document aDoc = (Doc

17、ument)vt.get(i);Response.Output( + aDoc.Item(TITLE) + n);Response.Output(n);%-l TopEx(x)方法,同上,但包含子频道中的文章l Name属性,频道名l Path属性,频道的全名。因频道可为树形结构,Path属性返回从顶级频道开始的路径,形式为:/root/parent/name,例:/教程和文档/web3dl SubChannels方法,返回一个Channel对象的集合,但是这些Channel对象的TOC属性均是空的。例:java.util.Vector vt=ThisChannel.SubChannels()

18、;for(int i=0;ivt.size();i+)Channel pChannel = (Channel)vt.get(i);Response.Output(pChannel.Name);l SubNavigateChannels方法,返回一个Channel对象的集合,不包含已关闭的频道l TOC属性,是一个comTOC对象,保存了有关目录的属性。l CoverPage属性,返回当前频道的封面页的地址。TOC对象的属性有:l AllLinks属性,返回一个Link对象的集合,表示了当前频道的所有文章(实际上只包含当前页的内容)l NextPage,一个串,目录页可分页,如果有下一页,则Ne

19、xtPage是下一页文件的URL。系统自动为每一页生成文件名,规则是在设定的目录页文件名后加上数字表示页号,第一页不带页号。如 toc.htm,toc_2.htm,toc_3.htm。l PrevPage,上一页。如果没有上一页,则返回空串。l AllPages,返回一个Link对象的集合,表示所有的页。l Pages,整数,一共有多少页Link对象的属性:l Title,连接的标题l Url,连接的地址。l Author,作者l SubmitDate,提交日期在封面页模板中,首先输出当前页文章标题及连接的TDL代码例:!-%/文章列表Response.Output(n);java.util.

20、Vector vc = ThisChannel.TOC.AllLinks;for(int i=0;ivc.size();i+)Link aLink = (Link)vc.get(i);Response.Output();Response.Output( + aLink.Title + );Response.Output(n);Response.Output(n);%-输出上一页下一页连接的TDL代码例:!-%/列表页分页 前一页 后一页String pPage, nPage;pPage = ThisChannel.TOC.PrevPage;nPage = ThisChannel.TOC.Nex

21、tPage;if(!pPage.equals()Response.Output(<<前一页    );if(!nPage.equals()Response.Output(后一页>>);%-4、附带发布的模板制作附带发布最主要的目的是取出频道的最新几条信息,然后用模板生成一个inc文件。因此,在附带发布页模板制作中,最主要的访问的对象是 Channel,访问它的Top和TopEx方法。但是,Channel对象表示的是当前频道,如果要访问其他频道里的文章信息,就必须使用另一个System对象,下面对System对象做一个介绍。Syst

22、em对象System对象提供一些与系统有关的辅助功能。它有以下方法:l Execute(templateUri),加载一个模板文件,返回执行的结果。注意参数是绝对路径。用这个方法,可以实现一个模板中加载一个子模板的功能。l GetChannel(ChannelUri)返回一个特定的频道对象,参数ChannelUri是系统的URI格式的串,因为TurboCMS的频道是层次形结构,在父频道与子频道间用“/”隔开。例:“/测试项目/新闻”表示“测试项目”频道下的“新闻”子频道。GetChannel方法返回的对象跟缺省的Channel对象是一样的,有Name、Path属性和Top(x)以及TopEx(

23、x)及SubChannels等方法,但TOC属性不能访问。l GetChannelByID(pid) 返回指定频道ID的频道对象,参数pid为TurboCMS系统中维护的频道ID。GetChannelByID方法返回的对象跟缺省的Channel对象是一样的,有Name、Path属性和Top(x)以及TopEx(x)及SubChannels等方法,但TOC属性不能访问。l GetDocumentInChannel(x, ids,orderfield)返回指定频道集中前x篇文章,并按指定的orderfield排序参数使用请参考TurboCMS.Java模版中的对象参考建议在所有的TOPX或TOPE

24、x包含文件的模板中均使用GetChannelByID方法返回Channel对象,而不是使用缺省的Channel对象(Channel只是返回当前频道对象)。一段脚本例子:!-%Channel objChannel = System.GetChannel(/教程和文档/web3d);/或者用下一条语句/Channel pChannel = System.GetChannelByID(3);java.util.Vector vt = pChannel.Top(5);for(int i=0;ivt.size();i+)Document aDoc = (Document)vt.get(i); Respo

25、nse.Output( + aDoc.Item(title) + );%-5、文章中使用来源的模板制作文章来源涉及到TDLSource类,ThisDocument.DocumentSource方法取出来的是ArrayList,访问示例如下:文章来源:a href= title=  6、文章正文显示编辑真实姓名的模板制作7、文章中使用Tag的模板制作文章Tag涉及到TDLTag类,ThisDocument.DocumentTag方法取出来的是Vector,访问示例如下:文章的Tag:!-%java.util.Vector vc = ThisDocument.DocumentTag();

26、TDLTag objTag =null;for(int i=0;ia href= target=_blank title=   相同Tag的文章列表:!-%java.util.Vector vc = ThisDocument.TopDocSameTag(6,”);for(int i=0;i8、Web2.0中Tag的模板制作Tag制作设计到ThisWeb2的使用1)输出Tag:2)相同Tag的文章列表:!-%/文章列表,简单列表Vector vc = ThisWeb2.TOC.AllLinks;for(int i=0;ivc.size();i+)Link aLink = (L

27、ink)vc.get(i);Response.Output( + aLink.Title + n);%-3)分页代码:!-%/Tag列表分页 共 n 页 第 n 页String pPage, nPage;int cmsPageA = ThisWeb2.TOC.Pages;int cmsTotal = ThisWeb2.TOC.TotalLinks;Vector vlink = ThisWeb2.TOC.AllLinks;Response.Output( 总 + cmsTotal + 篇 );Response.Output( 共 + cmsPageA + 页&nbs

28、p;);Vector vl =ThisWeb2.TOC.AllPages;for(int i=0;ivl.size();i+)Link Page = (Link)vl.get(i);if(ThisWeb2.TOC.PageNum=(i+1)Response.Output( 第 + (i+1) + 页 );elseResponse.Output( 第 + (i+1) + 页 );%-9、日列表模板制作频道的日列表,由发布服务每天定时生成。!-%/频道日列表 开始/Response.Output(ThisTodayList.TodayDate); /当前日期

29、Response.Output(n);java.util.Vector vc = ThisTodayList.AllLinks;if(vc!=null)for(int i=0;ivc.size();i+)Link aLink = (Link)vc.get(i);Response.Output();Response.Output( + aLink.Title + );Response.Output(+MyUtil.formatDate(java.util.Date)aLink.PublishDate,yyyy-MM-dd HH:mm:ss)+);Response.Output(n);Respon

30、se.Output(n);/频道日列表 结束%-10、图片集模板制作!-%/图片集Image objImage =(Image)ThisDocument.Item(image);Response.Output( +objImage.Title + );/图片集的标题/缩略图:objImage.ThumbFile;原图:objImage.BigFile Response.Output();String pPage, nPage;pPage =(String)ThisDocument.Item(PrevPage);/前一张图片nPage =(String)ThisDocument.Item(Nex

31、tPage);/后一张图片if(!pPage.trim().equals()Response.Output(<<上一张    );if(!nPage.trim().equals()Response.Output(下一张>>);%-配合相应的js,制作出精美的图片集。TurboCMS2009的模板制作(专题部分)一、概述在TurboCMS中,专题是指由编辑创建的,按照专题模板生成的一个页面,及该页面下栏目和文章的总称。专题在TurboCMS中,具有多重特征。一方面,专题类似于普通的文章,总是归属于某个频道,具有“标题”、“作者”等基

32、本字段,以及可以经过表单定义增加扩展字段。这些类似于文章的字段,其值在编辑新建专题时直接输入到系统中。另一方面,专题又类似于一个频道,可以有子栏目,子栏目里可以有文章。编辑新建专题时,需要先选择“专题模板”。“专题模板”于我们在频道中讲到的“模板”的概念有所不同。频道中的模板,包括内容页模板,列表页模板,附带发布模板,都只是一个文件,而“专题模板”则是由专题首页模板、子栏目定义、子栏目所使用的内容页模板及列表页模板的一个总和。专题模板必须由管理员首先在管理后台创建。管理员创建专题模板时,需要制作和指定专题首页的模板文件,以及定义专题下的子栏目,以及为每一个子栏目制作内容页模板和列表页模板。一个

33、站点中可以有多个专题模板,比如新闻专题模板,娱乐专题模板。不同的专题模板除了专题首页的模板文件不同以外,其所定义的子栏目也不同。编辑在创建一个具体的专题时,根据需要,选择一个专题模板。一旦选择了专题模板,那么相应的需要录入什么字段,以及有什么子栏目,就固定下来了。二、TDL编程根据上面的介绍,制作专题模板是一系列工作的总和,包括定义专题的表单,制作专题首页的模板,定义子栏目,制作子栏目的模板等。定义专题表单与定义频道的表单类似,根据需要,给专题增加一些字段。专题首页的模板制作包括两方面。一般来说,一个专题首页由两部分构成。一部分是输出专题的一些信息,比如专题的名称,专题的介绍等;第二部分是将专

34、题中每个子栏目里的文章提取若干条来在专题首页上显示。对于第一部分,输出专题的信息,与频道里的内容页输出文章的字段类似。所使用的代码如:其中的ThisSubject 代表当前专题,与文章中的ThisDocument代表当前文章类似。对于第二部分,子栏目中文章的列表,首先,我们的模板是将用在某一个特定的“专题模板”里的,因此我们知道该“专题模板”下包括什么子栏目。在代码中我们通过 ThisSubject的GetSubjectColumn方法来获得特定的栏目对象。代码例:!-%TDLSubjectColumn acolumn = ThisSubject. GetSubjectColumn(“最新报道

35、”);Response.Output(n);java.util.Vector vc = acolumn.TOC.AllLinks;for(int i=0;ivc.size()&i10;i+)Link aLink = (Link)vc.get(i);Response.Output();Response.Output( + aLink.Title + );Response.Output(n);Response.Output(n);%-输出子栏目里的文章与频道列表页里输出文章列表的代码类似。那是因为子栏目对象 SubjectColumn与频道对象类似,也有TOC属性。不过因为是在专题首页,我们不希望

36、输出栏目里的所有文章,因此我们在循环条件里加了i10。然后是子栏目里的内容页模板和列表页模板。对于内容页模板,与频道的内容页一样,唯一不同的是,为了在当前位置输出文章属于某个专题,可以直接使用 ThisSubject对象。子栏目的列表页模版与专题首页里一样,输出某个专题子栏目下的所有文章就可以了。如:!-%TDLSubjectColumn acolumn = ThisSubject. GetSubjectColumn(“最新报道”);Response.Output(n);java.util.Vector vc = acolumn.TOC.AllLinks;for(int i=0;ivc.siz

37、e();i+)Link aLink = (Link)vc.get(i);Response.Output();Response.Output( + aLink.Title + );Response.Output(n);Response.Output(n);%-注意,这时我们不限制输出的条数,就是输出整个栏目下的所有文章。专题子栏目与频道还有一个重要区别,那就是专题子栏目的文章列表是不可以分页的,因此需要输出所有文章。也可以在栏目的列表页模板中使用ThisSubjectColumn.TOC.AllLinks来获取该栏目的所有文章。专题对象ThisSubject,以及专题栏目对象 SubjectCo

38、lumn的具体方法和属性,请参考TurboCMS.Java模版中的对象参考。TurboCMS2009的模板制作(期刊部分)一、概述期刊封面页目录页,每期个文件xxxxxxxxxxxxxxx内容页内容页内容页内容页每一个期刊有一个唯一的封面页,是进入期刊内容的唯一入口。在这个封面页中,建议放置最新一期的封面图片以及该期中的关键文章。然后放置一个连接到该期目录页的链接。目录页每期一个,文件名为 目录页文件名+IssueNumber.ext,其中后缀名与期刊属性设置中“目录页文件”的后缀同。期刊的属性中“目录页文件”内容为最新一期的目录页相同。即是说,最新一期的目录页既可用目录页文件名+ Issue

39、Number.ext的方式访问,也可以用期刊的目录页访问。目录页中建议放置当前期的封面图片以及该期的所有文章按栏目分开的列表。内容页与以前频道中的内容页是一样的。在所有以上三类页面中均可以加上一个过刊查询,用一个下拉列表的方式连接到所有的过刊。二、TDL编程1、封面页模板制作我们知道,在模板中可以使用一些系统提供的对象来访问数据。在期刊模板中,系统新增加了几个对象,他们分别是“Magazine”、“Issue”,以及通过这两个对象的属性集合引出来的“Column”对象等。我们将在相关讲述中详细介绍每个对象可以提供的属性和方法。在封面页中主要访问的对象为“Magazine”,“Magazine”对象的属性有:l Name,期刊的名字l Alias,期刊的别名l CoverPage,封面页文件,即当前文件的文件名,形为“

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com