在细览模板中加入最新动态栏目列表的解决方式一
最后更新时间:2021年07月27日 人气:...

一、应用场景

  我们在浏览互联网网站的时候,当我们查看一篇文档的细览,发现该文档细览两侧或底部经常会有一些文档列表;

比如以下文章:

http://finance.sina.com.cn/money/cfgs/20120727/102312688457.shtml

  对于该类需求,我们一般都会在文档细览模板中使用概览置标,如:TRS_Documents来获取文档列表进行展现,但这种技术方案其实存在不少问题,以下将进行分析。

二、对此问题的分析

2.1性能低下

  由于在细览中使用了概览置标,那么说明在发布每一篇细览文档的时候,都需要去数据库中获取文档集合,同时为每一篇细览生成一样的代码片段;

  尽管在WCM的高版本中,在代码层面已经做了性能的优化,即:在同一次发布任务中,将把集合的查询结果进行缓存,以便避免数据库的多次查询;

  但总体来说此过程相比最优方案,仍不高效,因为还是需要为每一个细览页面去构造相同的代码片段。

2.2不能触发发布

  我们知道,当栏目A的概览模板使用了集合置标(如:TRS_Documents)获取栏目B的数据时,那么在栏目B下发布新文章时,栏目A的概览将自动触发发布。

  该规则仅对概览置标中的触发发布有效;对于细览,此触发将并没有支持,因为这样将触发该栏目下的所有细览进行发布,这显然是一种非常低效的行为。

2.3随着发布顺序的不同获取到的数据不同

  在wcm新版本中,在细览中使用集合置标TRS_DOCUMENTS,只是提取已发文档,这样,随着栏目发布顺序的不同,提取出的内容是有所区别的。

  例如:在栏目A的细览模板中使用TRS_DOCUMENTS置标来提取栏目B中的数据,那如果先发栏目B的数据,再发栏目A的数据,则刚刚B中的发布的文档文档能被提取出来。

  但是如果先发A,再发B,则B中刚发布的文档就不会被提取出来了。

三、推荐的解决方案

  为了解决这种细览页面使用概览置标的应用场景,需要使用Web服务器的SSI技术,借助Apache或IIS等Web服务器将列表的html片段包含进来。

3.1将文档列表置标模板配置到原始栏目上

  • 撰写新的模板,假定名称为TA

  • 里面内容为之前在细览模板中的内容片段,ID改为Owner <TRS_Documents id="owner" ...>

  • 将这个模板作为其他模板配置到“栏目A”的中;

3.2在原始模板中使用include指令包含被引用栏目的其他概览页面

  在原始模板中引入其他概览页面有两种方式,一种是自己撰写include指令,另外一种方式是我们内置了TRS_SSI置标。

  两种方式都可以,下面将分别说明:

3.2.1在细览模板中的模板片段替换成:

<#include file="<TRS_Channel ID="<栏目名称>" Field="_RecURL" TemplateName="TA"/> " -->

3.2.2使用TRS_SSI置标

  具体参考<TRSWCM6.5发布置标手册.doc>TRS_SSI置标

热门评论