⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 class.discussion.php

📁 PHP4_0入门与提高源程序代码
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php
//discussion类的定义
class discussion
{
    var $board_id;	//版面标识
    var $mail_reply;	//回复mail
    var $dup_check;	//是否进行二次发表文章检查
    var $use_ubb_code;	//是否允许使用ubb code
    var $use_javascript;//是否允许使用javascript	
    var $style;	        //样式	
    var $admin;		//是否允许管理版面
    var $table_name;	//表格名
    var $error;		//错误信息
    var $font1;		//字体1
    var $font2;		//字体2
    var $th_color;	//表格标题颜色
    var $form_color;	//表单颜色
    var $err_color;	//错误信息颜色
    var $link_id;	//链接标识
    
    //构造函数
    function discussion()
    {
        $this->board_id       = 1;		// (整数)显示哪个版面
        $this->mail_reply     = 0;		// (布尔值) 1 表示把文章mail给这一主题文章的发表者
        $this->dup_check      = 0;		// (布尔值) 1 检查二次发表文章
        $this->use_ubb_code   = 1;		// (布尔值) 1 对于发表的文章使用ubb code
        $this->use_javascript = 1;		// (布尔值) 1 允许使用javascript
        $this->admin          = 0;              // (布尔值) 允许管理论坛
        $this->style          = 'threaded';	// (字符串) 可以是basic, threaded or nested
        $this->table_name     = 'board';	// (字符串) mysql表格名

        $this->err_color  = '#FF0000';	// (字符串) 错误信息颜色
        $this->th_color	  = '#DDDDDD';	// (字符串) 表格标题背景颜色
        $this->form_color = '#EEEEEE';	// (字符串) 表单背景颜色
        $this->font1 = "<font face='tahoma, arial, helvetica' size=2>";	// (字符串) 表格标题字体
        $this->font2 = "<font face='tahoma, arial, helvetica' size=2>";	// (字符串) 内容字体

        // 连接到MySQL
        $this->link_id = @mysql_connect('localhost', 'root', '') 
		or die('Could not connect to database!');
	//选择数据库
        mysql_select_db('netster');
    }
    //构造函数结束

    /**
     * 处理存储在表格中的信息,并根据$this->style显示出来.
     *
     * @param 	$offset (整数)   首先显示这篇文章
     * @param 	$limit  (整数)   从$offset开始显示$limit篇文章 
     * @return 	$html   (字符串) 显示讨论版的html代码
     */

    function get_topics($offset=0, $limit=50)//从第一篇开始显示,最多显示50篇
    {
        global $PHP_SELF;//定义全局变量

        $sql = "SELECT id, date, name, email, subject, body
               FROM $this->table_name
               WHERE board_id='$this->board_id'
               AND thread_id=0
               ORDER BY date DESC";//查询语句

        $result_total = mysql_query($sql, $this->link_id);//执行查询语句
        $num_total = mysql_num_rows($result_total);	//返回查询结果的行数

        //如果$offset没有设定,默认为0
	if(! $offset)
        {
            $offset = 0;
        }
	//添加查询条件,从$offset开始,最多$limit条记录
        $sql.= " LIMIT $offset, $limit";
        $result = mysql_query($sql, $this->link_id);//执行查询
        $num_topics = mysql_num_rows($result);//反悔查询结果的行数

        $html.= $this->show_add_new_link(); //显示创建新话题的链接
	
        if($num_topics>0)	//如果返回的查询结果不是空
        {
            if($this->style=='basic')	//如果显示样式为basic
            {
                $html.= "<ul>\n";	//以无序列表的形式显示
            }

            for($topic=0; $topic<$num_topics; $topic++)
            {
                $record  = mysql_fetch_object($result); //把查询结果存储到一个对象中
		//把结果中给字段的值分别赋给各变量
                $id      = $record->id;
                $subject = $record->subject;
                $name    = $record->name;
                $email   = $record->email;
                $date    = $record->date;
                $body    = $record->body;

                if($this->style=='basic')//如果显示样式为basic
                {
                    $html.= $this->show_link($id, $subject, $name, $email, $date);
                    $html.= $this->get_kids($id);
                }
                elseif($this->style=='nested' || $this->style=='threaded')//显示样式为其他
                {
                    $html.= $this->show_post($id, $subject, $name, $email, $date, $body);
                    $html.= $this->get_kids($id);
                }
            }

            if($this->style=='basic')
            {
                $html.= "</ul>\n";
            }

            $html.= $this->show_jump_to($offset, $limit, $num_total);
        }

        return $html;
    }

    /**
     * 根据$this->style输出改文章的下一级文章
     *
     * @param 	$parent_id (整数) 上一级文章的id
     * @return	$html (字符串) 显示下一级文章
     */

