一种通过置标获取栏目发布路径的解决方案
最后更新时间:2021年11月29日 人气:...

在技术交流群里有群友反馈需要通过置标获取栏目的存放位置数据,但是试过后无法达到预期的效果:

群友们也结合自己的经验出谋划策:

不同的栏目显示不同的效果,一般有如下方式可以达到:

1、使用TRS_Replace替换内容置标,在不同的栏目使用相同的变量标题设置不同的内容,然后使用TRS_Replace置标输出不同的数据。

2、使用TRS_Channellogo栏目图片 LOGO置标,该情况仅适用于不同栏目显示不同图片的场景

3、循环的情况下使用TRS_Rowno置标,为不同的序号设置不同的样式:


前面的几种方式貌似都满足不了该群友的需求,然后核查了下数据,发现栏目的存放位置尽量不是在wcmchannel栏目表预期的CHNLDATAPATH字段,而是存在wcmfolderpublishconfig表的DATAPATH字段,所以通过TRS_Channel置标取不到也是情理之中。不过想着TRS_Channel置标,可以通过field="_DATACOUNT"这种特殊值获取文档总数,是不是还有其他在文档中没体现的值呢?还是不死心想看看具体的实现方式,反编译TRS_Channel置标查看了下实现逻辑:

发现有filed=chnllog0-9几个特殊值,但是测试后发现都是空值,可能是在一些特殊情况下用的吧。


仍然不死心的我,进一步查看置标手册,发现一个有可能可行的置标:TRS_DEFOBJECTS:通用集合对象。看置标的描述应该是可以从指定的表里获取需要的数据。遂使用如下代码试了下,是可以取到预期的数据的

该置标生成数据如下:

现在剩下的问题就是怎么定位到对应的栏目上,列表置标基本上可以通过where给一些条件获取需要的数据,常规的条件貌似这里行不通,我们需要结合上下文传入当前栏目的ID从wcmfolderpublishconfig表获取指定的记录,进一步查反编译代码,发现置标中可以通过${@xxx}的方式传入变量:

使用如下置标试了下,果然奏效:

<TRS_DEFOBJECTS TABLENAME="wcmfolderpublishconfig" where="FOLDERID=${@channelid}" IDFIELDNAME="FOLDERID">
<TRS_DEFOBJECT FIELD="DATAPATH"/>
</TRS_DEFOBJECTS>

经验证,这里的环境上下文变量中也可以使用${@parent.xxx}这样的上下文,可以结合实际情况使用即可。


一些思考:

TRSWCM 提供这样的方式取数据,理论上可以获取数据库中的任意数据,不知道WCM有没有在一些敏感数据上针对TRS_DEFOBJECTS置标做一些安全控制,要不然在带来灵活性的同时会引入较大的安全隐患。

上一篇:TRSWCM数据库连接池一般问题处理
下一篇:没有下一篇了
热门评论