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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

帖子主题首页生成HTML FOR DZ2.5F[最新修正9-2-6:00]

[复制链接]
小勤网络 发表于 2005-9-1 21:11:42 | 显示全部楼层 |阅读模式
来源:http://bbs.xqin.com/htm_data/20/2005-9-1/3869.html

适用版本:Discuz2.5F版本(其他版本稍作修改亦可)

发布日期:2005年9月1日

作者: 老兵酒吧

演示地址:http://bbs.xqin.com

http://free.discuz.info

版权所有, 严禁外传


修正整理BY小勤
说明:

1)不保证完全没有BUG和漏洞,是否安装风险自担;
2)不对使用不当造成的后果负责,所以,安装前请进行数据备份和程序备份
3)欢迎大家在试用中提出意见和建议



第一步:后台准备

在后台修改论坛路径:
风格模板修改图片和表情的路径为完整
比如:
界面图片目录 {IMGDIR}:images/default修改为http://bbs.xqin.com/images/default


在后台升级数据库中运行  
  1. ALTER TABLE `cdb_forums` ADD `allowhtmlpage` TINYINT( 1 ) DEFAULT '1' NOT NULL ;
复制代码


对不需要生成 html 的论坛 运行
  1. UPDATE `cdb_forums` SET `allowhtmlpage` = '0' WHERE `fid` =你的对应版块FID  LIMIT 1 ;
复制代码

多个版面请执行多个对应FID的即可

第二步:FTP直接上传

上传HTML要用到的三个模板 viewthread_html,header_html,footer_html 到模板目录
viewthread_html,header_html ,footer_html 是默认的FD2.5F风格的模版,若你采用的是其他风格,可以对照比较修改你的viewthread,header,footer模版后另存为viewthread_html,header_html ,footer_html模版,header_html 中HEAD标签之间加上
  1. <meta http-equiv="Pragma" content="no-cache">
  2. <meta http-equiv="cache-control" content="no-cache,must-revalidate">
  3. <meta http-equiv="Expires" content="0">
复制代码

另存为的_html模版其中主要修改的都是一些路径问题所以修改的时候可以查找href=和src=把连接和图片路径对应修改为相对根目录的相对路径比如查找
  1. <a href="
复制代码
然后替换为
  1. <a href="{$boardurl}
复制代码
如果连接地址嫌麻烦也可以在header_html的<head>之间加上这句
  1. <base href="{$boardurl}">
复制代码
图片路径请在后台风格里面也设置成你的绝对URL地址,比如[quote]界面图片目录 {IMGDIR}:images/default修改为http://bbs.xqin.com/images/default


并查找
  1. <img src="
复制代码
替换为
  1. <img src="{$boardurl}
复制代码


补充说明:后台修改了{IMGDIR}为绝对路径了,凡是有{IMGDIR}的地方就不需要加{$boardurl}了,只把没有{IMGDIR}的IMG路径修改下就可以了,后台没有修改为绝对路径,就需要所有的IMG路径全加上,这个涉及到的路径问题,总之你按适合自己的论坛修改路径为正确的就可以了,比如可以直接在你的路径前加/bbs/(假设BBS是你的论坛目录)也是一样的效果,作为站长路径问题稍做思考应该不是很难的哦[/quote]

上传两个PHP文件:viewsplus.php header.php 到论坛根目录

论坛根目录建立文件夹 htm_data 如果是类UNIX系统,属性设为777

注意:如果未安装其它插件并且使用默认风格,直接上传全部文件覆盖即可完成安装。否则,按照下面步骤修改


第三步:修改

模板forumdisplay.htm
找到
  1. <a href="viewthread.php?tid=$thread[tid]&fpage=$page" $thread[highlight]>$thread[subject]</a>
复制代码

改为
  1.   $thread[threadlisturl]
复制代码


修改 forumdisplay.php
找到       
  1. $threadlist[] = $thread;
复制代码

