在我看来,我正在使用此代码:
$numbers = $this->Paginator->numbers(array(
'separator' => '',
'tag' => 'li',
'currentClass' => 'active'
));
输出:
<li class="active">1</li>
<li><a href="/controller/action/page:2">2</a></li>
<li><a href="/controller/action/page:3">3</a></li>
这很好用,我唯一的问题是当前页面不是链接。是否可以将当前页面作为链接?
感谢阅读。
答案 0 :(得分:2)
我实现了像Dave建议的类扩展,但是我没有复制原始类中的所有代码,而是使用字符串替换方法,这样,如果我更新CakePHP核心库,这应该会非常优雅地失败,其中复制原始Helper中的所有代码可能会导致功能丢失,错误修复等。以下是我实现的类:
<?php
class AppPaginatorHelper extends PaginatorHelper
{
public function numbers($options = array()) {
$output = parent::numbers($options);
// get the current page number, and create a link with it
$current = $this->current();
$currentLink = $this->link($current, array('page' => $current));
// if you're using cake pre 2.1 you cannot change the current class with
// the options array, so it will always be "current"
$find = "<li class=\"current\">{$current}</li>";
$replace = "<li class=\"active\">{$currentLink}</li>";
$output = str_replace($find, $replace, $output);
return $output;
}
}
答案 1 :(得分:2)
有一个公关让它发挥作用。 不幸的是,这只会发生在2.3版本中。
在这里你可以找到PR https://github.com/cakephp/cakephp/pull/900
答案 2 :(得分:2)
您可以使用下一段代码制作出您想要的内容:
<?php echo $this->Paginator->numbers(array('separator' => '','tag' => 'li', 'currentTag' => 'a', 'currentClass' => 'active')); ?>
它仅适用于CakePHP 2.3 +
答案 3 :(得分:1)
简单回答:
我不相信Paginator Helper可以使用它。
如果您只是想要链接到当前页面但在编号链接中不需要它,您可以使用
echo $this->Html->link($this->Paginator->counter('{:current}'), 'yourLinkHere');
但这并不是非常有用,因为你依靠Paginator Helper为你处理其余的链接。
扩展答案/可能性
您可以使用下面的内容扩展PaginatorHelper。基本上,我刚刚删除了检查,看它是否是当前的页码。然后,您必须使用MyPaginatorHelper
来构建链接。这也会使它忽略currentClass
选项......等。但是 - 通过更多的代码调整,你可以做到这一点,它做同样的事情,但也建立一个链接,而不是只是删除IF检查。
class MyPaginatorHelper extends PaginatorHelper {
public function numbers($options = array()) {
if ($options === true) {
$options = array(
'before' => ' | ', 'after' => ' | ', 'first' => 'first', 'last' => 'last'
);
}
$defaults = array(
'tag' => 'span', 'before' => null, 'after' => null, 'model' => $this->defaultModel(), 'class' => null,
'modulus' => '8', 'separator' => ' | ', 'first' => null, 'last' => null, 'ellipsis' => '...', 'currentClass' => 'current'
);
$options += $defaults;
$params = (array)$this->params($options['model']) + array('page' => 1);
unset($options['model']);
if ($params['pageCount'] <= 1) {
return false;
}
extract($options);
unset($options['tag'], $options['before'], $options['after'], $options['model'],
$options['modulus'], $options['separator'], $options['first'], $options['last'],
$options['ellipsis'], $options['class'], $options['currentClass']
);
$out = '';
$half = intval($modulus / 2);
$end = $params['page'] + $half;
if ($end > $params['pageCount']) {
$end = $params['pageCount'];
}
$start = $params['page'] - ($modulus - ($end - $params['page']));
if ($start <= 1) {
$start = 1;
$end = $params['page'] + ($modulus - $params['page']) + 1;
}
if ($first && $start > 1) {
$offset = ($start <= (int)$first) ? $start - 1 : $first;
if ($offset < $start - 1) {
$out .= $this->first($offset, compact('tag', 'separator', 'ellipsis', 'class'));
} else {
$out .= $this->first($offset, compact('tag', 'separator', 'class') + array('after' => $separator));
}
}
$out .= $before;
for ($i = $start; $i < $params['page']; $i++) {
$out .= $this->Html->tag($tag, $this->link($i, array('page' => $i), $options), compact('class')) . $separator;
}
if ($class) {
$currentClass .= ' ' . $class;
}
$out .= $this->Html->tag($tag, $params['page'], array('class' => $currentClass));
if ($i != $params['pageCount']) {
$out .= $separator;
}
$start = $params['page'] + 1;
for ($i = $start; $i < $end; $i++) {
$out .= $this->Html->tag($tag, $this->link($i, array('page' => $i), $options), compact('class')) . $separator;
}
if ($end != $params['page']) {
$out .= $this->Html->tag($tag, $this->link($i, array('page' => $end), $options), compact('class'));
}
$out .= $after;
if ($last && $end < $params['pageCount']) {
$offset = ($params['pageCount'] < $end + (int)$last) ? $params['pageCount'] - $end : $last;
if ($offset <= $last && $params['pageCount'] - $end > $offset) {
$out .= $this->last($offset, compact('tag', 'separator', 'ellipsis', 'class'));
} else {
$out .= $this->last($offset, compact('tag', 'separator', 'class') + array('before' => $separator));
}
}
}
return $out;
}
}
答案 4 :(得分:1)
我找到了一个很好的解决方案,并为您分享:)
<div class="pagination pagination-large">
<ul>
<?php
echo $this->Paginator->prev(__('prev'), array('tag' => 'li'), null, array('tag' => 'li','class' => 'disabled','disabledTag' => 'a'));
echo $this->Paginator->numbers(array('separator' => '','currentTag' => 'a', 'currentClass' => 'active','tag' => 'li','first' => 1));
echo $this->Paginator->next(__('next'), array('tag' => 'li','currentClass' => 'disabled'), null, array('tag' => 'li','class' => 'disabled','disabledTag' => 'a'));
?>
</ul>
</div>