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