在其上面增加

  1. ////////////////////////////////////////////
  2.        $cachefile=DISCUZ_ROOT."htm_data/$fid/$thread[dateline]/$thread[tid].html";

  3.         if($forum['allowhtmlpage']=="1" && $thread['poll']=="0" && $thread['creditsrequire']=="0" && file_exists($cachefile)) {
  4. $thread[threadlisturl]=<<<EOD
  5.                 <a href="htm_data/$fid/$thread[dateline]/$thread[tid].html" $thread[highlight]>$thread[subject]</a>
  6. EOD;

  7.                 }else{
  8. $thread[threadlisturl]=<<<EOD
  9.                 <a href="viewthread.php?tid=$thread[tid]&extra=$extra" $thread[highlight]>$thread[subject]</a>
  10. EOD;


  11.                 }
  12.        
  13. ////////////////////////////////////////////////
复制代码



修改 viewthread.php

找到
  1. define('CURRSCRIPT',  'viewthread');
复制代码


增加
  1. //在你的开始处加入 ob_start();
  2. ob_start();
复制代码


找到A

  1. $multipage = multi($thread['replies'] + 1, $ppp, $page, "viewthread.php?tid=$tid&fpage=$fpage&highlight=".rawurlencode($highlight));
复制代码


修改

  1. $multipage = multi($thread['replies'] + 1, $ppp, $page, "{$boardurl}viewthread.php?tid=$tid&fpage=$fpage&highlight=".rawurlencode($highlight));
复制代码



找到B

  1. $navigation .= "&raquo; <a href="forumdisplay.php?fid=$fid&page=$fpage"> $forum[name]</a> &raquo; $thread[subject]";
复制代码


修改

  1. $navigation .= "&raquo; <a href="{$boardurl}forumdisplay.php?fid=$fid&page=$fpage"> $forum[name]</a> &raquo; $thread[subject]";
复制代码



找到C
  1. $navigation .= "&raquo; <a href="forumdisplay.php?fid=$fup[fid]">$fup[name]</a> &raquo; <a href="forumdisplay.php?fid=$fid&page=$fpage"> $forum[name]</a> &raquo; $thread[subject]";
复制代码


修改

  1. $navigation .= "&raquo; <a href="{$boardurl}forumdisplay.php?fid=$fup[fid]">$fup[name]</a> &raquo; <a href="{$boardurl}forumdisplay.php?fid=$fid&page=$fpage"> $forum[name]</a> &raquo; $thread[subject]";
复制代码


查找:D
  1. $post['avatar'] = '<img src="'.$_DCACHE['usergroups'][$post['groupid']]['groupavatar'].'" border="0">';
复制代码

替换为:
  1. $post['avatar'] = '<img src="'.$boardurl.''.$_DCACHE['usergroups'][$post['groupid']]['groupavatar'].'" border="0">';
复制代码


再查找:E
  1. $post['avatar'] = '<img src="'.$post['avatar'].'" width="'.$post['avatarwidth'].'" height="'.$post['avatarheight'].'" border="0">';
复制代码

替换为:
  1. $post['avatar'] = '<img src="'.$boardurl.''.$post['avatar'].'" width="'.$post['avatarwidth'].'" height="'.$post['avatarheight'].'" border="0">';
复制代码


再查找:F
  1. $post['karma'] .= '<img src="'.IMGDIR.'/'.$rateimg.'" align="right">';
复制代码

替换为:
  1. $post['karma'] .= '<img src="'.$boardurl.''.IMGDIR.'/'.$rateimg.'" align="right">';
复制代码


找到G
  1. include template('viewthread');
复制代码

替换

  1. //        include template('viewthread');

  2. ////////////生成HTML增加代码

  3. $thread['dateline'] = gmdate($dateformat, $thread['dateline'] + $timeoffset * 3600);
  4. $cachefile="htm_data/$fid/$thread[dateline]/$thread[tid].html";
  5.        
  6. if($forum['allowhtmlpage']=="1" && $page=="1" && $thread['poll']=="0" && $thread['creditsrequire']=="0" && !file_exists($cachefile))
  7. {       

  8. $thread[threadlistphpurl]=<<<EOD
  9.                 <a href="{$boardurl}viewthread.php?tid=$tid&fpage=$fpage&highlight=".rawurlencode($highlight)>动态页面</a>
  10. EOD;


  11.         include template('viewthread_html');


  12. //在结尾加入 ob_end_clean(),并把本页输出到一个变量中
  13. $temp = ob_get_contents();
  14. ob_end_clean();


  15.                         if(!is_dir('htm_data/'.$fid)){
  16.                                 @mkdir('htm_data/'.$fid,0777);
  17.                                 writeover("htm_data/$fid/index.html",'');
  18.                         }
  19.                         if(!is_dir('htm_data/'.$fid.'/'.$thread[dateline])){
  20.                                 @mkdir('htm_data/'.$fid.'/'.$thread[dateline],0777);
  21.                                 writeover("htm_data/$fid/$thread[dateline]/index.html",'');
  22.                         }



  23.                 //写入文件
  24.                 $fp = fopen($cachefile,'w');
  25.                 fwrite($fp,$temp) or die('写文件错误');  
  26.                 fclose($fp);

  27.               header("Location: $cachefile");
  28.                exit();



  29. }else{
  30.         include template('viewthread');

  31. }
  32.        
  33. /////////////////生成HTML增加代码结束
