Paginator省略号上的CakePHP链接

时间:2014-12-15 12:38:53

标签: php cakephp pagination ellipsis

我想在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

1 个答案:

答案 0 :(得分:1)

简而言之,Paginator不支持您希望它执行的操作,因此您唯一的选择是修改CakePHP源代码。具体来说是PaginatorHelper.php

首先,您需要修改第720行的$defaults变量,然后添加leftEllipsisrightEllipsis字段。这意味着当我们不在$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字段设置的任何内容。但开发人员使用了神奇的extractcompact函数以及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上分叉项目,对您的代码库版本进行更改并创建拉取请求,以便让开发人员有机会将您的功能集成到主线中。这样每个人都可以从你的工作中受益!

祝你好运!