提醒:本页面将不再更新、维护或者支持,文章、评论所叙述内容存在时效性,涉及技术细节或者软件使用方面不保证能够完全有效可操作,请谨慎参考!

可能有人觉得单纯的分页显得很单调,正好今天有网友问我Typecho如何实现类似我这个文章分页的统计信息的问题。那我就把方法与大家分享一下吧。

这个不是主题实现的,而是要修改原有代码的,首先打开位于/var/Typecho/Widget/Helper/PageNavigator/目录下的Box.php文件。定位到大概34行render函数,我改的如下所示:

/**
   * 输出盒装样式分页栏
   *
   * @access public
   * @param string $prevWord 上一页文字
   * @param string $nextWord 下一页文字
   * @param int $splitPage 分割范围
   * @param string $splitWord 分割字符
   * @return void
   */
public function render(
  $prevWord = 'PREV',
  $nextWord = 'NEXT',
  $splitPage = 3,
  $splitWord = '...'
 )
  {
    if ($this->_total < 1) {
      return;
    }

    $from = max(1, $this->_currentPage - $splitPage);
    $to = min($this->_totalPage, $this->_currentPage + $splitPage);
  
    // 输出页面信息
    echo '<li class="page-info"><span>' .
     $this->_total . '</span><span>' .
     $this->_currentPage . '/' . $this->_totalPage .
     '</span></li>';

    //输出上一页
    if ($this->_currentPage > 1) {
      echo '<li><a class="prev" href="' .
    str_replace(
    $this->_pageHolder,
    $this->_currentPage - 1,
    $this->_pageTemplate) .
    $this->_anchor . '">'
      . $prevWord . '</a></li>';
    }

    //输出第一页
    if ($from > 1) {
      echo '<li><a href="' .
    str_replace($this->_pageHolder, 1, $this->_pageTemplate) .
    $this->_anchor . '">1</a></li>';

      if ($from > 2) {
        //输出省略号
        echo '<li>' . $splitWord . '</li>';
      }
    }

    //输出中间页
    for ($i = $from; $i <= $to; $i ++) {
        echo '<li><a' . (
    $i != $this->_currentPage ? '' : ' class="current"'
    ) . ' href="' .
        str_replace(
    $this->_pageHolder, 
    $i,
    $this->_pageTemplate
    ) . $this->_anchor . '">'
        . $i . '</a></li>';
    }

    //输出最后页
    if ($to < $this->_totalPage) {
      if ($to < $this->_totalPage - 1) {
        echo '<li>' . $splitWord . '</li>';
      }

      echo '<li><a href="' .
    str_replace(
    $this->_pageHolder,
    $this->_totalPage,
    $this->_pageTemplate
    ) . $this->_anchor . '">'
      . $this->_totalPage . '</a></li>';
    }

    //输出下一页
    if ($this->_currentPage < $this->_totalPage) {
      echo '<li><a class="next" href="' .
    str_replace(
    $this->_pageHolder,
    $this->_currentPage + 1,
    $this->_pageTemplate)
      . $this->_anchor . '">' . $nextWord . '</a></li>';
    }
  }

很明显可以找到下面这一句:

echo '<li class="page-info"><span>' .
     $this->_total . '</span><span>' .
     $this->_currentPage . '/' . $this->_totalPage .
     '</span></li>';

在这段函数中$this->_total表示总的记录条数,$this->_currentPage表示当前页码,$this->_totalPage表示总的页码数,怎么样是不是很简单。