复制代码




再在文件结尾加上


  1. function writeover($filename,$data,$method="rb+",$iflock=1){
  2.         touch($filename);
  3.         $handle=fopen($filename,$method);
  4.         if($iflock){
  5.                 flock($handle,LOCK_EX);
  6.         }
  7.         fputs($handle,$data);
  8.         if($method=="rb+") ftruncate($handle,strlen($data));
  9.         fclose($handle);
  10. }
复制代码



修改 topicadmin.php

找到
  1. $fupadd = $fup ? "OR (fid='$fup[fid]' && type<>'group')" : NULL;
复制代码



下面增加
  1.               //////////////////////生成HTML增加代码

  2.                      $thread['dateline'] = gmdate($dateformat, $thread['dateline'] + $timeoffset * 3600);
  3.               $cachefile=DISCUZ_ROOT."htm_data/$fid/$thread[dateline]/$thread[tid].html";
  4.               if(file_exists($cachefile)){
  5.                  @unlink($cachefile);
  6.                  }
  7.                  



  8.               //////////////////////////生成HTML增加代码结束
复制代码




修改 include\newreply.php

找到
  1. if ($forum['fup'] && $forum['type'] == 'sub' && !$forum['viewperm']) {
  2.                 $db->query("UPDATE $table_forums SET lastpost='".addslashes($thread['subject'])."\t$timestamp\t$discuz_user'  WHERE fid='$forum[fup]'", 'UNBUFFERED');
  3.         }
复制代码


下面增加
  1.               //////////////////////////////生成HTML增加代码

  2.                      $thread['dateline'] = gmdate($dateformat, $thread['dateline'] + $timeoffset * 3600);
  3.               $cachefile=DISCUZ_ROOT."htm_data/$fid/$thread[dateline]/$thread[tid].html";
  4.               if(file_exists($cachefile)){
  5.                  @unlink($cachefile);
  6.                  }
  7.              //////////////////////////////生成HTML增加代码结束
复制代码


修改 include\editpost.php


找到
  1. if(!$isorigauthor) {
  2.                 @$fp = fopen(DISCUZ_ROOT.'./forumdata/modslog.php', 'a');
  3.                 @flock($fp, 2);
  4.                 @fwrite($fp, "$timestamp\t$discuz_user\t$groupid\t$onlineip\t$forum[fid]\t$forum[name]\t$thread[tid]\t$thread[subject]\t$modaction\n");
  5.                 @fclose($fp);
  6.         }
复制代码



下面增加

  1.               /////////////////////////生成HTML增加代码

  2.                      $thread['dateline'] = gmdate($dateformat, $thread['dateline'] + $timeoffset * 3600);
  3.               $cachefile=DISCUZ_ROOT."htm_data/$fid/$thread[dateline]/$thread[tid].html";
  4.               if(file_exists($cachefile)){
  5.                  @unlink($cachefile);
  6.                  }
  7.               /////////////////////////////////生成HTML增加代码结束
复制代码




include\attachment.php


找到
       
  1. return '<img src="images/attachicons/'.$GLOBALS['_DCACHE']['attachicon'][$typeid].'" align="absmiddle" border="0">';
复制代码


替换
       
  1. return '<img src="'.$boardurl.'images/attachicons/'.$GLOBALS['_DCACHE']['attachicon'][$typeid].'" align="absmiddle" border="0">';
