3

I'm using the threaded comment from http://www.jongales.com/blog/2009/01/27/php-class-for-threaded-comments/ and I have no idea how to implement a pagination system. If anybody could point me in a direction or something because I search for a solution but didn't find anything...

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();

1 Answer 1

1

Pagination simply will change two things in your queries. It will set the LIMIT and OFFSET different based on the current page. There are a few parts involved, mainly knowing the offset. This is easy, it is always the (PAGE_NUMBER * NUMBER_PER_PAGE) - NUMBER_PER_PAGE. You then dynamically change your sql based on the current page!

It looks something like this:

<?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;
    }


}




?>
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.