mirror of https://github.com/IoTcat/YimianBlog.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
4.5 KiB
120 lines
4.5 KiB
<?php |
|
if (!defined('__TYPECHO_ROOT_DIR__')) exit; |
|
/** |
|
* Typecho Blog Platform |
|
* |
|
* @copyright Copyright (c) 2008 Typecho team (http://www.typecho.org) |
|
* @license GNU General Public License 2.0 |
|
* @version $Id$ |
|
*/ |
|
|
|
/** |
|
* 盒状分页样式 |
|
* |
|
* @author qining |
|
* @category typecho |
|
* @package Widget |
|
* @copyright Copyright (c) 2008 Typecho team (http://www.typecho.org) |
|
* @license GNU General Public License 2.0 |
|
*/ |
|
class Typecho_Widget_Helper_PageNavigator_Box extends Typecho_Widget_Helper_PageNavigator |
|
{ |
|
/** |
|
* 输出盒装样式分页栏 |
|
* |
|
* @access public |
|
* @param string $prevWord 上一页文字 |
|
* @param string $nextWord 下一页文字 |
|
* @param int $splitPage 分割范围 |
|
* @param string $splitWord 分割字符 |
|
* @param string $currentClass 当前激活元素class |
|
* @return void |
|
*/ |
|
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($template); |
|
|
|
// 定义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 = '<a href="%s">'; |
|
$linkCurrentBegin = empty($itemTag) ? ('<a href="%s"' |
|
. (empty($currentClass) ? '' : ' class="' . $currentClass . '"') . '>') |
|
: $linkBegin; |
|
$linkPrevBegin = empty($itemTag) ? ('<a href="%s"' |
|
. (empty($prevClass) ? '' : ' class="' . $prevClass . '"') . '>') |
|
: $linkBegin; |
|
$linkNextBegin = empty($itemTag) ? ('<a href="%s"' |
|
. (empty($nextClass) ? '' : ' class="' . $nextClass . '"') . '>') |
|
: $linkBegin; |
|
$linkEnd = '</a>'; |
|
|
|
$from = max(1, $this->_currentPage - $splitPage); |
|
$to = min($this->_totalPage, $this->_currentPage + $splitPage); |
|
|
|
//输出上一页 |
|
if ($this->_currentPage > 1) { |
|
echo $itemPrevBegin . sprintf($linkPrevBegin, |
|
str_replace($this->_pageHolder, $this->_currentPage - 1, $this->_pageTemplate) . $this->_anchor) |
|
. $prevWord . $linkEnd . $itemEnd; |
|
} |
|
|
|
//输出第一页 |
|
if ($from > 1) { |
|
echo $itemBegin . sprintf($linkBegin, str_replace($this->_pageHolder, 1, $this->_pageTemplate) . $this->_anchor) |
|
. '1' . $linkEnd . $itemEnd; |
|
|
|
if ($from > 2) { |
|
//输出省略号 |
|
echo $itemBegin . $textBegin . $splitWord . $textEnd . $itemEnd; |
|
} |
|
} |
|
|
|
//输出中间页 |
|
for ($i = $from; $i <= $to; $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 $itemBegin . $textBegin . $splitWord . $textEnd . $itemEnd; |
|
} |
|
|
|
echo $itemBegin . sprintf($linkBegin, str_replace($this->_pageHolder, $this->_totalPage, $this->_pageTemplate) . $this->_anchor) |
|
. $this->_totalPage . $linkEnd . $itemEnd; |
|
} |
|
|
|
//输出下一页 |
|
if ($this->_currentPage < $this->_totalPage) { |
|
echo $itemNextBegin . sprintf($linkNextBegin, |
|
str_replace($this->_pageHolder, $this->_currentPage + 1, $this->_pageTemplate) . $this->_anchor) |
|
. $nextWord . $linkEnd . $itemEnd; |
|
} |
|
} |
|
}
|
|
|