**单页制作教程 FOR Discuz! X1.5

安装、卸载

在后台管理界面UCenter设置中,在管理员输入UCenter的密码时,对于用户的输入没有过滤,导致了输入的数据直接写入文件中,利用步骤如下:

看了非常多的论坛地图插件和博客地图插件,总觉得不是很好用,不是安装太复杂就是使用太复杂,而且效果也是差强人意。最近在做MapURL.info的网站,就是一个通过URL分享地图的简单网站(详细介绍),于是乎想把网站的功能搬到博客和论坛。其实,不管是谁开发的地图插件,基本上都是通过插入一个iframe实现,于是我做了iframe,而论坛一般会限制iframe,所以将iframe通过Discuz
Code(UBB
code也是同理)来实现,这样在论坛也就可以显示地图了。好吧,我们具体来讲解一下需求和操作吧。

前言
  应一位网友要求开卷工作室制作了这个自动隐藏帖子的插件,主要用途是无需手动添加 [hide] 代码,则自动隐藏所有发布的帖子内容,会员需要回复后才可以浏览该帖。这想法相当不错,要实现这一功能也不很难,所以就帮忙做了一个出来。插件提供两种自动隐藏的模式,一种是只隐藏一楼的帖子,另一种是隐藏包括回复在内的所有帖子。因为秉承开卷工作室绿色插件的作风,能够不改动数据库的就不改,所以本插件不增加后台开关功能,而只提供 config.inc.php 的开关设置。
  本插件适用于 Discuz! 所有版本的论坛,但这里只提供 DZ4.1 / DZ5.0 / DZ5.5 的安装方法,其它版本的论坛请参照着自行修改。
更新记录:
2007-01-25        修正不包含论坛代码的帖子无法隐藏的问题;增加隐藏除一楼以外的所有帖子的设置;增加可预览字节设置,设置后可以预览部分被隐藏的帖子内容,从而让内容好的帖子吸引更多人参与回帖;增加可自定义哪些论坛开启自动隐藏功能的设置。
2007-01-27        增加对游客访问时只能阅读部分内容的设置,效果如下:
  非常抱歉,您的当前状态为游客,因此只能阅读部分内容。要阅读完整内容请:注册 或 登录 。
