Archive for 01月, 2008
专题区域、专题文档、专题发布
星期四, 01月 3rd, 2008所谓专题的区域跟首页、频道页的区域划分是一样的,只不过所创建的区域作用于专题页面而已。
以一个新浪专题为例:
这些区域就是属于专题区域。
开始标记:专题页面模板中区域的开始定界符
结束标记:专题页面模板中区域的结束定界符
注意,开始、结束定界符号在专题模板中必须唯一存在。如图:

文档属性:选择该区域的文档所属的专题属性。
单行模板:用于修饰该区域文档的显示样式。
单行模板中用到的模板变量和函数请参照。
当然,专题的制作很大程度上还是要靠手工制作。
专题文档是该专题链接到文档的虚链接,是一种弱耦合,即属于专题的文档肯定强链接于某个分支。
文档可以有两种方式加入专题,第一种方式是直接添加,进入专题的相关文档页面,如图:

点击右下角的添加按钮,直接添加属于该专题的文档。
第二种方式是从文档列表中挑选,可以输入关键字限定,如图:
专题的发布过程与文档差不多,专题静态化的同时将相应的把该专题的区域静态化。
站点内容的组织结构-站点分支
星期四, 01月 3rd, 2008woodplow 1.0beta(access) 最新bug纠正 时间串问题
星期四, 01月 3rd, 2008由于一直在sqlserver 和 mysql数据库之间徘徊,很少使用access,忽略了access的时间界用#分割,现发布修正方法。
注意事项:
1、该bug仅存在于access版,凡是2007-10-30日12:00之前下载需要更新。
2、只需覆盖其中的三个文件即可,那三个文件是进行批量发布的入口。
3、在此对各位网友表示歉意。感谢wangbo(QQ:709784021)发现问题。
文档属性的概念以及具体应用实例
星期四, 01月 3rd, 2008为了有效的把编辑指定的文档表现到网页上,也为了更加有效的组织内容,woodplow引入了文档属性的概念。一个文档可以有一个或者多个属性,可以有通用的逻辑属性,也可以有位置属性,还可以有专题属性,可以根据你的实际情况划分属性组和属性。
通用的逻辑属性:比如头条新闻、热点新闻、推荐新闻、热评新闻、焦点新闻、滚动新闻等。
特殊的位置属性:比如首页左栏新闻、首页中部广告新闻、导航栏底部2栏等与网页位置有关。
策划专题用属性:比如图文报道、视频报道、背景新闻、跟踪报道等,方便专题页面的区域化。
文档属性一般用于归档和网页区块化调用。
文档归档,可以是一种组合,比如归档新闻中心的头条新闻,可以这样使用:http://news.woodplow.com/archive.asp?domain=1&property=2(这里property=2便是头条新闻)
网页的区域化,比如:示例一
示例二:
示例三:
示例四:
上述示例都可以通过限定分支(例如:branchid=5)、文档属性(例如:propertyid=1)、文档类型(例如:doctype=8)到块页面(block)上来实现。
例如:
文档模板制作详解
星期四, 01月 3rd, 2008woodplow publisher在严格意义只有一种前台模板,那便是文档模板,没有其他发布系统中存在的栏目模板、首页模板、列表模板等,因为woodplow强调动静结合、区域划分。
什么是动静结合呢?网站的静态化是为了迎合搜索引擎对静态页面的喜好、降低服务器负载,可是过度静态化会增加维护成本,并且内容更新的即时性也会受到影响;网站的动态化(在建站早期基本上都是)能保证内容的即时性,相应却加重了服务器的负载,毕竟大部分动态页是数据库驱动的,而数据库的性能成为80%网站的性能瓶颈。当然,像新浪这种大型门户,静态化是通过计划任务自动完成的,维护开销也不是很大,毕竟中小型的用户没有这个实力。因此,我们主张伪静态(还是动态)+纯静态来解决搜索引擎收录跟维护成本的矛盾。
什么是区域划分呢,区域划分就是为了降低维护量,主要用于站点首页、栏目页、最终页。首页、栏目页、最终页是更新频率最快的页面,尤其是首页和栏目页,而首页和栏目页的维护就是要划定区域,分开处理,毕竟不同的区域更新时间是不同的。比如:sina的首页区域划分

1、招商加盟区 2、娱乐音乐区 3、体育nba区 4、社会军事区 5、影视直播区
不同的区域由不同的人维护,因此首页模板没有存在的价值。还比如一级栏目页
二级栏目页:
这些页面都可以只做好layout页面,然后上传即可。比如:
其中
这种代码就是ssi(server side include)服务器端的包含,iis和apache都支持,这个包含文件就是页面管理中需要添加的,如图:
然后设定该区域满足的调用条件:
而文档的归档页面,也就是列表页面,woodplow推荐使用伪静态或者archive插件来处理,比如
这样可以降低维护的成本。
下面介绍如何制作文档模板
1、模板变量
模板变量都以
形式存在,即调用field函数。可用字段参数对应如下:

docid <=> 文档标识(document+block)
pageid <=> 文档分页标识(document)
branchid <=> 分支标识(document+block)
doctypeid <=> 文档类型标识(document+block)
fromid <=> 文档转载来源标识(document+block)
authorid <=> 文档记者标识(document+block)
editorid <=> 文档编辑标识(document+block)
doctitle <=> 文档标题(document+block)
subtitle <=> 文档副标题(document+block)
branch <=> 分支标题(document+block)
alias <=> 分支别名(document+block)
context <=> 分支上下文(document+block)
branchurl <=> 分支链接地址(document+block)
domainurl <=> 所属域名(document)
tag <=> 文档tag,类似于关键字(document+block)
doctype <=> 文档类型(document+block)
docfrom <=> 文档转载来源(document+block)
author <=> 文档记者(document+block)
navipic <=> 导航图片(document+block)
digest <=> 文档导读(document+block)
pagecount <=> 文档页数(document)
pageindex <=> 文档分页索引值(document)
pagetitle <=> 文档页标题(document)
pageurl <=> 文档页地址(document)
content <=> 文档页内容(document)
createtime <=> 文档创建时间(document+block)
说明:括号中document代表对文档模板有效,block代表对区域页面模板有效。
注意:
2、模板函数
模板函数遵循格式
,并且可以互相嵌套,例如:

prev <=> 前一页(document)
next <=> 后一页(document)
page <=> 分页 (document)
formatdate <=> 日期格式化(document+block)
urlencode <=> 网页地址格式化(document+block)
left <=> 截取字符串(document+block)
filterhtml <=> 过略html标记(document+block)
relate <=> 相关文档(document)
trim <=> 剔除空格(document+block)
crlf <=> 剔除回车换行(document+block)
cdata <=> xml cdata标记(document+block)
replace <=> 字符串替换(document+block)
用户可以自主添加自定义函数,下图是上述模板函数的api:
注意:函数的字符串参数不能使用双引号(””)引用,须使用单引号(”)。
示例说明:
- prev函数api:
其中,prevTemplate为前一页链接模板,firstTemplate为第一页链接模板,即如果当前页有前一页,则使用前一页链接模板,如果当前页为第一页,则使用第一页链接模板。例如:
$pageurl$为模板保留字,此处代表上一页的文档访问地址此函数与page函数、next函数配合实现效果:
类似的效果也可以延伸出来。 - next函数api:
其中,nextTemplate为下一页链接模板,lastTemplate为最后一页链接模板,即如果当前页有下一页,则使用下一页链接模板,如果当前页为最后一页,使用最后一页的链接模板。例如:
- page函数api:
其中,pageType是分页类型,如果为1,则为下拉式分页方式,如果为2,则为平面分页方式,pageTemplate为非当前页模板,currentTemplate为当前页模板,例如:下拉式分页,平面式分页 下拉式分页样式1如图:
平面式分页样式1如图: 
- 平面式分页样式2如图:

