| 按照网友夙興夜寐罔徒勞的建议探讨下如何给记录/微博添加一个类似百度贴吧里的功能:展开和收起回复。 
 这是百度贴吧楼内楼效果图:
 
   这是展开的效果
 
   然后这是收拢的效果
 
 这是个客户端的改动。分下面几步:
 1) 为了能在记录网页重新显示时(如删除回复时)保持用户的展开收起选择,我们要将用户的选择存放在浏览器的cookie里,所以我们要利用一个专门处理cookie的javascript库函数文件 js.cookie.js,在这里 https://raw.githubusercontent.com/js-cookie/js-cookie/v2.1.2/src/js.cookie.js 下载后放入网站的文件夹 static/js 里。
 2)在模版文件 template/default/home/space_doing.htm 里添加展开回复/收起回复链接:在下面这句代码
 
 前添加复制代码<span class="y"><!--{date($dv['dateline'], 'u')}--></span>
3)在同一文件的末尾这句复制代码<span class="y">< a id="replytoggle_{$key}_$doid" class="replytoggle" href="javascript:;" onclick="javascript: toggleDisplay('{$key}_$doid');" style="color: blue !important; cursor: pointer;"></a></span>
<span class="y pipe">|</span>
前添加复制代码<!--{template common/footer}-->
4)当用户添加回复时我们需要更新回复数,所以在模版文件 template/default/home/space_doing_li.htm 里的末尾添加复制代码<script type="text/javascript" src="{$_G[setting][jspath]}js.cookie.js?{VERHASH}"></script>
<script type="text/javascript">
    function toggleDisplay(ddid) {
        var replycount = $(ddid).getElementsByTagName('li').length;
        if ($(ddid).style.display == 'none' && replycount > 0 ) {
            $(ddid).style.display = '';
        }
        else {
            $(ddid).style.display = 'none';
        }
        var doid = ddid.split('_')[1];
        Cookies.set('doid_' + doid, $(ddid).style.display);
        setReplyToggleText(ddid);
    }
    function setReplyToggleText(ddid) {
        var replycount = $(ddid).getElementsByTagName('li').length;
        $('replytoggle_' + ddid).innerhtml = (($(ddid).style.display == '') ? '{lang pack_up}' : '{lang open}') + '{lang reply}(' + replycount + ')';
    }
    function refreshReplyToggleText() {
        var eas = document.getElementsByClassName("replytoggle");
        for (var i = 0; i < eas.length; i++) {
            var ea = eas[i];
            var ddid = ea.id.substr(12);
            var doid = ddid.split('_')[1];
            var eadisplay = Cookies.get('doid_' + doid);
            if (eadisplay == 'none') {
                $(ddid).style.display = 'none';
            }            
            setReplyToggleText(ddid);
        }
    }
    refreshReplyToggleText();
</script>
最后是效果图:复制代码<!--{if $_GET[doid]}-->
<script reload="1" type="text/javascript">
    setReplyToggleText('{$_GET[key]}_{$_GET[doid]}');
</script>
<!--{/if}-->
 这是展开的效果
 
   然后这是收拢的效果
 
   
 注:本文中的代码里的<符号后和a相连时加了一个不应该有的空格,以避免Discuz在保存日志时自动改变日志内容。
 
 |