我使用的是http://www.jongales.com/blog/2009/01/27/php-class-for-threaded-comments/我不知道如何实现分页系统。如果有人能为我指明方向或其他什么,因为我在寻找解决方案,但什么都没找到。。。
public $parents = array();
public $children = array();
function __construct($comments)
{
foreach ($comments as $comment)
{
if ($comment['parent_id'] === NULL)
{
$this->parents[$comment['id']][] = $comment;
}
else
{
$this->children[$comment['parent_id']][] = $comment;
}
}
}
private function format_comment($comment, $depth)
{
If($depth == 0){
?>
<br /><?php echo $comment['name']; ?><br /><?php echo $comment['datetime']; ?><br /><?php echo $comment['text']; ?></div>
<a href="javascript:toggleDiv('<?php echo $comment['id']; ?>');">Raspunde</a>
<div id="<?php echo $comment['id']; ?>" style="display: none;">
The content in this div will hide and show (toggle) when the toggle is pressed.
</div>
<?php
}
If($depth > 0){
?>
<div style="margin-left: 20px;">
<br /><?php echo $comment['name']; ?><br /><?php echo $comment['datetime']; ?><br /><?php echo $comment['text']; ?></div>
</div>
<?php
}
}
private function print_parent($comment, $depth = 0)
{
foreach ($comment as $c)
{
$this->format_comment($c, $depth);
if (isset($this->children[$c['id']]))
{
$this->print_parent($this->children[$c['id']], $depth + 1);
}
}
}
public function print_comments()
{
foreach ($this->parents as $c)
{
$this->print_parent($c);
}
}}
$username = "Netra";
$SQL = "SELECT * FROM profile_comments WHERE name = '$username' ORDER BY datetime DESC";
$result = mysql_query($SQL) or die(mysql_error());
while($row = mysql_fetch_assoc($result)) {
$id = $row['id'];
$parent_id = $row['parent_id'];
$name = $row['name'];
$text = $row['text'];
$datetime = $row['datetime'];
$comments[] = array(
'id' => $id,
'parent_id' => $parent_id,
'name' => $name,
'text' => $text,
'datetime' => $datetime
);
}
$threaded_comments = new Threaded_comments($comments);
$threaded_comments->print_comments();
分页只会改变查询中的两件事。它将根据当前页面设置不同的LIMIT和OFFSET。涉及到几个部分,主要是知道偏移量。这很容易,它总是(PAGE_NUMBER*NUMBER_PER_PAGE)-NUMBER_PER-PAGE。然后根据当前页面动态更改sql!
它看起来像这样:
<?php
class Pagination{
public $total_results;
public $total_pages;
public $per_page;
public $offset;
public $page;
public function __construct($per_page=20, $total_results=0, $page=1){
$this->per_page = $per_page;
$this->total_results = $total_results;
$this->page = $page;
$this->set_total_pages();
$this->set_offset();
$this->prepare_displays();
}
public function set_total_pages(){
$this->total_pages = ceil($this->total_results / $this->per_page);
}
public function set_offset(){
$this->offset = ($this->page * $this->per_page) - $this->per_page;
}
public function has_next_page(){
if($this->page < $this->total_pages){
return true;
}else{
return false;
}
}
public function has_previous_page(){
if($this->total_pages > 1 && $this->page > 1){
return true;
}else{
return false;
}
}
public function check_page_exists(){
return (($this->total_pages > 0) && ($this->page > $this->total_pages)) || $this->page < 1 ? false : true;
}
}
?>