复制代码


到此修改结束,到前台测试下看是否成功了?

修改中注意的问题:
若你修改后生成的帖子中图片不能显示请检查viewthread.php和viewthread_html,footer_html header_html里面的图片路径,一般查找<img后即可SRC后面的路径修改为相对你的站点根目录的相对路径或者直接绝对URL路径即可~一般在HEAD中加上<base href="{$boardurl}">即可保证连接地址的路径不出错误的,如果修改过程中有问题可以参照对比压缩包中的对应文件进行比较修改
给个好工具TextDiff文本比较器http://bbs.xqin.com/data/text.exe,修改的话可以对照压缩包的文件和你自己论坛的文件进行比较修改



下载压缩文件已更新,最新修正9-2-6:00,测试失败的可以重新下载参照修改

http://www.xqin.com/down/dz-html.rar


反安装:
1.数据库升级

  1. ALTER TABLE 'cdb_forums'  DROP 'allowhtmlpage'
复制代码


或者直接用你的安装前的备份数据还原

2.用安装前的备份文件还原覆盖你修改了的对应文件

[ 本帖最后由 小勤网络 于 2005-9-2 11:21 编辑 ]
dreamnet 发表于 2005-9-1 21:12:48 | 显示全部楼层
不错的hack

[ 本帖最后由 dreamnet 于 2005-9-1 21:14 编辑 ]
回复

使用道具 举报

windgjs 发表于 2005-9-1 21:30:06 | 显示全部楼层
不是首页..是帖子分页,不过...........生成html后路径所用的变量似乎失效了..
回复

使用道具 举报

 楼主| 小勤网络 发表于 2005-9-1 21:33:05 | 显示全部楼层
原帖由 windgjs 于 2005-9-1 21:30 发表
不是首页..是帖子分页,不过...........生成html后路径所用的变量似乎失效了..

没有失效的,你可以看看
http://bbs.xqin.com/htm_data/20/2005-9-1/3851.html
我的演示
PS: 帖子主题首页,也就是第一页,不是帖子分页,因为帖子分页一般是回复的,不怎么需要生HTML,省服务器资源

[ 本帖最后由 小勤网络 于 2005-9-1 21:45 编辑 ]
回复

使用道具 举报

hufanyun 发表于 2005-9-1 21:40:10 | 显示全部楼层
精华了
回复

使用道具 举报

 楼主| 小勤网络 发表于 2005-9-1 21:46:22 | 显示全部楼层
原帖由 hufanyun 于 2005-9-1 21:40 发表
精华了

谢谢~
回复

使用道具 举报

beecheung 发表于 2005-9-1 21:52:17 | 显示全部楼层
这个要顶.
回复

使用道具 举报

freddy 发表于 2005-9-1 22:03:28 | 显示全部楼层
楼上的..你的眼睛!!!!!!!!!!!!!!!!!!!!!!!!!

嘿嘿~正题~支持楼主!
回复

使用道具 举报

windgjs 发表于 2005-9-1 22:15:37 | 显示全部楼层
原帖由 小勤网络 于 2005-9-1 21:33 发表

没有失效的,你可以看看
http://bbs.xqin.com/htm_data/20/2005-9-1/3851.html
我的演示
PS: 帖子主题首页,也就是第一页,不是帖子分页,因为帖子分页一般是回复的,不怎么需要生HTML,省服务器资源

晕..偶理解错误,以为是说生成首页的html....
  1. return '<img src="{$boardurl}images/attachicons/'.$GLOBALS['_DCACHE']['attachicon'][$typeid].'" align="absmiddle" border="0">';
复制代码

这句不用替换的
回复

使用道具 举报

 楼主| 小勤网络 发表于 2005-9-1 22:22:51 | 显示全部楼层
原帖由 windgjs 于 2005-9-1 22:15 发表

晕..偶理解错误,以为是说生成首页的html....
[code]return '<img src="{$boardurl}images/attachicons/'.$GLOBALS['_DCACHE']['attachicon'][$typeid].'" align="absmiddle" border=&q ...

这句不替换附件路径有问题的,最好换成自己相应根目录的路径比如/或者/bbs/这种
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 21:50 , Processed in 0.034260 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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