- urlencode函数api:
,targetStr为需要编码的字符串,该函数应用最多的场合就是对文档访问地址进行格式化,防止javascript引用时出现错误,例如:
,用到了与field模板变量函数的嵌套调用。crlf函数、trim函数、filterhtml函数也是使用此种调用方法。 - left函数api:
此函数用于对超过一定长度的字符串截取到指定长度,targetStr为需要截取的字符串或者嵌套变量,cutLenght为截取的长度,suffix为后缀填补字符串。例如:
- formatdate函数api:
,dateString为要格式化的日期字符串,dateFormat为日期格式,如果以2007-05-01 09:08:04为例,可用的格式变量有:{Y}=2007,{y}=07,{M}=5,{m}=05,{D}=1,{d}=01,{H}=9,{h}=09,{MI}=8,{mi}=08,{S}=4,{s}=04。例如:
,便是格式为2007-05-01的样式。 - replace函数api:
,把字符串srcString中出现的outString字符串替换为inString。例如:
- relate函数api:
,relateNum为调用的相关文档数目,styleTemplate为风格模板,例如:
,样式模板中可以使用的内部保留字有: $docid$=文档标识,$doctitle$ =文档标题,$docurl$ = 文档访问地址,$createtime$ = 文档创建时间, $branch$ = 分支名称,$alias$ = 分支别名,$branchid$ = 分支标识,$doctype$ = 文档类型,$doctypeid$ = 文档类型标识,$index$ = 相关文档当前索引
创建文档的三个基本步骤
星期四, 01月 3rd, 2008woodplow CMS的存储框架
星期四, 01月 3rd, 2008woodplow publisher具有开放式、模块化的系统结构,域、分支、文档、专题、页面五个元素构成了系统的核心数据模型。
域是顶级管理单元,对应着一个站点域名或二级、三级域名,物理上对应着文件系统中某个目录,当然目录可以不在一个逻辑驱动器上。
节点的域名可以为路径,例如:http://www.woodplow.com/news,注意不要以”/”结尾。如果你想线上管理域所在的目录,可以配置文件系统,增加一个配置点,使其与域对应的目录相关联。
分支是站点资源的组织单元,分支必须基于某个域名创建,文档、专题、页面的组织都是基于分支的。分支理论上不限定深度,但是建议不要超过3级。
文档是站点内容的图文展示,由编辑通过所见即所得的编辑器录入产生,文档的表现形式有其所属分支的文档模板决定,文档可以有很多逻辑属性,比如:热点新闻、推荐新闻等,为了形成内容的交叉,文档还可以携带文档类型,比如:新闻、行情、评测、导购、厂商、促销等。
文档的分页内容要集中管理,woodplow将文档基本信息和主体内容分开存储以便提升检索速度。
专题是对满足某一主题(比如:2007年巴基斯坦总统大选)的文档进行集中组织的单元,专题可以弥补分支的物理组织为逻辑组织,使用指针把散落到各个分支和域的符合同一主题的文档集中展示出来。
你可以把文档添加进专题或者选择指定文档加入专题。
页面是站点频道页、首页、文档页、专题页中的分割区域,比如:新闻周排行、首页热评新闻等。
第一个版本有三种类型的页面:手动页面、动态页面、包含页面。
关于文件系统的配置文件的特别说明
星期四, 01月 3rd, 2008文件系统是内容的物理存储结构,合理的划分文件系统对日后的维护影响很大,woodplow建议采取”分而治之”的方法,把图片、静态页、素材图标、css样式表、javascript脚本、广告页等建站元素分开存储或者组合存储,默认的文件系统配置:
该配置文件只有网站管理员才可修改,基于安全性,无法通过后台线上修改。
默认划分的四个配置点能够满足中小型网站的使用,配置文件的结构很简单,通过xml标记名能很容易的获知。
每一个item单元代表一个配置项,物理上对应一个磁盘目录,逻辑上对应一个二级域名或者访问路径,index标签标识了该配置项的索引值,注意索引值要从小到大排列,path标签可以为相对路径和物理路径,注意不要以”/”或者”\”结尾。url就是逻辑上的访问地址,以”/”结尾,该地址可以用于下载素材、css文件、javascript等。upload、edit、delete、move、create依次代表上传、编辑、删除、移动、创建的权限,其中包含了允许操作的文件类型,比如:htm|html|css,便是允许操作.htm、.html、.css的文件。
注意:要确保iis安全帐号对配置项中path标签指定的路径有读写权限。
特别说明以下几点
1、不要把后台cms目录放入配置点。
2、不允许上传.asp文件。
3、设定服务器不允许下载directory.xml文件。(修改iis解析映射)
4、如果能满足要求,尽量使用static文件夹作为静态存储点。比如:/static/news可为新闻中心,/static/mp3可为mp3频道等等。
5、为专题策划单独设置素材存放点。
文档模板中加入分页的方法
星期四, 01月 3rd, 2008woodplow的模板中可以很容易的对多分页的文档进行描述,其中用到了几个系统定义好的模板助记符。
<!–cms:page(pagetype,pagetemplate,currtemplate)–>
其中pagetype为1时为下拉式分页,pagetype为2时为平面式分页,可以自己扩展其他pagetype
下拉式分页示例:
<!–cms:page(1,’<option value=”$pageurl$”>第$pageindex$页:$pagetitle$</option>’,’<option value=”” selected>第$pageindex$页:$pagetitle$</option>’)–>
在这里$pagetitle$ 代表分页标题,$pageindex$代表分页索引号,$pageurl$代表分页的访问地址。
平面式分页示例:
<!–cms:page(2,’<li class=”li_blue”><a href=”$pageurl$”>第$pageindex$页:$pagetitle$</a></li>’,’<li class=”li_red”>第$pageindex$页:$pagetitle$</li>’)–>
如果要显示上一页、下一页,则使用下面两个模板项:
<!–cms:prev(prevTemplate,firstTemplate)–>
<!–cms:next(nextTemplate, lastTemplate)–>
上一页示例:
<!–cms:prev(’<a href=”$pageurl$”>上一页</a>’, ‘第一页’)–>
下一页示例:
<!–cms:next(’<a href=”$pageurl$”>下一页</a>’, ‘最后页’)–>
当然,你也可以使用图片来标识上一页、下一页 。



















