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) ? '' : ('' . $itemTag . '>');
+ $textBegin = empty($textTag) ? '' : ('<' . $textTag . '>');
+ $textEnd = empty($textTag) ? '' : ('' . $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 '
'
- . $prevWord . '';
+ 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 '' . $nextWord . '';
+ 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);
- /** 添加判断防止输入错误的标签,判断逻辑:如果为 ,使用 ;否则,使用 */
- $label = ($label == 'ul') ? 'ul' : 'ol';
- echo '<' . $label . ' class="' . $class . '">';
- $nav->render($prev, $next, $splitPage, $splitWord, $currentClass);
- echo '' . $label . '>';
+ echo '<' . $template['wrapTag'] . (empty($template['wrapClass'])
+ ? '' : ' class="' . $template['wrapClass'] . '"') . '>';
+ $nav->render($prev, $next, $splitPage, $splitWord, $template);
+ echo '' . $template['wrapTag'] . '>';
}
}
}