2007-01-28        更正公告及短消息也会被自动隐藏,同时因缺少变量而报错的问题;增加可自定义允许或排除指定论坛自动隐藏功能的设置;提供解决文本截断后页面代码错乱问题的两种解决办法,大家可根据自己的情况选择使用。
2007-02-04        增加与干扰码的兼容性修改。
2007-03-14        增加 Discuz!5.5 的安装方法,并测试成功。
名称:开卷工作室自动隐藏帖子[增强版] For Discuz! All Version
难度:一般
适用版本:Discuz!所有版本
作者:KaijuanStudio
发布日期:2006-11-07
更新日期:2007-03-14
发布站点:中国制造论坛
技术支持:
安装方法如下:
修改:viewthread.php
打开:viewthread.php
DZ4.1,找到:
$post[‘message’] = discuzcode($post[‘message’], $post[‘smileyoff’], $post[‘bbcodeoff’], $post[‘htmlon’], $forum[‘allowsmilies’], $forum[‘allowbbcode’], $forum[‘allowimgcode’], $forum[‘allowhtml’], ($forum[‘jammer’] && $post[‘authorid’] != $discuz_uid ? 1 : 0));替换为:
$post[‘message’] = discuzcode($post[‘message’], $post[‘smileyoff’], $post[‘bbcodeoff’], $post[‘htmlon’], $forum[‘allowsmilies’], $forum[‘allowbbcode’], $forum[‘allowimgcode’], $forum[‘allowhtml’], ($forum[‘jammer’] && $post[‘authorid’] != $discuz_uid ? 1 : 0), $post[‘first’]);DZ5.0,找到:
$post[‘message’] = discuzcode($post[‘message’], $post[‘smileyoff’], $post[‘bbcodeoff’], $post[‘htmlon’], $forum[‘allowsmilies’], $forum[‘allowbbcode’], ($forum[‘allowimgcode’] && $showimages ? 1 : 0), $forum[‘allowhtml’], ($forum[‘jammer’] && $post[‘authorid’] != $discuz_uid ? 1 : 0), $pasetype, $post[‘authorid’]);替换为:
$post[‘message’] = discuzcode($post[‘message’], $post[‘smileyoff’], $post[‘bbcodeoff’], $post[‘htmlon’], $forum[‘allowsmilies’], $forum[‘allowbbcode’], ($forum[‘allowimgcode’] && $showimages ? 1 : 0), $forum[‘allowhtml’], ($forum[‘jammer’] && $post[‘authorid’] != $discuz_uid ? 1 : 0), $pasetype, $post[‘authorid’], $post[‘first’]);DZ5.5,找到:
$post[‘message’] = discuzcode($post[‘message’], $post[‘smileyoff’], $post[‘bbcodeoff’], $post[‘htmlon’], $forum[‘allowsmilies’], $forum[‘allowbbcode’], ($forum[‘allowimgcode’] && $showimages ? 1 : 0), $forum[‘allowhtml’], ($forum[‘jammer’] && $post[‘authorid’] != $discuz_uid ? 1 : 0), 0, $post[‘authorid’]);替换为:
$post[‘message’] = discuzcode($post[‘message’], $post[‘smileyoff’], $post[‘bbcodeoff’], $post[‘htmlon’], $forum[‘allowsmilies’], $forum[‘allowbbcode’], ($forum[‘allowimgcode’] && $showimages ? 1 : 0), $forum[‘allowhtml’], ($forum[‘jammer’] && $post[‘authorid’] != $discuz_uid ? 1 : 0), 0, $post[‘authorid’], $post[‘first’]);
修改:discuzcode.func.php
打开:include\discuzcode.func.php
DZ4.1,找到:
function discuzcode($message, $smileyoff, $bbcodeoff, $htmlon = 0, $allowsmilies = 1, $allowbbcode = 1, $allowimgcode = 1, $allowhtml = 0, $jammer = 0) {替换为:
function discuzcode($message, $smileyoff, $bbcodeoff, $htmlon = 0, $allowsmilies = 1, $allowbbcode = 1, $allowimgcode = 1, $allowhtml = 0, $jammer = 0, $first = ‘0’) {再将下面一行的:
        global $discuzcodes, $credits, $tid, $discuz_uid, $highlight, $maxsmilies, $db, $tablepre;替换为:
        global $discuzcodes, $credits, $fid, $tid, $discuz_uid, $highlight, $maxsmilies, $db, $tablepre, $hidemsg, $hidecut, $leavemod, $hidefids;
        $bbcodeoff = $hidemsg ? ” : $bbcodeoff;继续找到:
if(preg_match(“/\[hide=?\d*\].+?\[\/hide\]/is”, $message)) {替换为:
//hidemsg by KaijuanStudio
                if($hidefids) {
                        foreach($hidefids as $hidefid) {
                                if($leavemod) {
                                        if($fid == $hidefid) {
                                                $unallowed = 1;
                                        } else {
                                                $allowhide = 1;
                                        }
                                } else {
                                        if($fid == $hidefid) {
                                                $allowhide = 1;
                                        }
                                }
                        }
                } elseif($fid) {
                        $allowhide = 1;
                }
                if($hidemsg && $allowhide && !$unallowed) {
                        global $language;
                        include_once language(‘misc’);
                        $hidefirst = $hidemsg == 1 ? $first : ($hidemsg == 2 ? 1 : ($hidemsg == 3 ? ($first ? ” : 1) : ”));
                        if($hidefirst) {
                                if($hidecut                                         $query = $db->query(“SELECT pid FROM {$tablepre}posts WHERE tid=’$tid’ AND authorid=’$discuz_uid’ LIMIT 1”);
                                        if($GLOBALS[‘forum’][‘ismoderator’] || $db->result($query, 0)) {
                                                $message = ”.$language[‘post_hide_reply’].’
‘.
                                                ‘==============================

**在Discuz! X1.5根目录下新建一个文件,host.php,源码内容如下

插件作者可以设计 2
个脚本文件用于插件的安装和卸载,文件名任意。脚本中可用 runquery()
函数执行 SQL 语句,表名可以直接写“cdb_”。插件作者只需在导出的 XML
文件结尾加上安装、卸载脚本的文件名即可

1.首先,针对目标网站,需要找个可以访问的公网服务器搭建mysql,然后添加一个用户,并把密码设置成为“123′);phpinfo();//”;

我一般先想好需求然后再开始做页面,那么论坛地图插件主要实现的是什么呢?当然是显示地图。但地图有简单和复杂之分啊,那用数据库?我不想用数据库,因为数据库的操作不仅仅写代码太麻烦,而且使用的时候也会变的很复杂。其实细想一下,插入一份地图,最简单的就是一个marker,复杂的则可能有多个点或线等对象,对于简单的地图我们不使用数据库就可以实现,对于复杂地图难道一定要用数据库吗?即使用到数据库,也不一定完全能够表达出一个复杂的地图,或者由于操作的过于繁杂而让他人本身就不想放置一份地图了,不过,如果在本地通过软件先将复杂地图编辑好,做成一份gpx或者kml文件,也许是不错的。所以,需求就是显示一个地图,可以简单可以复杂,复杂的就通过加载gpx或者kml文件来实现,另外就是在发贴操作的时候要简单。而值得高兴的是,我在做MapURL.info的时候就已经实现了这些功能,大家可以通过帮助页面看到这几大功能,而我现在只需要在论坛中简单插入地图就可以了。

‘.
                                                $message.’

cachelist = $cachelist; $discuz->init(); include
template(‘host’);//调用单页模版文件 ?>
解释:
其中的“include template(‘host’);”表示的是调用template/default/host.htm
文件的意思。
host.htm 源码:

安装、卸载程序中可随意设计页面的跳转,只要在插件安装、卸载结束时候输出添加以下代码即可。

2.以管理员身份登录后台,进入站长—UCenter设置

说了这么多废话回过头来说安装。如果说论坛本身支持iframe那么我也就没有写这个帖子的必要了,但虽然论坛不支持iframe不过我们作为管理员倒可以让用户插入iframe,这个方法就是通过自定义Discuz
Code的方法实现。

‘.
                                                ‘==============================’;
                                        } else {
                                                $message = $hidecut ? ($hidecut >= strlen($message) ? $message : dhtmlspecialchars(cutstr($message, $hidecut)).’

{subtemplate common/header}       
 $_G[setting][bbname]
›单页 <>

$finish=TRUE;
升级

图片 1

进入论坛后台管理-界面-编辑器设置-Discuz!代码,新增一个mapurl的标签,如下图所示:

‘.$language[‘post_hide_reply_hidden’].’‘) : ‘‘.$language[‘post_hide_reply_hidden’].’‘;
                                        }
                                }
                        } elseif(!$discuz_uid && $hidemsg == 4 && $hidecut) {
                                $message = $hidecut >= strlen($message) ? $message : dhtmlspecialchars(cutstr($message, $hidecut)).’

                                                                     
这里是自己正文区域的代码                 <>         <>
<> {subtemplate common/footer}
到这里单页制作教程 FOR Discuz! X1.5就结束了!!!

插件作者可以设计一个脚本文件用于插件的升级,文件名任意。脚本中可用
runquery() 函数执行 SQL
语句,表名可以直接写“cdb_”。插件作者只需在导出的 XML
文件结尾加上升级脚本的文件名即可

3.此时修改UCenter连接数据库信息为之前在公网mysql添加的用户,这里为abc123′);phpinfo();//

图片 2

‘.$language[‘post_hide_limit’];
                        }
                } elseif(preg_match(“/\[hide=?\d*\].+?\[\/hide\]/is”, $message)) {DZ5.0/DZ5.5,找到:
function discuzcode($message, $smileyoff, $bbcodeoff, $htmlon = 0, $allowsmilies = 1, $allowbbcode = 1, $allowimgcode = 1, $allowhtml = 0, $jammer = 0, $parsetype = ‘0’, $authorid = ‘0’) {替换为:
function discuzcode($message, $smileyoff, $bbcodeoff, $htmlon = 0, $allowsmilies = 1, $allowbbcode = 1, $allowimgcode = 1, $allowhtml = 0, $jammer = 0, $parsetype = ‘0’, $authorid = ‘0’, $first = ‘0’) {DZ5.0 再将下面一行的:
        global $discuzcodes, $credits, $tid, $discuz_uid, $highlight, $maxsmilies, $db, $tablepre;替换为:
        global $discuzcodes, $credits, $fid, $tid, $discuz_uid, $highlight, $maxsmilies, $db, $tablepre, $hidemsg, $hidecut, $leavemod, $hidefids;
        $bbcodeoff = $hidemsg ? ” : $bbcodeoff;DZ5.5 将下面一行的:
        global $discuzcodes, $credits, $tid, $discuz_uid, $highlight, $maxsmilies, $db, $tablepre, $hideattach;替换为:
        global $discuzcodes, $credits, $fid, $tid, $discuz_uid, $highlight, $maxsmilies, $db, $tablepre, $hideattach, $hidemsg, $hidecut, $leavemod, $hidefids;
        $bbcodeoff = $hidemsg ? ” : $bbcodeoff;DZ5.0 继续找到:
if(!in_array($parsetype, array(1, 2)) && preg_match(“/\[hide=?\d*\].+?\[\/hide\]/is”, $message)) {替换为:
//hidemsg by KaijuanStudio
                if($hidefids) {
                        foreach($hidefids as $hidefid) {
                                if($leavemod) {
                                        if($fid == $hidefid) {
                                                $unallowed = 1;
                                        } else {
                                                $allowhide = 1;
                                        }
                                } else {
                                        if($fid == $hidefid) {
                                                $allowhide = 1;
                                        }
                                }
                        }
                } elseif($fid) {
                        $allowhide = 1;
                }
                if($hidemsg && $allowhide && !$unallowed) {
                        global $language;
                        include_once language(‘misc’);
                        $hidefirst = $hidemsg == 1 ? $first : ($hidemsg == 2 ? 1 : ($hidemsg == 3 ? ($first ? ” : 1) : ”));
                        if($hidefirst) {
                                if($hidecut                                         $query = $db->query(“SELECT pid FROM {$tablepre}posts WHERE tid=’$tid’ AND authorid=’$discuz_uid’ LIMIT 1”);
                                        if($GLOBALS[‘forum’][‘ismoderator’] || $db->result($query, 0)) {
                                                $message = ”.$language[‘post_hide_reply’].’
‘.
                                                ‘==============================

附:

升级程序中可通过 $fromversion 和 $toversion
变量判断升级的具体版本号,并随意设计页面的跳转,只要在插件升级结束时候输出添加以下代码即可。

此时配置文件已被成功修改

其中map.gif是一个图标,我做了一个图片 3,可以直接另存为map.gif到你的电脑,然后将map.gif上传到论坛的images\common目录下,当然你也可以自己定制一个。新增完成后点详情进行设置,如下图所示:

‘.
                                                $message.’

嵌入点的学习过程

$finish=TRUE;

图片 4

图片 5

‘.
                                                ‘==============================’;
                                        } else {
                                                $message = $hidecut ? ($hidecut >= strlen($message) ? $message : dhtmlspecialchars(cutstr($message, $hidecut)).’

问:如何知道嵌入点有那些?

插件的当前版本号位于 XML 文件的以下分支中,可自行更改。

4.成功执行了phpinfo()

其中,替换的内容为:<iframe src=””
width=”640″ height=”480″ frameborder=”0″ marginwidth=”0″ scrolling=”no”
marginheight=”0″></iframe>,就是一个iframe而已,而#后面的内容通过输入获得。需要说明一下的是:

‘.$language[‘post_hide_reply_hidden’].’‘) : ‘‘.$language[‘post_hide_reply_hidden’].’‘;
                                        }
                                }
                        } elseif(!$discuz_uid && $hidemsg == 4 && $hidecut) {
                                $message = $hidecut >= strlen($message) ? $message : dhtmlspecialchars(cutstr($message, $hidecut)).’

答:打开“source/class/class_template.php”找到含有“for
Developer”关键字的那一行一看即可明白有那些嵌入点。
图片 6

……

图片 7

图片 8

‘.$language[‘post_hide_limit’];
                        }
                } elseif(!in_array($parsetype, array(1, 2)) && preg_match(“/\[hide=?\d*\].+?\[\/hide\]/is”, $message)) {DZ5.5 继续找到:
if($parsetype != 1 && preg_match(“/\[hide=?\d*\].+?\[\/hide\]/is”, $message)) {替换为:
//hidemsg by KaijuanStudio
                if($hidefids) {
                        foreach($hidefids as $hidefid) {
                                if($leavemod) {
                                        if($fid == $hidefid) {
                                                $unallowed = 1;
                                        } else {
                                                $allowhide = 1;
                                        }
                                } else {
                                        if($fid == $hidefid) {
                                                $allowhide = 1;
                                        }
                                }
                        }
                } elseif($fid) {
                        $allowhide = 1;
                }
                if($hidemsg && $allowhide && !$unallowed) {
                        global $language;
                        include_once language(‘misc’);
                        $hidefirst = $hidemsg == 1 ? $first : ($hidemsg == 2 ? 1 : ($hidemsg == 3 ? ($first ? ” : 1) : ”));
                        if($hidefirst) {
                                if($hidecut                                         $query = $db->query(“SELECT pid FROM {$tablepre}posts WHERE tid=’$tid’ AND authorid=’$discuz_uid’ LIMIT 1”);
                                        if($GLOBALS[‘forum’][‘ismoderator’] || $db->result($query, 0)) {
                                                $message = ”.$language[‘post_hide_reply’].’
‘.
                                                ‘==============================

图片 9

……

影响版本:

点那按钮,然后输入地图控制代码,提交后就表示插入了一个地图。
效果如下图所示:

‘.
                                                $message.’

实验过程:
第一步:
进入DZ后台,接着进入插件管理->设计新插件 按要求输入相应内容即可。
第二步:
当第一步完成以后,页面会自动跳转到新设计的插件信息页面,这时点击
“模块”
图片 10
第三步:
进入论坛“source/plugin/”目录下,在这个目录下新增一个文件夹,文件夹名称是刚刚第一步中“唯一标识符”中所输入的值。建立好目录以后,在该目录下新增demo.class.php文件
源码内如如下:

检测

Discuz_X3.3_SC_GBK

图片 11

‘.
                                                ‘==============================’;
                                        } else {
                                                $message = $hidecut ? ($hidecut >= strlen($message) ? $message : dhtmlspecialchars(cutstr($message, $hidecut)).’

exit(‘Access Denied’); } //全局嵌入点类(必须存在) class
plugin_mfyoyouid { }  //全局脚本嵌入点类 class
plugin_mfyoyouid_forum extends plugin_mfyoyouid{ //嵌入点为
viewthread_useraction function
viewthread_useraction_output(){ global $_G;
loadcache(‘plugin’);
$return=’分享1′; return $return;
} }
?>
图片 12
附:
详细解说请查看手册:

插件作者可以设计一个脚本文件用于插件在安装、卸载、升级操作前的检测,文件名任意。插件作者只需在导出的
XML 文件结尾加上检测脚本的文件名即可

Discuz_X3.3_SC_UTF8

当然,你也可以插入其他一些地图控制代码,比如复杂的展示一个kml文件“[mapurl]wttghbcf7uxvm13-http%3A%2F%2Fmapurl.info%2Fyangchenghuchixie.kml[/mapurl]”,你可以得到如下效果:

‘.$language[‘post_hide_reply_hidden’].’‘) : ‘‘.$language[‘post_hide_reply_hidden’].’‘;
                                        }
                                }
                        } elseif(!$discuz_uid && $hidemsg == 4 && $hidecut) {
                                $message = $hidecut >= strlen($message) ? $message : dhtmlspecialchars(cutstr($message, $hidecut)).’

授权协议、插件介绍

Discuz_X3.3_TC_BIG5

图片 13

‘.$language[‘post_hide_limit’];
                        }
                } elseif($parsetype != 1 && preg_match(“/\[hide=?\d*\].+?\[\/hide\]/is”, $message)) {
解决文本截断后代码错乱问题 (DZ4.1/DZ5.0/DZ5.5 相同)
解决方法一(推荐):
将上面已修改好的代码,选择从:
//hidemsg by KaijuanStudio开头,一直到:
                        $message = preg_replace(“/\[hide=(\d+)\]\s*(.+?)\s*\[\/hide\]/ies”, “creditshide(\\1,’\\2′)”, $message);
                }结尾的所有代码,然后将这一大段代码移动到:
if(!$bbcodeoff && $allowbbcode) {的下面一行里。
  这一方法最为简单,适用于没有启用 HTML 代码的论坛,对于文本截断末尾出现诸如没有闭合的代码,例如缺少:[/quote]、[/url]、[/img] 的内容,将以代码的方式显示。
当前1/2页 12下一页

插件在安装的时候您可以自定义授权信息文本,文本支持 Discuz!
代码,站长同意后才能安装插件。如果插件存在后台管理界面或者变量配置,那么插件介绍文本会显示在插件后台页面中。插件作者只需在导出的
XML 文件结尾加上以下内容即可

Discuz_X3.3_TC_UTF8

更多地图控制代码可以通过MapURL.info中获得,我们提供了向导页面,按照向导生成代码即可,所有方法都可以通过帮助获得。

版本兼容性设置

Discuz_X3.2_SC_GBK

 

请仔细检查您的插件是否可以在相应的 Discuz! 版本中运行。然后在 XML
文件的以下分支中自行更改。

Discuz_X3.2_SC_UTF8

罗嗦的说了非常多,边聊天边写这篇日志,所以很乱糟糟,大家将就着看吧。如果有什么问题欢迎留言,我尽量解答。如有好的建议也欢迎提出哦。最后也希望我的MapURL.info网站能够给你带来一些方便吧。

如您的插件兼容多个版本,请用逗号(,)分隔,如“X2,X2.5”(此写法从 Discuz!
X2 R20120329 后开始支持)

Discuz_X3.2_TC_BIG5

……

Discuz_X3.2_TC_UTF8

……

Discuz_X2.5_SC_GBK

……

Discuz_X2.5_SC_UTF8

其他论坛数据导入

Discuz_X2.5_TC_BIG5

插件安装时可以直接导入一个或多个论坛数据,这些论坛数据包括表情(smilies)、风格(styles)的数据。在导出的
XML
文件结尾加上需要导入数据的类型和数据文件名即可,多个文件名用逗号(“,”)分隔。

Discuz_X2.5_TC_UTF8

discuz_smilies_test.xml]]>

修复方法,升级最新的Discuz_X3.4版本.

小提示

如果导出的 XML 文件名以 SC_GBK、SC_UTF8、TC_BIG5、TC_UTF8
结尾,显示的时候将直接显示为“简体”、“繁体”、“UTF8”等字样。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图