Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[发布] 美化版"鼠标移动到主题显示最后回复内容 for dz5.x"

[复制链接]
枫之白衣 发表于 2007-5-8 23:44:00 | 显示全部楼层 |阅读模式
原作者主题:https://discuz.dismall.com/viewthread.php?tid=610581
感谢他为大家提供这么好的插件!

有几点他没有做好,最大的问题就是出现的<br><font>等现象。
在此我做一修改,美化一下。
俺只提供5.5的修改方法和修改后的文件。

俺是菜鸟,请不要问我高深的问题。

欢迎大家光临我的小站:http://bbs.hongse.net.cn

==============================================================

名称:鼠标指向主题表格时显示最后回复等内容[修正版置顶、区置顶、总置顶帖无法预览的问题]
功能:与权限挂钩,扩大鼠标反应区域至表格
修改:forumdisplay.php、forumdisplay.htm
美化:枫
版权:归原作者所有

1.修改forumdisplay.php

查找:
  1. isset($ascdesc) && $ascdesc == 'ASC' ? $forumdisplayadd .= '&ascdesc=ASC' : $ascdesc = 'DESC';
复制代码


在其下添加:
  1. //----鼠标指向主题表格时显示最后回复等内容--------开始
  2. $dotadd1 = $dotadd2 = '';
  3. if($dotfolders && $discuz_uid) {
  4.     $dotadd1 = "DISTINCT p.authorid AS dotauthor, p.subject AS re_subject, p.message, ";
  5.     $dotadd2 = "LEFT JOIN {$tablepre}posts p ON (t.tid=p.tid AND p.authorid='$discuz_uid')";
  6. }else {
  7.     $dotadd1 = "p.subject AS re_subject, p.message, ";
  8.     $dotadd2 = "LEFT JOIN {$tablepre}posts p ON (t.tid=p.tid AND t.lastpost=p.dateline)";
  9. }
  10. //----鼠标指向主题表格时显示最后回复等内容--------结束
复制代码


查找:
  1. $thread['lastpost'] = gmdate("$dateformat $timeformat", $thread['lastpost'] + $timeoffset * 3600);
复制代码


在其下添加:(此为关键步骤,与原作者不同)
  1. //----鼠标指向主题表格时显示最后回复等内容--------开始
  2. if($forum['viewperm'] && !forumperm($forum['viewperm']) && !$forum['allowview']) {
  3.         $thread['message'] = "谢谢您的访问!由于权限不够,您仅可浏览本版主题标题。";
  4.     } elseif($thread['creditsrequire'] && $thread['creditsrequire'] > $credit && !$ismoderator) {
  5.         include language('messages');
  6.         eval("\$show_message = "".$language[thread_nopermission]."";");
  7.         $thread['message'] =  $show_message;
  8.     } else {
  9.         $thread['message']  = preg_replace("/\[hide=?\d*\](.+?)\[\/hide\]/is", "**** 回复后才可查看信息 *****", $thread['message'] );
  10.         $thread['message']  = preg_replace("/\[sell=?\d*\](.+?)\[\/sell\]/is", "**** 付費信息,已經隱藏 *****", $thread['message'] );
  11.         $thread['message']  = preg_replace("/\[php](.+?)\[\/php\]/is", "**** 内容为PHP代码 *****", $thread['message'] );
  12.         $thread['message']  = preg_replace("/\[code](.+?)\[\/code\]/is", "**** 内容为普通代码 *****", $thread['message'] );
  13.         $thread['message']  = preg_replace("/\[quote](.+?)\[\/quote\]/is", "**** 内容为引用信息 *****", $thread['message'] );
  14.         $thread['message']  = preg_replace("/\[url=?(.+?)\](.+?)\[\/url\]/is", "**** 此处为超级链接 *****", $thread['message'] );
  15.         $thread['message']  = preg_replace("/\[img](.+?)\[\/img\]/is", "**** 此处为图片链接 *****", $thread['message'] );
  16.         $thread['message'] = str_replace('"', '"', $thread['message']);
  17.         $thread['message'] = str_replace('<', '<', $thread['message']);
  18.         $thread['message'] = str_replace('>', '>', $thread['message']);
  19.         $thread['message'] = str_replace("\r\n", " ", $thread['message']);    //去掉回车换成了空格,紧凑显示
  20.         $thread['message'] = cutstr($thread['message'],240);        //内容截断
  21.         }
  22.     if($thread[replies]) {
  23.         $thread['shortmsg'] = '主题作者: '.$thread[author].'
  24. 主题日期: '.$thread[dateline].'
  25. 最新回复: '.$thread[lastpost].'
  26. 回复数量: '.$thread[replies].' | 查看数量: '.$thread[views].'
  27. 回复内容: '.$thread[re_subject].''.$thread[message].''.'';
  28.     } else {
  29.         $thread['shortmsg'] = '主题作者:'.$thread[author].'
  30. 主题日期: '.$thread[dateline].'
  31. 最新回复: '.$thread[lastpost].'
  32. 回复数量: '.$thread[replies].' | 查看数量: '.$thread[views].'
  33. 主题内容: '.$thread[message].''.'';
  34.     }
  35. //----鼠标指向主题表格时显示最后回复等内容--------结束
