[PHP] ページ切り替え部品(pager)

解説

PHPでのページ切り替え部品(pager)の実装。
コンストラクタの引数に、現在のページ番号最大ページ番号ページ番号をURLパラメータに付ける元となるURLURL末尾に付けるページ内要素のIDを指定する。
show()で表示する。

このサイトのトップページでも使っている。

ソース

<?php 
class Pager {
  private $page = 1;
  private $page_max = 1;
  private $url = '/';
  private $element_id = '';
  
  function __construct($page, $page_max, $url, $element_id) {
    $this->page = $page;
    $this->page_max = $page_max;
    $this->url = $url;
    $this->element_id = $element_id;
  }

  public function show() {
    echo '<ol class="pager">';
    
    $prev = $this->page - 1;
    if($prev > 0) {
      echo '<li><a data-page="'.$prev.'" href="'.$this->getUrl($prev).'"><prev</a></li>';
    } else {
      echo '<li><prev</li>';
    }
    
    for($i = 1; $i <= $this->page_max; ) {
      if($i == $this->page) {
        echo '<li>'.$i.'</li>';
        $i++;
      } elseif(1 < $i && $i < $this->page - 2) {
        echo '<li>...</li>';
        $i = $this->page - 2;
      } elseif($this->page + 2 < $i && $i < $this->page_max) {
        echo '<li>...</li>';
        $i = $this->page_max;
      } else {
        echo '<li><a data-page="'.$i.'" href="'.$this->getUrl($i).'">'.$i.'</a></li>';
        $i++;
      }
    }
    
    $next = $this->page + 1;
    if($next <= $this->page_max) {
      echo '<li><a data-page="'.$next.'" href="'.$this->getUrl($next).'">next></a></li>';
    } else {
      echo '<li>next></li>';
    }
    
    echo '</ol>';
  }

  private function getUrl($page) {
    return $this->url.'?page='.$page.$this->element_id;
  }
}
?>