Chinaunix首页 | 论坛 | 博客
  • 博客访问: 249737
  • 博文数量: 51
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 575
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-22 13:49
文章分类
文章存档

2009年(1)

2008年(13)

2007年(7)

2006年(30)

我的朋友

分类:

2007-01-01 00:42:22

现在中文的php论坛,最流行的莫过于Discuz!了。只是他们的手机浏览wap版本功能上一直都相当弱,连基本的功能都不全。最近老大喊我来给公司原来的leobbs论坛换成discuz的代码,工作之余顺便也研究了一下,同时主动自发的给discuz的wap版本加上了更多的功能。直接在ssh到linux shell下用vim编辑,然后用支持wap浏览的opera浏览器查看并调试效果。
由于自己根本就没有php基础(……),所以主要做的事情是移植和编写简单的程序。不过赞一下自己对代码的阅读理解和快速入手的能力……

主要改进的功能包括:首页板块列表的改进、页面主题列表的改进、主题浏览的改进、翻页的改进、快速发文和回复,引用作者原文,[img]等discuz代码以及表情在wap下的解析,以及简单用户注册等。这些其实都是在www论坛里面基本的功能,这里只是在wap增加与改进了它们的接口,并使之与标准的wml语言(wap 1.x)兼容,同时照顾手机屏幕尺寸小,显示余地不大等情况。
计划增加的包括:编辑帖子、版主删贴。其它的还没有想好。


1、首页的重新编排:
原来discuz的首页是版面分类,需要多次操作才能进入主题列表,这里按照www的习惯,把所有的版面都显示到首页来了。目前适用于只有十来个版面,而且版面下没有子版面的规模较小的论坛。

这个比较简单,在wap/include下面,修改home.inc.php。查找

echo "

$lang[home_forums]
";

foreach($_DCACHE['forums'] as $fid => $forum) {
    if($forum['type'] == 'group') {
        echo "$forum[name]
"
;
    } elseif($forum['type'] == 'forum' && !$forum['fup']) {
        $catforumexists = 1;
    }
}


这一段,把它们替换为下面的语句:

echo "

";
foreach($_DCACHE['forums'] as $fid => $forum) {
    if($forum['type'] == 'group')
    {
        echo "
+$forum[name]+
"
;
    }
    elseif ($forum['type']== 'forum')
    {
        echo "".dhtmlspecialchars($forum['name'])."
";
    }
    elseif(!$forum['fup']){
        $catforumexists = 1;
    }

}


如果想在首页显示logo,则在可以在home.inc.php中查找

echo "

$bbname

\n";


改为

echo "

\"文字\"/
$bbname

\n";


注意照顾到手机屏幕,这个logo的尺寸和大小都不能太大。2~4k就好。gif格式的一般的手机浏览器都可以支持。

待改进的地方:主要是版面数量太多的话,考虑以多个(wml的)card来显示。

2、版面内主题列表的显示。
原来discuz的wap,版面主题列表很土很丑,我参考了几个主流的wap论坛,给它稍微重新排了一下版。主要包括:
链接不包括主题序号,显示主题作者的id而不是最后回贴者的id,显示主题的阅读数和回复数,不显示更新时间。同时在超过20篇回复时显示hot图片。
需要修改的文件是wap/include/forum.inc.php
查找

$lang['forum_thread_digest'] : '');


从它的下一行开始,一直到最近的一个}之间,全部替换成如下语句,实现翻页的改进和快速发帖。

        echo "

".++$number." $thread[prefix]".cutstr($thread['subject'], 30)."".($thread[replies]> 20? "\"hot\"/": "")."
\n"
.
            [$thread[author]] 阅$thread[views]次/回$thread[replies]次"."
\n"
.
            "

\n";


注意:这里需要自己找一个hot.gif,把它放到$DISCUZSRC/images/default/中。

这段代码后面是表示while循环结束的块号"}",在这个花括号的下面,一直到最后一行表示php语句结束的“?>”,之间的部分替换为如下语句:

echo "


