Coded something up in Couch in an interesting way? Have a snippet or shortcode to share? Post it here for the community to benefit.
2 posts Page 1 of 1
this is code with bootstrap classes for page pagination
works on CouchCMS v2.1 beta

file functions.php
Code: Select all
        function getPaginationString( $page = 1, $totalitems, $limit = 15, $adjacents = 1, $targetpage = "/", $pagestring = "?page=", $prev_text, $next_text, $simple ){
            //defaults
            if( !$adjacents ) $adjacents = 1;
            if( !$limit ) $limit = 15;
            if( !$page ) $page = 1;
            if( !$targetpage ) $targetpage = "/";

            //other vars
            $prev = $page - 1; //previous page is page - 1
            $next = $page + 1; //next page is page + 1
            $lastpage = ceil($totalitems / $limit); //lastpage is = total items / items per page, rounded up.
            $lpm1 = $lastpage - 1; //last page minus 1

            /*
                Now we apply our rules and draw the pagination object.
                We're actually saving the code to a variable in case we want to draw it more than once.
            */
            $pagination = "";
            if( $lastpage > 1 ){

                $pagination .= "<ul class=\"pagination justify-content-center pagination-sm\"";
                $pagination .= ">";

                //previous button
                if( $page > 1 ){
                    $pagination .= "<li class=\"page-item disabled\"><span class=\"page-link prev\"><a href=\"$targetpage$pagestring$prev\" class=\"prev\">".$prev_text."</a></span></li>";
                }
                else{
                    $pagination .= "<li class=\"page-item disabled\"><span class=\"page-link prev\">".$prev_text."</span></li>";
                }

                //pages
                if( !$simple ){
                    if( $lastpage < 7 + ($adjacents * 2) ){ //not enough pages to bother breaking it up
                        for( $counter = 1; $counter <= $lastpage; $counter++ ){
                            if( $counter == $page ){
                                $pagination .= "<li class=\"page-item active\"><span class=\"page-link\">$counter</span></li>";
                            }
                            else{
                                $pagination .= "<li class=\"page-item\"><a href=\"" . $targetpage . $pagestring . $counter . "\" class=\"page-link\">$counter</a>";
                            }
                        }
                    }
                    elseif( $lastpage >= 7 + ($adjacents * 2) ){ //enough pages to hide some
                        //close to beginning; only hide later pages
                        if($page < 1 + ($adjacents * 3)){
                            for( $counter = 1; $counter < 4 + ($adjacents * 2); $counter++ ){
                                if( $counter == $page ){
                                    $pagination .= "<li class=\"page-item active\"><span class=\"page-link\">$counter</span></li>";
                                }
                                else{
                                    $pagination .= "<li class=\"page-item\"><a href=\"" . $targetpage . $pagestring . $counter . "\" class=\"page-link\">$counter</a>";
                                }
                            }
                            $pagination .= "<li class=\"page-item disabled\"><span class=\"page-link\">&hellip;</span></li>";
                            $pagination .= "<li class=\"page-item\"><a href=\"" . $targetpage . $pagestring . $lpm1 . "\" class=\"page-link\">$lpm1</a></li>";
                            $pagination .= "<li class=\"page-item\"><a href=\"" . $targetpage . $pagestring . $lastpage . "\" class=\"page-link\">$lastpage</a></li>";
                        }
                        //in middle; hide some front and some back
                        elseif( $lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2) ){
                                $pagination .= "<li class=\"page-item\"><a href=\"" . $targetpage . $pagestring . "1\" class=\"page-link\">1</a></li>";
                                $pagination .= "<li class=\"page-item\"><a href=\"" . $targetpage . $pagestring . "2\" class=\"page-link\">2</a></li>";
                                $pagination .= "<li class=\"page-item disabled\"><span class=\"page-link\">&hellip;</span></li>";
                                for( $counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++ ){
                                    if( $counter == $page ){
                                        $pagination .= "<li class=\"page-item active\"><span class=\"page-link\">$counter</span></li>";
                                    }
                                    else{
                                        $pagination .= "<li class=\"page-item\"><a href=\"" . $targetpage . $pagestring . $counter . "\" class=\"page-link\">$counter</a></li>";
                                    }
                                }
                                $pagination .= "<li class=\"page-item disabled\"><span class=\"page-link\">&hellip;</span></li>";
                                $pagination .= "<li class=\"page-item\"><a href=\"" . $targetpage . $pagestring . $lpm1 . "\" class=\"page-link\">$lpm1</a></li>";
                                $pagination .= "<li class=\"page-item\"><a href=\"" . $targetpage . $pagestring . $lastpage . "\" class=\"page-link\">$lastpage</a></li>";
                        }
                        //close to end; only hide early pages
                        else{
                                $pagination .= "<li class=\"page-item\"><a href=\"" . $targetpage . $pagestring . "1\" class=\"page-link\">1</a></li>";
                                $pagination .= "<li class=\"page-item\"><a href=\"" . $targetpage . $pagestring . "2\" class=\"page-link\">2</a></li>";
                                $pagination .= "<li class=\"page-item disabled\"><span class=\"page-link\">&hellip;</span></li>";
                                for( $counter = $lastpage - (1 + ($adjacents * 3)); $counter <= $lastpage; $counter++ ){
                                    if( $counter == $page ){
                                        $pagination .= "<li class=\"page-item active\"><span class=\"page-link\">$counter</span></li>";
                                    }
                                    else{
                                        $pagination .= "<li class=\"page-item\"><a href=\"" . $targetpage . $pagestring . $counter . "\" class=\"page-link\">$counter</a></li>";
                                    }
                                }
                        }
                    }
                }
                else{
                    $counter = $lastpage + 1;
                }

                //next button
                if( $page < $counter - 1 ){
                    $pagination .= "<li class=\"page-item\"><a href=\"" . $targetpage . $pagestring . $next . "\" class=\"page-link next\">".$next_text."</a></li>";
                }
                else{
                    $pagination .= "<li class=\"page-item disabled\"><span class=\"page-link next\">".$next_text."</span>";
                }
                $pagination .= "</div>\n";
            }
            return $pagination;
        }

Attachments

A Couch-like way to do it would be using "cms:paginator" as a tag-pair. You may have any HTML in it for styling links.
Code: Select all
<cms:paginator adjacents='1'>
    ....
</cms:paginator>
2 posts Page 1 of 1