新人指引 - TRS模板
模板手册
分页
倒序分页
<script>
layui.use('laypage', function () {
var laypage = layui.laypage;
let wcm_limit = parseInt('<TRS_ECHO VALUE="${概览文章数量}"/>');
let wcm_curr = parseInt("${PAGE_INDEX}");
let wcm_count = parseInt('<TRS_CHANNEL FIELD="_DATACOUNT" />');
// 页数倒序,当前页是从大到小
let lay_curr = hx_curr == 0 ? 0 : Math.ceil(hx_count / hx_limit) - hx_curr;
//执行一个laypage实例
laypage.render({
elem: 'laypage',
theme: 'pageTheme',
groups: ('<TRS_ECHO VALUE="${分页连续页数}"/>'),
count: wcm_count,
limit: wcm_limit,
curr: lay_curr + 1,
layout: ['count', 'prev', 'page', 'next', 'skip'],
jump: function (obj, first) {
if (!first) {
location.href = obj.curr === 1 ? `${PAGE_NAME}.${PAGE_EXT}` : `${PAGE_NAME}_${obj.pages - obj.curr + 1}.${PAGE_EXT}`;
}
}
});
});
</script>
兼容一切浏览器的复制
[!tip]
如果需要复制的是非常大段的内容,则 execCommand() 方法可能会引起卡顿,因为 execCommand() 方法是一个同步方法,必须等复制操作结束,才能继续执行后面的代码。
https://www.zhangxinxu.com/wordpress/2021/10/js-copy-paste-clipboard/
var text = '被复制的内容,啦啦啦~';
if (navigator.clipboard) {
// clipboard api 复制
navigator.clipboard.writeText(text);
} else {
var textarea = document.createElement('textarea');
document.body.appendChild(textarea);
// 隐藏此输入框
textarea.style.position = 'fixed';
textarea.style.clip = 'rect(0 0 0 0)';
textarea.style.top = '10px';
// 赋值
textarea.value = text;
// 选中
textarea.select();
// 复制
document.execCommand('copy', true);
// 移除输入框
document.body.removeChild(textarea);
}
海云及WCM 概览的最大数量
对于TRS_DOCUMENTS置标,如果没写 NUM 属性,则最多取500条,如果写了 NUM,它也不能超过
/TRS/HyCloud/IIP/webapps/gov/WEB-INF/classes/trsconfig/domain/com.trs.components.common.publish/config.xml属性中wcm-outline-contents-max-num的值(如果为0,则相当于1000)
对于TRS_VIEWDATAS置标,如果没写 NUM 属性,则最多取1000条,如果写了 NUM,则最多取NUM条。
如果是海云,则对应的环境变量是WCM_OUTLINE_CONTENTS_MAX_NUM。
WCM不要转存附件
WCM会将模板中的图片、脚本等路径会自动的改成相对路径,有两个办法解决:
- 添加ignoreapd="1"属性可以解决此问题。
- 直接禁止WCM转存,方法如下:
- 找到配置文件:【wcm\WEB-INF\classes\trsconfig\domain\com.trs.components.common.publish\config.xml】;
- 将【tags-having-src】节点的【img】值去掉;
- 将【tag-src-attribute-names】节点中【img】对应的【src】值去掉(与【tags-having-src】位置有一一对应关系);
- 重启wcm,再次测试;
- 以上只描述了如果过排除对img元素的转换处理,如果想要排除script元素,方式类似,即:去掉script标记与script标记对应的src标记。
原始文件
<tags-having-src> BODY,TABLE,TD,IMG,INPUT,LINK,SCRIPT,EMBED </tags-having-src>
<!-- Notice: TagSrcAttributeNames must be relative with tags-having-src each other -->
<tag-src-attribute-names> BACKGROUND,BACKGROUND,BACKGROUND,SRC,SRC,HREF,SRC,SRC </tag-src-attribute-names>
<supported-apd-exts> BMP,GIF,JPG,JPEG,PNG,CSS,SWF,WAV,WMV,RM,EXE,COM,BAT,PDF,RAR,ZIP,JS </supported-apd-exts>
保留WCM下载中文名
原理是将附件包装成blob的形式,再模拟点击事件来进行下载,此方式只适合小附件下载,大型附件包装时很可能导致反应缓慢,
推荐再加入文件大小的判断
将附件下载置标改成如下形式:
<TRS_XAPPENDIXS MODE="FILE">
<a id="APPENDIXS"
href="javascript:;"
url='<TRS_XAPPENDIX FIELD="_RECURL" URLISABS="TRUE"/>'
name='<TRS_XAPPENDIX FIELD="APPDESC" AUTOLINK="FALSE"/>'>
<TRS_XAPPENDIX FIELD="APPDESC" AUTOLINK="FALSE"/>
</a>
</TRS_XAPPENDIXS>
加入javascript代码:(实例中含有jquery和layer,若不需要请自行解决)
$('#APPENDIXS').click(function (data) {
var that = $(this)
blob(that.attr('url'),that.attr('name'))
})
function blob(url, name) {
layer.alert('正在下载《' + name + '》,请稍后。如果很长时间仍未弹出下载链接,请点击<a style="color:#2188f0;text-decoration:underline;" href="' + url + '">此处</a>开始下载。')
url = url;
ext = url.substring(url.lastIndexOf("."));
name = name.substr(0,name.indexOf("."));
name += ext;
if (!isIE()) {
var x = new XMLHttpRequest();
x.open("GET", url, true)
x.responseType = 'blob';
x.onload = function (e) {
var blob = new Blob([x.response], { type: "application/octet-stream" });
var href = URL.createObjectURL(blob);
if (navigator.msSaveOrOpenBlob) {
navigator.msSaveOrOpenBlob(x.response, name)
} else {
var aLabel = document.createElement('a');
aLabel.href = href;
aLabel.target = '_blank';
aLabel.download = name;
document.body.appendChild(aLabel);
aLabel.click();
document.body.removeChild(aLabel);
window.URL.revokeObjectURL(href);
}
};
x.send();
} else {
window.open(url);
}
}
function isIE() {
var ua = window.navigator.userAgent;
var msie = ua.indexOf('MSIE '); // IE 9=-
var trident = ua.indexOf('Trident/'); //IE 10=+
return (msie > 0);
}