".
        ($start_limit + $waptpp < $forum['threads'] ?
            ($page == 1?
                "[.($page + 1)."\">下页][.ceil($forum['threads']/20)."\">最后]":
                "[最前][.($page - 1)."\">上页][.($page + 1)."\">下页][.ceil($forum['threads']/20)."\">最后]"):
            ($page == 1?
                "":
                "[最前][.($page - 1)."\">上页]")).
        "
\n"
.
        ($discuz_uid? "

$lang[subject]:

$lang[message]:


        

发表话题 .formhash()."\" />

" : "").    
        "
$lang[forum]:"
.dhtmlspecialchars(cutstr(strip_tags($forum['name']), 20))."

\n";


3、文章内容,做的改进包括:
改进原来单调不堪的作者、回贴序号、时间等的显示;加入翻页;
引用原文;
快速回复。

修改的文件为wap/include/thread.inc.php。

查找

$post['author'] = !$post['anonymous'] ? $post['author'] : $lang['anonymous'];


以及

    if($breaked) {


把它们之间的内容替换为:

    $threadposts .= ($start? "

#".($start + 1)."楼  [$post[author]]
$post[subject]

".$post['message']."
\n" : "< p>主题:$post[subject]
----

< p>楼主  [$post[author]]
"
.$post['message']."
\n"
).
        "
\n[发表于"
.gmdate("$wapdateformat $timeformat", $post['dateline'] + $timeoffset * 3600)."]
"
.
        ($discuz_user? ".($start + 1)."\">引用":"")."

\n"
;

然后修改wap/include/post.inc.php

查找

    if(empty($subject) && empty($message)) {


这一行的上面加上以下内容:

if($offset)
    {
        if($offset == 1)
            $subject = '回楼主';
        else
            $subject = "回".$offset."楼";

        $query = $db->query("SELECT * FROM {$tablepre}posts WHERE pid='$pid' AND invisible='0'");
        $post = $db->fetch_array($query);
        $post['author'] = !$post['anonymous'] ? $post['author'] : $lang['anonymous'];
        $repquote = "[quote]".$post['author']."在".gmdate("$wapdateformat $timeformat", $post['dateline'] + $timeoffset * 3600)."的大作中提到:[br]".$post[message]."[/quote]";

        echo "

$lang[subject]:

\n".
            "

原文:

\n"
.
            "

$lang[message]:

\n"
.
            "

$lang[submit]".
            "\n".
            "\n".
            "\n".
            "\n".
            ".formhash()."\" />\n".
            "\n".
            "

\n"
;
    }


注:引用发文的前提是实现了discuz的[quote][/quote]代码的解析。如何实现请接着看。

以下为实现更好的翻页:
在wap/include/thread.inc.php中,查找

while($post = $db->fetch_array($query)) {


以及

$post['author'] = !$post['anonymous'] ? $post['author'] : $lang['anonymous'];


把它们之间的内容删除,然后查找

$next_thread = $db->fetch_array($query);


一直到最后一行的“?>”之间,把它们全部替换为

echo $threadposts."

".
    ((($start - 1 == $thread['replies'] && !$offset) || $start == ($thread['replies'] - 1))?
    ($post_start?
        "[最前][上页]":
        ""):
    ($post_start?
        "[最前][上页][下页][.($thread['replies'] - 1)."\">最后]":
        "[下页][.($thread['replies'] - 1)."\">最后]"))
    ."

\n".
    ($discuz_uid ? "

$lang[subject]:


    

$lang[message]:


    

回复本帖
    
    
    .formhash()."\" />
    

$lang[post_new]
\n"
: '').
    "
返回"
.dhtmlspecialchars(cutstr(strip_tags($forum['name']), 20))."\n".
    ($next_thread ? "
$lang[next_thread]:"
.cutstr($next_thread['subject'], 20)."\n" : '').
    "\n";


哦,还有,查找

$offset = isset($offset) ? intval($offset) : 0;


在这一行下面加入以下语句:

$start? $post_start = 1 : $post_start = 0;

if($start - 4 < 0 )
     $oldstart = 0;
else
     $oldstart = $start - 10;
if ($oldstart < 0 )
    $oldstart = 0;


注:文章内容的翻页显示是一开始做的,当时由于对discuz这里的机制不是很清晰,所以写出来的比较多,虽然能正常实现,但还是可以优化掉一些东西的。这个以后再改,呵呵。
另外现在的翻页是按照每页十个帖子来做的,这个可以改成从数据库中获取管理员的后台设置,这样要好一点,另外一个帖子过长的话考虑翻页,这也是以后打算改进的地方。

4、discuz代码以及表情代码的解析。

这个是直接移植了include/discuzcode.func.php的东东,并把这些代码的解析改为更适合wap浏览的内容。
包括:
[img]图片[/img]解析为一个图片链接,避免图片过大的时候一是手机屏幕尺寸不够,一是节约流量。用户有兴趣再自己点击进去看。对手机浏览来说,100k的图片已经算是大文件了……
加入了[br]作为wap下单行文本输入框的换行标志;
一些wml主要是wap 1.x不支持或者支持不足的特性例如字体类型、大小、颜色等。把它们的html代码过滤掉。

修改wap/include/global.func.php,在最后一行的“?>”之前,加入以下函数语句:

function wap_discuzcode($message, $smileyoff, $bbcodeoff, $htmlon = 0, $allowsmilies = 1, $allowbbcode = 1, $allowimgcode = 1, $allowhtml = 0, $jammer = 0, $parsetype = '0', $authorid = '0') {
    global $discuzcodes, $credits, $tid, $discuz_uid, $highlight, $maxsmilies, $db, $tablepre;


    if($parsetype != 1 && !$bbcodeoff && $allowbbcode) {
        $message = preg_replace("/\s*\[code\](.+?)\[\/code\]\s*/ies", "wap_codedisp('\\1')", $message);
    }

    if(!$htmlon && !$allowhtml) {
        $message = $jammer ? preg_replace("/\r\n|\n|\r/e", "jammer()", dhtmlspecialchars($message)) : dhtmlspecialchars($message);
    }

    if(!$smileyoff && $allowsmilies && !empty($GLOBALS['_DCACHE']['smilies']) && is_array($GLOBALS['_DCACHE']['smilies'])) {
        $message = preg_replace($GLOBALS['_DCACHE']['smilies']['searcharray'], $GLOBALS['_DCACHE']['smilies']['replacearray'], $message, 4);
    }

    if(!$bbcodeoff && $allowbbcode) {
        if(empty($discuzcodes['searcharray'])) {
            $discuzcodes['searcharray']['bbcode_regexp'] = array(
                "/\[url\]\s*(www.|https?:\/\/|ftp:\/\/|gopher:\/\/|news:\/\/|telnet:\/\/|rtsp:\/\/|mms:\/\/|callto:\/\/|ed2k:\/\/){1}([^\[\"']+?)\s*\[\/url\]/ie",
                "/\[url=www.([^\[\"']+?)\](.+?)\[\/url\]/is",
                "/\[url=(https?|ftp|gopher|news|telnet|rtsp|mms|callto|ed2k){1}:\/\/([^\[\"']+?)\](.+?)\[\/url\]/is",
                "/\[email\]\s*([a-z0-9\-_.+]+)@([a-z0-9\-_]+[.][a-z0-9\-_.]+)\s*\[\/email\]/i",
                "/\[email=([a-z0-9\-_.+]+)@([a-z0-9\-_]+[.][a-z0-9\-_.]+)\](.+?)\[\/email\]/is",
                "/\[color=([^\[\<]+?)\]/i",
                "/\[size=(\d+?)\]/i",
                "/\[size=(\d+(px|pt|in|cm|mm|pc|em|ex|%)+?)\]/i",
                "/\[font=([^\[\<]+?)\]/i",
                "/\[align=([^\[\<]+?)\]/i"
            );
            $discuzcodes['replacearray']['bbcode_regexp'] = array(
                "wap_cuturl('\\1\\2')",
                "\\2",
                "\\3",
                "\\1@\\2",
                "\\1@\\2",
                "",                //replace [color] to <b>
                "",                        //ignore [size]
                "",                        //ignore [size]
                "",                        //replace [font] to <i>
                "

"
            );

            $discuzcodes['searcharray']['bbcode_regexp'][] = "/\s*\[table(=(\d{1,3}%?))?\][\n\r]*(.+?)[\n\r]*\[\/table\]\s*/ies";
            $discuzcodes['replacearray']['bbcode_regexp'][] = "parsetable('\\2', '\\3')";
            $discuzcodes['searcharray']['bbcode_regexp'][] = "/\s*\[table(=(\d{1,3}%?))?\][\n\r]*(.+?)[\n\r]*\[\/table\]\s*/ies";
            $discuzcodes['replacearray']['bbcode_regexp'][] = "parsetable('\\2', '\\3')";

            if($parsetype != 1) {
                $discuzcodes['searcharray']['bbcode_regexp'][] = "/\s*\[quote\][\n\r]*(.+?)[\n\r]*\[\/quote\]\s*/is";
                $discuzcodes['searcharray']['bbcode_regexp'][] = "/\s*\[free\][\n\r]*(.+?)[\n\r]*\[\/free\]\s*/is";
                $discuzcodes['replacearray']['bbcode_regexp'][] = "

-----以下为引用-----
\\1
------引用结束------


";
                $discuzcodes['replacearray']['bbcode_regexp'][] = "

FREE:

\\1


"
;
            }

            $discuzcodes['searcharray']['bbcode_regexp'] = array_merge($discuzcodes['searcharray']['bbcode_regexp'], $discuzcodes['searcharray']['bbcode_regexp']);
            $discuzcodes['replacearray']['bbcode_regexp'] = array_merge($discuzcodes['replacearray']['bbcode_regexp'], $discuzcodes['replacearray']['bbcode_regexp']);

            $discuzcodes['searcharray']['bbcode_str'] = array(
                '[/color]', '[/size]', '[/font]', '[/align]', '[b]', '[/b]',
                '[i]', '[/i]', '[u]', '[/u]', '[list]', '[list=1]', '[list=a]',
                '[list=A]', '[*]', '[/list]', '[indent]', '[/indent]','[br]'
            );

            $discuzcodes['replacearray']['bbcode_str'] = array(
                '
', '', '', '

'
, '', '', '',
                '
', '', '', '

', '

', '

',
                '

', '
'
, '

'
, '    ', '','
'

            );
        }

        if($parsetype != 1) {
            $discuzcodes['searcharray']['bbcode_regexp'][100] = "/\[payto\]\s*\(seller\)(.*)\(\/seller\)\s*(\(subject\)(.*)\(\/subject\))?\s*(\(body\)(.*)\(\/body\))?\s*(\(gross\)(.*)\(\/gross\))?\s*(\(price\)(.*)\(\/price\))?\s*(\(url\)(.*)\(\/url\))?\s*(\(type\)(.*)\(\/type\))?\s*(\(transport\)(.*)\(\/transport\))?\s*(\(ordinary_fee\)(.*)\(\/ordinary_fee\))?\s*(\(express_fee\)(.*)\(\/express_fee\))?\s*\[\/payto\]/iesU";
            $discuzcodes['replacearray']['bbcode_regexp'][100] = "payto('\\1',array('subject'=>'\\3','body'=>'\\5','price'=>'\\7','price'=>'\\9','url'=>'\\11','type'=>'\\13','transport'=>'\\15','ordinary_fee'=>'\\17','express_fee'=>'\\19','authorid'=>'$authorid'))";
        }

        @$message = str_replace($discuzcodes['searcharray']['bbcode_str'], $discuzcodes['replacearray']['bbcode_str'],
            preg_replace(
                ($parsetype != 1 && $allowbbcode == 2 && $GLOBALS['_DCACHE']['bbcodes'] ? array_merge($discuzcodes['searcharray']['bbcode_regexp'], $GLOBALS['_DCACHE']['bbcodes']['searcharray']) : $discuzcodes['searcharray']['bbcode_regexp']),
                ($parsetype != 1 && $allowbbcode == 2 && $GLOBALS['_DCACHE']['bbcodes'] ? array_merge($discuzcodes['replacearray']['bbcode_regexp'], $GLOBALS['_DCACHE']['bbcodes']['replacearray']) : $discuzcodes['replacearray']['bbcode_regexp']),
                $message));

        if(!in_array($parsetype, array(1, 2)) && preg_match("/\[hide=?\d*\].+?\[\/hide\]/is", $message)) {
            if(stristr($message, '[hide]')) {
                global $language;
                include_once language('misc');

                $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 = preg_replace("/\[hide\]\s*(.+?)\s*\[\/hide\]/is",
                        ''.$language['post_hide_reply'].'
'.
                        '==============================

'
.
                        '\\1

'
.
                        '==============================',
                        $message);
                } else {
                    $message = preg_replace("/\[hide\](.+?)\[\/hide\]/is", ''.$language['post_hide_reply_hidden'].'', $message);
                }
            }
            $message = preg_replace("/\[hide=(\d+)\]\s*(.+?)\s*\[\/hide\]/ies", "creditshide(\\1,'\\2')", $message);
        }
    }

    if(!$bbcodeoff) {
        if(empty($discuzcodes['searcharray']['imgcode'])) {
            $discuzcodes['searcharray']['imgcode'] = array(
                "/\[swf\]\s*([^\[\<\r\n]+?)\s*\[\/swf\]/ies",
                "/\[img\]\s*([^\[\<\r\n]+?)\s*\[\/img\]/ies",
                "/\[img=(\d{1,3})[x|\,](\d{1,3})\]\s*([^\[\<\r\n]+?)\s*\[\/img\]/ies"
            );

            $discuzcodes['replacearray']['imgcode'] = $allowimgcode ? array(
                "wap_bbcodeurl('\\1', ' Flash ')",
                "wap_bbcodeurl('\\1', '图片链接')",
                "wap_bbcodeurl('\\3', '图片链接')"
            ) : array(
                "wap_bbcodeurl('\\1', 'Flash ')",
                "wap_bbcodeurl('\\1', '图片链接')",
                "wap_bbcodeurl('\\3', '图片链接')"
            );
        }
        $message = preg_replace($discuzcodes['searcharray']['imgcode'], $discuzcodes['replacearray']['imgcode'], $message);
    }

    for($i = 0; $i <= $discuzcodes['pcodecount']; $i++) {
        $message = str_replace("[\tDISCUZ_CODE_$i\t]", $discuzcodes['codehtml'][$i], $message);
    }

    return $htmlon || $allowhtml ? $message : nl2br(str_replace(array("\t", ' ', ' '), array('        ', '   ', '  '), $message));
}

function wap_bbcodeurl($url, $tags) {
    if(!preg_match("/<.+?>/s", $url)) {
        if(!in_array(strtolower(substr($url, 0, 6)), array('http:/', 'ftp://', 'rtsp:/', 'mms://'))) {
            $url = 'http://'.$url;
        }
        return str_replace(array('submit', 'logging.php'), array('', ''), sprintf($tags, $url, addslashes($url)));
    } else {
        return ' '.$url;
    }
}
function wap_codedisp($code) {
    global $discuzcodes;
    $discuzcodes['pcodecount']++;
    $code = htmlspecialchars(str_replace('\\"', '"', preg_replace("/^[\n\r]*(.+?)[\n\r]*$/is", "\\1", $code)));
    $discuzcodes['codehtml'][$discuzcodes['pcodecount']] = "

-----以下为代码-----
$code
------代码结束------


"
;
    $discuzcodes['codecount']++;
    return "[\tDISCUZ_CODE_$discuzcodes[pcodecount]\t]";
}

function wap_cuturl($url) {
    $length = 65;
    $urllink = ".(substr(strtolower($url), 0, 4) == 'www.' ? "" : $url).'\">';
    if(strlen($url) > $length) {
        $url = substr($url, 0, intval($length * 0.5)).' ... '.substr($url, - intval($length * 0.3));
    }
    $urllink .= $url.'
'
;
    return $urllink;
}


然后在wap/include/thread.inc.php中查找

while($post = $db->fetch_array($query)) {


在它的下一行加入:

$post['message'] = wap_discuzcode($post['message'], 0, $post['bbcodeoff'], $post['htmlon'], 1, 1, 1, $forum['allowhtml'], ($forum['jammer'] && $post['authorid'] != $discuz_uid ? 1 : 0), $pasetype, $post['authorid']);


5、简单的用户注册:
随机验证码的机制还没整清楚,这里做了一个取巧的办法,固定一个数字(六乘以七的结果-_-)让用户输入。这一步其实有点瓜,完全可以不要,不知道wap下面有没有恶意的自动注册机器人……
这里是移植了discuz代码根目录下的register.php的,把它进行了修改。
ok,在wap/include/下新建文件register.inc.php,其内容为:

<?php

if(!defined('IN_DISCUZ')) {
    exit('Access Denied');
}

require_once DISCUZ_ROOT.'./include/misc.func.php';

if($discuz_uid) {
    wapmsg('您已登录');
}
if(!$regstatus) {
    wapmsg('对不起,暂时不开放注册功能');
}

$query = $db->query("SELECT * FROM {$tablepre}settings WHERE variable IN ('bbrules', 'bbrulestxt', 'welcomemsg', 'welcomemsgtxt')");

while($setting = $db->fetch_array($query)) {
    $$setting['variable'] = $setting['value'];
}
if($do == viewrules)
{
    $bbrulestxt = nl2br("\n$bbrulestxt\n");
    wapmsg("$bbrulestxt

接受  拒绝

");
}


if(empty($username)) {

    echo "

用户名:(3-15字节之间,不得包含空格和*、\、/等特殊字符)

\n"
.
        "

请输入您的密码:

\n"
.
        "

请确认您输入的密码:

\n"
.
        "

请输入您的有效e-Mail:

\n"
.
        "

请输入六乘以七的结果(阿拉伯数字):

\n"
.
        "

提交".
        "\n".
        "\n".
        "\n".
        "\n".
        "\n".
        "\n".
        "

".($bbrules? "注意:选择提交意味着您接受我们的服务条款":"")."

\n"
;

} else {

    $email = trim($email);
    $username = trim($username);
    $thecode = trim($thecode);

    $guestexp = '\xA1\xA1|\xAC\xA3|^Guest|^\xD3\xCE\xBF\xCD|\xB9\x43\xAB\xC8';

    $censorexp = '/^('.str_replace(array('\\*', "\r\n", ' '), array('.*', '|', ''), preg_quote(($censoruser = trim($censoruser)), '/')).')$/i';
    if(preg_match("/^\s*$|^c:\\con\\con$|[%,\*\"\s\t\<\>\&\?\/]|$guestexp/is", $username) || ($censoruser && @preg_match($censorexp, $username))) {
        wapmsg('非法用户名');
    }

    if(strlen($username) < 3 || strlen($username > 15)) {
        wapmsg('用户名必须在3-15个字符之间');
    }

    $query = $db->query("SELECT uid FROM {$tablepre}members WHERE username='$username'");
    if($db->num_rows($query)) {
        wapmsg('用户$(username)已存在');
    }

    if(!$password1 || $password1 != addslashes($password1)) {
        wapmsg('密码为空或包含非法字符');
    }

    if($password1 != $password2){
        wapmsg('密码前后不一致');
    }


    $invalidemail = $accessemail ? !preg_match($accessexp, $email) : $censoremail && preg_match($censorexp, $email);
    if(!isemail($email) || $invalidemail) {
        wapmsg('email格式不正确');
    }

    if($thecode != 42){
        wapmsg('验证码输入不正确');
    }
    if($regfloodctrl) {
        $query = $db->query("SELECT count FROM {$tablepre}regips WHERE ip='$onlineip' AND count>'0' AND dateline>'$timestamp'-86400");
        if($regattempts = $db->result($query, 0)) {
            if($regattempts >= $regfloodctrl) {
                wapmsg('对不起,同一 IP 地址在 24 小时内只能进行 $regfloodctrl次注册尝试', NULL, 'HALTED');
            } else {
                $db->query("UPDATE {$tablepre}regips SET count=count+1 WHERE ip='$onlineip' AND count>'0'");
            }
        } else {
            $db->query("INSERT INTO {$tablepre}regips (ip, count, dateline)
                VALUES ('$onlineip', '1', '$timestamp')"
);
        }
    }
    $password = md5($password1);
    $showemailnew = 1;
    $newsletter = 1;
    $timeoffsetnew = 9999;
    $db->query("INSERT INTO {$tablepre}members (username, password, secques, gender, adminid, groupid, regip, regdate, lastvisit, lastactivity, posts, credits, extcredits1, extcredits2, extcredits3, extcredits4, extcredits5, extcredits6, extcredits7, extcredits8, email, bday, sigstatus, tpp, ppp, styleid, dateformat, timeformat, pmsound, showemail, newsletter, invisible, timeoffset)
        VALUES ('$username', '$password', '$secques', '$gendernew', '0', '$groupinfo[groupid]', '$onlineip', '$timestamp', '$timestamp', '$timestamp', '0', $initcredits, '$email', '$bday', '$sigstatus', '$tppnew', '$pppnew', '$styleidnew', '$dateformatnew', '$timeformatnew', '$pmsoundnew', '$showemailnew', '$newsletter', '$invisiblenew', '$timeoffsetnew')"
);
    $uid = $db->insert_id();

    $db->query("INSERT INTO {$tablepre}memberfields (uid, nickname, site, icq, qq, yahoo, msn, taobao, alipay, location, bio, signature, sightml, customstatus, authstr, avatar, avatarwidth, avatarheight $fieldadd1)
        VALUES ('$uid', '$nickname', '$site', '$icq', '$qq', '$yahoo', '$msn', '$taobao', '$alipay', '$locationnew', '$bio', '$signature', '$sightml', '$cstatus', '$authstr', '$avatar', '$avatarwidth', '$avatarheight' $fieldadd2)"
);

    if($regctrl || $regfloodctrl) {
        $db->query("DELETE FROM {$tablepre}regips WHERE dateline<='$timestamp'-".($regctrl > 72 ? $regctrl : 72)."*3600", 'UNBUFFERED');
        if($regctrl) {
            $db->query("INSERT INTO {$tablepre}regips (ip, count, dateline)
                VALUES ('$onlineip', '-1', '$timestamp')"
);
        }
    }

    if($welcomemsg && !empty($welcomemsgtxt)) {
        $welcomtitle = "Welcome to $bbname!";
        $welcomtitle = addslashes($welcomtitle);
        $welcomemsgtxt = addslashes($welcomemsgtxt);
        $db->query("INSERT INTO {$tablepre}pms (msgfrom, msgfromid, msgtoid, folder, new, subject, dateline, message) VALUES ('系统消息', '0', '$uid', 'inbox', '1', '$welcomtitle', '$timestamp','$welcomemsgtxt')");
        $db->query("UPDATE {$tablepre}members SET newpm='1' WHERE uid='$uid'");
    }
    $discuz_uid = $uid;
    $discuz_user = $username;
    $discuz_userss = stripslashes($discuz_user);
    $discuz_pw = $password1;
    $discuz_secques = $secques;
    $groupid = $groupinfo['groupid'];
    $styleid = $styleid ? $styleid : $_DCACHE['settings']['styleid'];

    require_once DISCUZ_ROOT.'./include/cache.func.php';
    $_DCACHE['settings']['totalmembers']++;
    $_DCACHE['settings']['lastmember'] = $discuz_userss;
    updatesettings();
    wapmsg('注册成功!');
}

?>


修改wap/index.php,查找

if(in_array($action, array('home', 'login', 'stats', 'myphone', 'goto', 'forum', 'thread', 'post', 'pm'))) {
    require_once './include/'.$action.'.inc.php';


替换为

if(in_array($action, array('home', 'login', 'stats', 'myphone', 'goto', 'forum', 'thread', 'post', 'pm', 'register'))) {
    require_once './include/'.$action.'.inc.php';


修改wap/include/global.func.php,查找

    global $discuz_uid, $discuz_user, $lang, $settings;


以及

        "Powered by Discuz!

\n".


把它们之间的内容替换为

    echo "


论坛首页
\n".
        ($discuz_uid ? "欢迎您:$discuz_user [.FORMHASH."\">$lang[logout]]" : "您尚未$lang[login] 注册")."

\n"
.


ok!大功告成!!

另外还有实现附件下载的功能这一项,在discuz官方论坛的插件hack版有人提供了,这里就不抄过来了。
阅读(6285) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~