按照网友夙興夜寐罔徒勞的建议探讨下如何给记录/微博添加一个类似百度贴吧里的功能:展开和收起回复。
这是百度贴吧楼内楼效果图:
这是展开的效果
然后这是收拢的效果
这是个客户端的改动。分下面几步:
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>
复制代码 前添加- <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>
复制代码 3)在同一文件的末尾这句- <!--{template common/footer}-->
复制代码 前添加- <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>
复制代码 4)当用户添加回复时我们需要更新回复数,所以在模版文件 template/default/home/space_doing_li.htm 里的末尾添加- <!--{if $_GET[doid]}-->
- <script reload="1" type="text/javascript">
- setReplyToggleText('{$_GET[key]}_{$_GET[doid]}');
- </script>
- <!--{/if}-->
复制代码 最后是效果图:
这是展开的效果
然后这是收拢的效果
注:本文中的代码里的<符号后和a相连时加了一个不应该有的空格,以避免Discuz在保存日志时自动改变日志内容。
|