📄 class.discussion.php
字号:
<?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> [";
if($offset_back >= 0)
{
$html.=" <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.=" <b>$page_num</b>";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -