CakePHP ссылка на многоточие Paginator

Я хочу поставить ссылку на многоточие в 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

Решение

Короче говоря, Paginator не поддерживает то, что вы хотите, и поэтому единственный вариант — изменить исходный код CakePHP. конкретно PaginatorHelper.php

Первое, что вам нужно сделать, это изменить $defaults переменная в строке 720, и добавить 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 параметр.

После строки 756 введите следующий код по умолчанию $leftEllipsis к чему угодно $ellipsis установлен в:

if(isempty($leftEllipsis)) {
$leftEllipsis = $ellipsis;
}

Затем нам нужно изменить то, что передается как $options параметр к first(...) функция на линиях 758 — 761.

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, внести изменения в свою версию базы кода и создать запрос на извлечение, чтобы дать разработчикам возможность интегрировать вашу функцию в основную ветку. Таким образом, каждый может извлечь выгоду из вашей работы!

Удачи!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]