复制代码


如果您安装过全论坛置顶HACK直接进行第二步
如果没有请查找:
  1. $query = $db->query("SELECT t.* FROM {$tablepre}threads t
复制代码


把第一个上述代码替换为:
  1. /*$query = $db->query("SELECT t.* FROM {$tablepre}threads t*/
  2.         $query = $db->query("SELECT $dotadd1 t.* FROM {$tablepre}threads t $dotadd2
复制代码



2.修改templates\default\forumdisplay.htm

查找:
  1. <table cellspacing="{INNERBORDERWIDTH}" cellpadding="{TABLESPACE}" class="row" onMouseOver="this.style.backgroundColor='{ALTBG1}'" onMouseOut="this.style.backgroundColor='{ALTBG2}'"
复制代码


在='{ALTBG2}'"后面空一格后添加:
  1. title="$thread[shortmsg]"
复制代码


3.修改include\javascript\common.js

在最底加入:
  1. document.write("<style type='text/css'>");
  2. document.write(".cPopText { font-family: Tahoma, Verdana; background-color:  #DDEEFF; border: 1px #8899AA dashed; font-size: 12px; padding-right: 4px; padding-left: 4px; line-height: 18px; padding-top: 2px; padding-bottom: 2px; visibility: hidden; filter: Alpha(Opacity=80); opacity: 0.8;}");

  3. document.write("</style>");
  4. document.write("<div id='popLayer' style='position:absolute;z-index:1000' class='cPopText'></div>")

  5. function showPopupText(event) {
  6. if(event.srcElement) o = event.srcElement; else o = event.target;
  7. if(!o) {
  8. return;
  9. }
  10. MouseX = event.clientX;
  11. MouseY = event.clientY;
  12. if(o.alt != null && o.alt != '') {
  13. o.pop = o.alt;
  14. o.alt = '';
  15. }
  16. if(o.title != null && o.title != '') {
  17. o.pop = o.title;
  18. o.title = '';
  19. }
  20. if(o.pop != sPop) {
  21. sPop = o.pop;
  22. if(sPop == null || sPop == '') {
  23. $('popLayer').style.visibility = "hidden";
  24. } else {
  25. popStyle = o.dyclass != null ? o.dyclass : 'cPopText';
  26. $('popLayer').style.visibility = "visible";
  27. showIt();
  28. }
  29. }
  30. }

  31. function showIt() {
  32. $('popLayer').className = popStyle;
  33. $('popLayer').innerHTML = sPop.replace(/</g,"<").replace(/>/g,">").replace(/\n/g,"<br>");

  34. var bodySL, bodyST;
  35. if(window.pageXOffset){
  36. bodySL=window.pageXOffset;
  37. }else if(document.documentElement&&document.documentElement.scrollLeft){
  38. bodySL=document.documentElement.scrollLeft;
  39. }else if(document.body){
  40. bodySL=document.body.scrollLeft; //author: meizz
  41. }

  42. if(window.pageYOffset){
  43. bodyST=window.pageYOffset;
  44. }else if(document.documentElement&&document.documentElement.scrollTop){
  45. bodyST=document.documentElement.scrollTop;
  46. }else if(document.body){
  47. bodyST=document.body.scrollTop;
  48. }

  49. var bodyCW, bodyCH;
  50. if(window.innerWidth){
  51. bodyCW=window.innerWidth;
  52. }else if(document.documentElement&&document.documentElement.clientWidth){
  53. bodyCW=document.documentElement.clientWidth;
  54. }else if(document.body){
  55. bodyCW=document.body.clientWidth; //author: meizz
  56. }

  57. if(window.innerHeight){
  58. bodyCH=window.innerHeight;
  59. }else if(document.documentElement&&document.documentElement.clientHeight){
  60. bodyCH=document.documentElement.clientHeight;
  61. }else if(document.body){
  62. bodyCH=document.body.clientHeight;
  63. }

  64. if($('popLayer').clientWidth>300){
  65. var popWidth = 300;
  66. }else{
  67. var popWidth = $('popLayer').clientWidth;
  68. }

  69. var popWidth = $('popLayer').clientWidth;
  70. var popHeight = $('popLayer').clientHeight;
  71. var popLeftAdjust = MouseX + 12 + popWidth > bodyCW ? -popWidth - 24 : 0;
  72. var popTopAdjust = MouseY + 12 + popHeight > bodyCH ? -popHeight - 24 : 0;
  73. $('popLayer').style.left = (MouseX + 12 + bodySL + popLeftAdjust) + 'px';
  74. $('popLayer').style.top = (MouseY + 12 + bodyST + popTopAdjust) + 'px';
  75. }

  76. if(!document.onmouseover) {
  77. document.onmouseover = function(e) {
  78. var event = e ? e : window.event;
  79. showPopupText(event);
  80. };
  81. }
复制代码


======================================================================

6月9日增加解决办法:

当你按照上面的方法修改以后,出现下列情况的:

1、在论坛的第一页出现不了最后回复预览,而在第二页就可以出现了;
2、版置顶、区置顶、总置顶的帖子都出现不了最后回复内容预览。

那么请把forumdisplay.php里面的:
  1. $db->query("SELECT t.* FROM {$tablepre}threads t
复制代码
全部替换为
  1. $db->query("SELECT $dotadd1 t.* FROM {$tablepre}threads t $dotadd2
复制代码


======================================================================

如果你没有更改过上述的三个文件,建议你下载我的压缩包的文件直接覆盖。
附件文件已经更新。

[ 本帖最后由 枫之白衣 于 2007-6-9 18:25 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 楼主| 枫之白衣 发表于 2007-5-8 23:44:50 | 显示全部楼层
建议版主鼓励鼓励。

俺可是第一次在DZ发有关技术的东东
回复

使用道具 举报

 楼主| 枫之白衣 发表于 2007-5-8 23:55:33 | 显示全部楼层
非常郁闷的一件事情:在同一台服务器上,用来测试的小论坛能显示最后回复的内容,我的正式论坛却不能显示最后回复内容,只有除了最后回复内容的其他的信息。。。

演示论坛:http://dz.hongse.net.cn

哪位搭救我呀!

[ 本帖最后由 枫之白衣 于 2007-5-9 00:00 编辑 ]
回复

使用道具 举报

xuewuyaya 发表于 2007-5-9 00:45:38 | 显示全部楼层
我的也是...也是无法显示最后回复的内容是什么..都空的..
回复

使用道具 举报

e_zailai 发表于 2007-5-9 07:56:31 | 显示全部楼层
我的论坛一切正常!不知楼主具体美化在什么地方????
是指这一段
  1.     if($thread[replies]) {
  2.         $thread['shortmsg'] = '主题作者: '.$thread[author].'
  3. 主题日期: '.$thread[dateline].'
  4. 最新回复: '.$thread[lastpost].'
  5. 回复数量: '.$thread[replies].' | 查看数量: '.$thread[views].'
  6. 回复内容: '.$thread[re_subject].''.$thread[message].''.'';
  7.     } else {
  8.         $thread['shortmsg'] = '主题作者:'.$thread[author].'
  9. 主题日期: '.$thread[dateline].'
  10. 最新回复: '.$thread[lastpost].'
  11. 回复数量: '.$thread[replies].' | 查看数量: '.$thread[views].'
  12. 主题内容: '.$thread[message].''.'';
  13.     }
复制代码


??????
原帖:https://discuz.dismall.com/viewthread.php?tid=610581

[ 本帖最后由 e_zailai 于 2007-5-9 08:00 编辑 ]
回复

使用道具 举报

xuewuyaya 发表于 2007-5-9 09:21:16 | 显示全部楼层
其实这一段好看多了..普通就好..

加色太花哨了...

不正常的是无法显示最后回复的内容..
回复

使用道具 举报

xuewuyaya 发表于 2007-5-9 09:56:32 | 显示全部楼层
晕,刚测试了一下,竟然打开帖子列表白屏了。

如果您安装过全论坛置顶HACK直接进行第二步
如果没有请查找:

这里的全论坛置顶HACK是哪个哦?不过这一步改没改都一样,还是白屏了。
回复

使用道具 举报

labryandy 发表于 2007-5-9 10:18:57 | 显示全部楼层
为什么是白屏哇``````````
回复

使用道具 举报

xuewuyaya 发表于 2007-5-9 10:19:22 | 显示全部楼层
楼上的也白屏哈`~~
回复

使用道具 举报

labryandy 发表于 2007-5-9 10:22:03 | 显示全部楼层
是的了,迷糊死了```````
又给还原了`
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-12-22 19:59 , Processed in 0.035771 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表