我想在Paginator中的省略号上添加一个链接。当分页有2个省略号时,省略号必须有不同的链接。
我的代码是:
echo $this->paginator->numbers(array(
'tag' => 'li',
'separator' => '',
'currentTag' => 'a',
'currentClass' => 'active',
'modulus' => 2,
'first' => 1,
'last' => 1,
'ellipsis' => "<li><a href='#' class='hellip'>...</a></li>"
));
所以我想要创建的结果是:
1 ...(链接)6 7 8 ...(链接)12
答案 0 :(得分:1)
简而言之,Paginator不支持您希望它执行的操作,因此您唯一的选择是修改CakePHP源代码。具体来说是PaginatorHelper.php
首先,您需要修改第720行的$defaults
变量,然后添加leftEllipsis
和rightEllipsis
字段。这意味着当我们不在$options
变量中设置这些字段时,我们可以保持一致的行为。
$defaults = array('tag' => 'span', 'before' => null, 'after' => null,
'model' => $this->defaultModel(), 'class' => null,'modulus' => '8',
'separator' => ' | ', 'first' => null, 'last' => null, 'ellipsis' => '...',
'currentClass' => 'current', 'currentTag' => null, 'leftEllipsis' => null,
'rightEllipsis' => null);
可能也应该取消我们的两个新领域(第735行 - 第738行):
unset($options['tag'], $options['before'], $options['after'], $options['model'],
$options['modulus'], $options['separator'], $options['first'], $options['last'],
$options['ellipsis'], $options['class'], $options['currentClass'], $options['currentTag'],
$options['leftEllipsis'], $options['rightEllipsis']
);
接下来的一点有点棘手,因为能够指定其中一个省略号而不是其他省略号会很好,并且如果没有,则回退到原始ellipsis
字段设置的任何内容。但开发人员使用了神奇的extract
和compact
函数以及first(...)
和last(...)
函数,具体取决于$options
参数中设置的某些字段。< / p>
在第756行之后插入以下代码,将$leftEllipsis
默认为$ellipsis
设置为:
if(isempty($leftEllipsis)) {
$leftEllipsis = $ellipsis;
}
接下来,我们需要修改作为$options
参数传递给第758 - 761行的first(...)
函数的内容。
if ($offset < $start - 1) {
$out .= $this->first($offset, compact('tag', 'separator', 'class') + array('ellipsis' => $leftEllipsis));
} else {
$out .= $this->first($offset, compact('tag', 'separator', 'class') + array('after' => $separator, 'ellipsis' => $leftEllipsis));
}
您也可以使用此模式攻击正确的省略号。
执行此操作的正确方法是在GitHub上分叉项目,对您的代码库版本进行更改并创建拉取请求,以便让开发人员有机会将您的功能集成到主线中。这样每个人都可以从你的工作中受益!
祝你好运!