    function get_kids($parent_id)
    {
        global $PHP_SELF;

        $sql = "SELECT id, name, email, date, subject, body
               FROM $this->table_name
               WHERE parent_id='$parent_id'
               ORDER BY date ASC";//查询语句,提取出parent_id符合条件的行
        $result = mysql_query($sql, $this->link_id);	//执行查询
        $num_kids = mysql_num_rows($result);	//查询结果包含的行数

        if($num_kids>0)	//显示指定数目的文章
        {
            $html.= "<ul>\n";

            for($child=0; $child<$num_kids; $child++)
            {
                $record  = mysql_fetch_object($result);
                $id      = $record->id;
                $subject = $record->subject;
                $name    = $record->name;
                $email   = $record->email;
                $date    = $record->date;
                $body    = $record->body;

                if($this->style=='threaded' || $this->style=='basic')
                {
                    $html.= $this->show_link($id, $subject, $name, $email, $date);
                }
                elseif($this->style=='nested')
                {
                    $html.= $this->show_post($id, $subject, $name, $email, $date, $body);
                }

                $html.= $this->get_kids($id);
            }

            $html.= "</ul>\n";
        }

        if($html)
        {
            return $html;
        }
        else
        {
            return false;
        }
    }

    /**
     * 根据$this->style显示单独的一篇文章
     *
     * @param	$id (整数) 要显示文章的id
     * @return	$html (字符串) 要显示的字符串    
     */

    function get_post($id)
    {
        global $PHP_SELF;

        $sql = "SELECT id, parent_id, thread_id, date, name, email, subject, body
               FROM $this->table_name
               WHERE id='$id'";//查询id符合某一条件的所有行
        $result = mysql_query($sql, $this->link_id);//执行查询
	//显示与文章有关的所由信息
        if(mysql_num_rows($result))
        {
            $record    = mysql_fetch_object($result);//把查询 结果存放到对象中
	    //把对象的成员变量赋给变量
            $id        = $record->id;
            $parent_id = $record->parent_id;
            $thread_id = $record->thread_id;
            $subject   = $record->subject;
            $name      = $record->name;
            $email     = $record->email;
            $date      = $record->date;
            $body      = $record->body;
	    //显示各个部分
            $html.= $this->show_nav($thread_id, $parent_id);
            $html.= $this->show_post($id, $subject, $name, $email, $date, $body);
            $html.= $this->get_kids($id);
            $html.= $this->show_nav($thread_id, $parent_id);
	    //判断是开始的文章还是Re的文章
            $subject = (! strstr($subject, 'Re:')) ? 'Re: '.$subject : $subject;

            if($thread_id==0)
            {
                $thread_id = $id;
            }

            $html.= $this->show_form($id, $thread_id, $subject);
            return $html;
        }
        else
        {
            $this->error = 'Post not found!';
            return false;
        }
    }

    /**
     * 显示浏览链接     
     * @param	$thread_id (整数) 线程号
     * @param	$parent_id (整数) 当前线程的父级id
     * @return	$html (字符串) 显示链接的html代码
     */

    function show_nav($thread_id, $parent_id)
    {
        global $PHP_SELF;

        $html.= $this->font2;
        $html.= "<a href='$PHP_SELF'><b>Home</b></a> : \n";
        $html.= "<a href='$PHP_SELF?view=$thread_id'><b>Top</b></a> : \n";
        $html.= "<a href='$PHP_SELF?view=$parent_id'><b>Parent</b></a> : \n";
        $html.= "<a href='#reply'><b>Reply</b></a><br><br>\n";
        $html.= "</font>";

        return $html;
    }

    /**
     * 显示添加新文章的链接     
     * @return	$html (字符串) 显示的html代码
     */

    function show_add_new_link()
    {
        $html.= $this->font2;
        $html.= "<a href='$PHP_SELF?show=form'><b>New Topic</b></a>";
        $html.= "</font><br><br>";

        return $html;
    }

    /**
     * 显示与当前文章相关的文章链接
     *
     * @param	$offset (整数) 文章的开始位置
     * @param	$limit (整数) 显示的文章数目
     * @param	$num_rows_all (整数) 表格中的父级线程数目
     * @param	$link_args (字符串) 通过链接传递的其他参数
     * @return	$html (字符串) 显示链接的html代码
     */

    function show_jump_to($offset, $limit, $num_rows_all, $link_args='')
    {
        global $PHP_SELF;

        $num_pages = ceil($num_rows_all/$limit);

        if($num_pages > 1)
        {
            $offset_back = $offset - $limit;
            $offset_next = $offset + $limit;
            $current_page = $offset/$limit;

            $html.= $this->font2;
            $html.= "<b>Navigation:</b>&nbsp;[";

            if($offset_back >= 0)
            {
                $html.="&nbsp;<b><a href='$PHP_SELF?$link_args&offset=$offset_back'>Back</a></b>";
            }

            for($page=0; $page<$num_pages; $page++)
            {
                if( ($current_page-5) < $page && ($current_page+5) > $page )
                {
                    $offset_page = $page * $limit;
                    $page_num = $page+1;

                    if($current_page==$page)
                    {
                        $html.="&nbsp;<b>$page_num</b>";

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -