新人指引 - TRS模板

发布时间 2023-10-25 11:56:08作者: p#ssw0rd

模板手册

兼容一切浏览器的复制

[!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转存,方法如下:
  1. 找到配置文件:【wcm\WEB-INF\classes\trsconfig\domain\com.trs.components.common.publish\config.xml】;
  2. 将【tags-having-src】节点的【img】值去掉;
  3. 将【tag-src-attribute-names】节点中【img】对应的【src】值去掉(与【tags-having-src】位置有一一对应关系);
  4. 重启wcm,再次测试;
  5. 以上只描述了如果过排除对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);
    }