PHP线程注释分页


PHP Threaded comments pagination

我使用的是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;
    }

}


?>