public function pagination()
{
return _class('html')->pagination([
'1' => '#page-1',
'2' => '#page-2',
'prev' => '#page-1',
'next' => '#page-2',
'3' => '#page-3',
'4' => '#page-4',
'5' => '#page-5',
]);
}
public function pagination($data = [], $extra = [])
{
if ($this->_is_bs5) {
return $this->_bs5()->pagination($data, $extra);
}
$extra['id'] = ($extra['id'] ?? null) ?: __FUNCTION__ . '_' . ($this->_ids[__FUNCTION__] = ($this->_ids[__FUNCTION__] ?? 0) + 1);
$prev = $next = null;
if (isset($data['prev'])) {
$prev = ($data['prev'] ?? null);
unset($data['prev']);
}
if (isset($data['next'])) {
$next = ($data['next'] ?? null);
unset($data['next']);
}
$items = [];
// TODO: auto-detect current page and need of first. last
if ($prev || $this->_pagination_state('prev', $extra) === 'disabled') {
$items[] = $this->_pagination_item('prev', $prev, t('Prev'), $extra);
}
foreach ((array) $data as $page => $link) {
$items[] = $this->_pagination_item($page, $link, $page, $extra);
}
if ($next || $this->_pagination_state('next', $extra) === 'disabled') {
$items[] = $this->_pagination_item('next', $next, t('Next'), $extra);
}
[$size_class, $wrap_class] = $this->_pagination_classes($extra['size'] ?? '', $extra['align'] ?? '', $this->_is_bs3 ? 'bs3' : 'bs2');
$class = strlen($size_class) ? trim($size_class . ' ' . ($extra['class'] ?? '')) : ($extra['class'] ?? null);
if ($this->_is_bs3) {
return '<div' . (strlen($wrap_class) ? ' class="' . $wrap_class . '"' : '') . '><ul class="pagination' . ($class ? ' ' . $class : '') . '" id="' . ($extra['id'] ?? null) . '">' . implode(PHP_EOL, $items) . '</ul></div>';
}
return '<div class="pagination' . ($class ? ' ' . $class : '') . '" id="' . ($extra['id'] ?? null) . '"><ul>' . implode(PHP_EOL, $items) . '</ul></div>';
}