From bc7fd3e097a03621b8e76ad70f73098e0ccb2a46 Mon Sep 17 00:00:00 2001 From: joyqi Date: Tue, 7 Jan 2014 10:44:58 +0800 Subject: [PATCH] fix #150 fix #163 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加更加多样的分页输出样式选项,包括 wrapTag 外层包裹标签名,默认ol wrapClass 外层包裹类名 itemTag 内层标签名, 默认li textTag 直接输出文字的标签名 currentClass 当前聚焦类名 prevClass 上一页类名 nextClass 下一页类名 --- .../Widget/Helper/PageNavigator/Box.php | 69 +++++++++++++++---- var/Widget/Archive.php | 25 +++++-- 2 files changed, 72 insertions(+), 22 deletions(-) diff --git a/var/Typecho/Widget/Helper/PageNavigator/Box.php b/var/Typecho/Widget/Helper/PageNavigator/Box.php index c6d85bc4..29c3496d 100644 --- a/var/Typecho/Widget/Helper/PageNavigator/Box.php +++ b/var/Typecho/Widget/Helper/PageNavigator/Box.php @@ -32,52 +32,91 @@ class Typecho_Widget_Helper_PageNavigator_Box extends Typecho_Widget_Helper_Page * @param string $currentClass 当前激活元素class * @return void */ - public function render($prevWord = 'PREV', $nextWord = 'NEXT', $splitPage = 3, $splitWord = '...', $currentClass = 'current') - { + public function render($prevWord = 'PREV', $nextWord = 'NEXT', $splitPage = 3, $splitWord = '...', array $template = array()) + { if ($this->_total < 1) { return; } + $default = array( + 'itemTag' => 'li', + 'textTag' => 'span', + 'currentClass' => 'current', + 'prevClass' => 'prev', + 'nextClass' => 'next' + ); + + $template = array_merge($default, $template); + extract($default); + + // 定义item + $itemBegin = empty($itemTag) ? '' : ('<' . $itemTag . '>'); + $itemCurrentBegin = empty($itemTag) ? '' : ('<' . $itemTag + . (empty($currentClass) ? '' : ' class="' . $currentClass . '"') . '>'); + $itemPrevBegin = empty($itemTag) ? '' : ('<' . $itemTag + . (empty($prevClass) ? '' : ' class="' . $prevClass . '"') . '>'); + $itemNextBegin = empty($itemTag) ? '' : ('<' . $itemTag + . (empty($nextClass) ? '' : ' class="' . $nextClass . '"') . '>'); + $itemEnd = empty($itemTag) ? '' : (''); + $textBegin = empty($textTag) ? '' : ('<' . $textTag . '>'); + $textEnd = empty($textTag) ? '' : (''); + $linkBegin = ''; + $linkCurrentBegin = empty($itemTag) ? ('') + : $linkBegin; + $linkPrevBegin = empty($itemTag) ? ('') + : $linkBegin; + $linkNextBegin = empty($itemTag) ? ('') + : $linkBegin; + $linkEnd = ''; + $from = max(1, $this->_currentPage - $splitPage); $to = min($this->_totalPage, $this->_currentPage + $splitPage); //输出上一页 if ($this->_currentPage > 1) { - echo '
  • '; + echo $itemPrevBegin . sprintf($linkPrevBegin, + str_replace($this->_pageHolder, $this->_currentPage - 1, $this->_pageTemplate) . $this->_anchor) + . $prevWord . $linkEnd . $itemEnd; } //输出第一页 if ($from > 1) { - echo '
  • 1
  • '; + echo $itemBegin . sprintf($linkBegin, str_replace($this->_pageHolder, 1, $this->_pageTemplate) . $this->_anchor) + . '1' . $linkEnd . $itemEnd; if ($from > 2) { //输出省略号 - echo '
  • ' . $splitWord . '
  • '; + echo $itemBegin . $textBegin . $splitWord . $textEnd . $itemEnd; } } //输出中间页 for ($i = $from; $i <= $to; $i ++) { - echo '_currentPage ? '' : ' class="' . $currentClass . '"') . '>' - . $i . ''; + $current = ($i == $this->_currentPage); + + echo ($current ? $itemCurrentBegin : $itemBegin) . sprintf(($current ? $linkCurrentBegin : $linkBegin), + str_replace($this->_pageHolder, $i, $this->_pageTemplate) . $this->_anchor) + . $i . $linkEnd . $itemEnd; } //输出最后页 if ($to < $this->_totalPage) { if ($to < $this->_totalPage - 1) { - echo '
  • ' . $splitWord . '
  • '; + echo $itemBegin . $textBegin . $splitWord . $textEnd . $itemEnd; } - - echo '
  • ' - . $this->_totalPage . '
  • '; + + echo $itemBegin . sprintf($linkBegin, str_replace($this->_pageHolder, $this->_totalPage, $this->_pageTemplate) . $this->_anchor) + . $this->_totalPage . $linkEnd . $itemEnd; } //输出下一页 if ($this->_currentPage < $this->_totalPage) { - echo '
  • '; + echo $itemNextBegin . sprintf($linkNextBegin, + str_replace($this->_pageHolder, $this->_currentPage + 1, $this->_pageTemplate) . $this->_anchor) + . $nextWord . $linkEnd . $itemEnd; } } } diff --git a/var/Widget/Archive.php b/var/Widget/Archive.php index bd856d81..f74cac7c 100644 --- a/var/Widget/Archive.php +++ b/var/Widget/Archive.php @@ -1362,11 +1362,23 @@ class Widget_Archive extends Widget_Abstract_Contents * @param string $splitWord 分割字符 * @return void */ - public function pageNav($prev = '«', $next = '»', $splitPage = 3, $splitWord = '...', - $class = 'page-navigator', $currentClass = 'current', $label = 'ol') + public function pageNav($prev = '«', $next = '»', $splitPage = 3, $splitWord = '...', $template = '') { if ($this->have()) { $hasNav = false; + $default = array( + 'wrapTag' => 'ol', + 'wrapClass' => 'page-navigator' + ); + + if (is_string($template)) { + parse_str($template, $config); + } else { + $config = $template; + } + + $template = array_merge($default, $config); + $this->_total = (false === $this->_total ? $this->size($this->_countSql) : $this->_total); $this->pluginHandle()->trigger($hasNav)->pageNav($this->_currentPage, $this->_total, $this->parameter->pageSize, $prev, $next, $splitPage, $splitWord); @@ -1380,11 +1392,10 @@ class Widget_Archive extends Widget_Abstract_Contents $nav = new Typecho_Widget_Helper_PageNavigator_Box($this->_total, $this->_currentPage, $this->parameter->pageSize, $query); - /** 添加判断防止输入错误的标签,判断逻辑:如果为