Class yii\bootstrap4\LinkPager
Inheritance | yii\bootstrap4\LinkPager » yii\bootstrap4\Widget » yii\base\Widget |
---|---|
Uses Traits | yii\bootstrap4\BootstrapWidgetTrait |
Available since extension's version | 2.0.2 |
Source Code | https://github.com/yiisoft/yii2-bootstrap4/blob/master/src/LinkPager.php |
LinkPager represents a bootstrap 4 version of \yii\widgets\LinkPager. It displays a list of hyperlinks that lead to different pages of target.
LinkPager works with a \yii\data\Pagination object which specifies the total number of pages and the current page number.
To apply LinkPager globally e.g. in all GridViews, set in configuration DI:
'container' => [
'definitions' => [
\yii\widgets\LinkPager::class => \yii\bootstrap4\LinkPager::class,
],
],
See also https://getbootstrap.com/docs/4.6/components/pagination/.
Public Properties
Property | Type | Description | Defined By |
---|---|---|---|
$activePageCssClass | string | The CSS class for the active (currently selected) page button. | yii\bootstrap4\LinkPager |
$clientEvents | array | The event handlers for the underlying Bootstrap JS plugin. | yii\bootstrap4\BootstrapWidgetTrait |
$clientOptions | array | The options for the underlying Bootstrap JS plugin. | yii\bootstrap4\BootstrapWidgetTrait |
$disableCurrentPageButton | boolean | Whether to render current page button as disabled. | yii\bootstrap4\LinkPager |
$disabledListItemSubTagOptions | array | The options for the disabled tag to be generated inside the disabled list element. | yii\bootstrap4\LinkPager |
$disabledPageCssClass | string | The CSS class for the disabled page buttons. | yii\bootstrap4\LinkPager |
$firstPageCssClass | string | The CSS class for the "first" page button. | yii\bootstrap4\LinkPager |
$firstPageLabel | string|boolean | The text label for the "first" page button. | yii\bootstrap4\LinkPager |
$hideOnSinglePage | boolean | Hide widget when only one page exist. | yii\bootstrap4\LinkPager |
$lastPageCssClass | string | The CSS class for the "last" page button. | yii\bootstrap4\LinkPager |
$lastPageLabel | string|boolean | The text label for the "last" page button. | yii\bootstrap4\LinkPager |
$linkContainerOptions | array | HTML attributes which will be applied to all link containers | yii\bootstrap4\LinkPager |
$linkOptions | array | HTML attributes for the link in a pager container tag. | yii\bootstrap4\LinkPager |
$listOptions | array | HTML attributes for the pager list tag. | yii\bootstrap4\LinkPager |
$maxButtonCount | integer | Maximum number of page buttons that can be displayed. | yii\bootstrap4\LinkPager |
$nextPageCssClass | string | The CSS class for the "next" page button. | yii\bootstrap4\LinkPager |
$nextPageLabel | string|boolean | The label for the "next" page button. | yii\bootstrap4\LinkPager |
$options | array | HTML attributes for the pager container tag. | yii\bootstrap4\LinkPager |
$pageCssClass | string | The CSS class for the each page button. | yii\bootstrap4\LinkPager |
$pagination | \yii\data\Pagination | The pagination object that this pager is associated with. | yii\bootstrap4\LinkPager |
$prevPageCssClass | string | The CSS class for the "previous" page button. | yii\bootstrap4\LinkPager |
$prevPageLabel | string|boolean | The text label for the "previous" page button. | yii\bootstrap4\LinkPager |
$registerLinkTags | boolean | Whether to register link tags in the HTML header for prev, next, first and last page. | yii\bootstrap4\LinkPager |
Public Methods
Method | Description | Defined By |
---|---|---|
getView() | yii\bootstrap4\BootstrapWidgetTrait | |
init() | Initializes the pager. | yii\bootstrap4\LinkPager |
run() | Executes the widget. | yii\bootstrap4\LinkPager |
Protected Methods
Method | Description | Defined By |
---|---|---|
getPageRange() | yii\bootstrap4\LinkPager | |
registerClientEvents() | Registers JS event handlers that are listed in $clientEvents. | yii\bootstrap4\BootstrapWidgetTrait |
registerLinkTags() | Registers relational link tags in the html header for prev, next, first and last page. | yii\bootstrap4\LinkPager |
registerPlugin() | Registers a specific Bootstrap plugin and the related events | yii\bootstrap4\BootstrapWidgetTrait |
renderPageButton() | Renders a page button. | yii\bootstrap4\LinkPager |
renderPageButtons() | Renders the page buttons. | yii\bootstrap4\LinkPager |
Property Details
The CSS class for the active (currently selected) page button.
Whether to render current page button as disabled.
The options for the disabled tag to be generated inside the disabled list element. In order to customize the html tag, please use the tag key.
$disabledListItemSubTagOptions = ['class' => 'disabled-link'];
The CSS class for the disabled page buttons.
The CSS class for the "first" page button.
The text label for the "first" page button. Note that this will NOT be HTML-encoded. If it's specified as true, page number will be used as label. Default is false that means the "first" page button will not be displayed.
Hide widget when only one page exist.
The CSS class for the "last" page button.
The text label for the "last" page button. Note that this will NOT be HTML-encoded. If it's specified as true, page number will be used as label. Default is false that means the "last" page button will not be displayed.
HTML attributes which will be applied to all link containers
HTML attributes for the link in a pager container tag.
See also \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered.
HTML attributes for the pager list tag.
See also \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered.
Maximum number of page buttons that can be displayed. Defaults to 10.
The CSS class for the "next" page button.
The label for the "next" page button. Note that this will NOT be HTML-encoded. If this property is false, the "next" page button will not be displayed.
HTML attributes for the pager container tag.
See also \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered.
The CSS class for the each page button.
The pagination object that this pager is associated with. You must set this property in order to make LinkPager work.
The CSS class for the "previous" page button.
The text label for the "previous" page button. Note that this will NOT be HTML-encoded. If this property is false, the "previous" page button will not be displayed.
Whether to register link tags in the HTML header for prev, next, first and last page.
Defaults to false
to avoid conflicts when multiple pagers are used on one page.
See also:
Method Details
protected array getPageRange ( ) | ||
return | array |
The begin and end pages that need to be displayed. |
---|
protected function getPageRange()
{
$currentPage = $this->pagination->getPage();
$pageCount = $this->pagination->getPageCount();
$beginPage = max(0, $currentPage - (int)($this->maxButtonCount / 2));
if (($endPage = $beginPage + $this->maxButtonCount - 1) >= $pageCount) {
$endPage = $pageCount - 1;
$beginPage = max(0, $endPage - $this->maxButtonCount + 1);
}
return [$beginPage, $endPage];
}
public abstract \yii\web\View getView ( ) | ||
return | \yii\web\View |
The view object that can be used to render views or view files. |
---|
abstract function getView();
Initializes the pager.
public void init ( ) | ||
throws | \yii\base\InvalidConfigException |
---|
public function init()
{
parent::init();
if ($this->pagination === null) {
throw new InvalidConfigException('The "pagination" property must be set.');
}
}
Defined in: yii\bootstrap4\BootstrapWidgetTrait::registerClientEvents()
Registers JS event handlers that are listed in $clientEvents.
protected void registerClientEvents ( ) |
protected function registerClientEvents()
{
if (!empty($this->clientEvents)) {
$id = $this->options['id'];
$js = [];
foreach ($this->clientEvents as $event => $handler) {
$js[] = "jQuery('#$id').on('$event', $handler);";
}
$this->getView()->registerJs(implode("\n", $js));
}
}
Registers relational link tags in the html header for prev, next, first and last page.
These links are generated using \yii\data\Pagination::getLinks().
See also http://www.w3.org/TR/html401/struct/links.html#h-12.1.2.
protected void registerLinkTags ( ) |
protected function registerLinkTags()
{
$view = $this->getView();
foreach ($this->pagination->getLinks() as $rel => $href) {
$view->registerLinkTag(['rel' => $rel, 'href' => $href], $rel);
}
}
Defined in: yii\bootstrap4\BootstrapWidgetTrait::registerPlugin()
Registers a specific Bootstrap plugin and the related events
protected void registerPlugin ( $name ) | ||
$name | string |
The name of the Bootstrap plugin |
protected function registerPlugin($name)
{
$view = $this->getView();
BootstrapPluginAsset::register($view);
$id = $this->options['id'];
if ($this->clientOptions !== false) {
$options = empty($this->clientOptions) ? '' : Json::htmlEncode($this->clientOptions);
$js = "jQuery('#$id').$name($options);";
$view->registerJs($js);
}
$this->registerClientEvents();
}
Renders a page button.
You may override this method to customize the generation of page buttons.
protected string renderPageButton ( $label, $page, $class, $disabled, $active ) | ||
$label | string |
The text label for the button |
$page | integer |
The page number |
$class | string |
The CSS class for the page button. |
$disabled | boolean |
Whether this page button is disabled |
$active | boolean |
Whether this page button is active |
return | string |
The rendering result |
---|
protected function renderPageButton($label, $page, $class, $disabled, $active)
{
$options = $this->linkContainerOptions;
$linkWrapTag = ArrayHelper::remove($options, 'tag', 'li');
Html::addCssClass($options, empty($class) ? $this->pageCssClass : $class);
$linkOptions = $this->linkOptions;
$linkOptions['data-page'] = $page;
if ($active) {
Html::addCssClass($options, $this->activePageCssClass);
}
if ($disabled) {
Html::addCssClass($options, $this->disabledPageCssClass);
$disabledItemOptions = $this->disabledListItemSubTagOptions;
$linkOptions = ArrayHelper::merge($linkOptions, $disabledItemOptions);
$linkOptions['tabindex'] = '-1';
}
return Html::tag($linkWrapTag, Html::a($label, $this->pagination->createUrl($page), $linkOptions), $options);
}
Renders the page buttons.
protected string renderPageButtons ( ) | ||
return | string |
The rendering result |
---|
protected function renderPageButtons()
{
$pageCount = $this->pagination->getPageCount();
if ($pageCount < 2 && $this->hideOnSinglePage) {
return '';
}
$buttons = [];
$currentPage = $this->pagination->getPage();
// first page
$firstPageLabel = $this->firstPageLabel === true ? '1' : $this->firstPageLabel;
if ($firstPageLabel !== false) {
$buttons[] = $this->renderPageButton(
$firstPageLabel,
0,
$this->firstPageCssClass,
$currentPage <= 0,
false
);
}
// prev page
if ($this->prevPageLabel !== false) {
if (($page = $currentPage - 1) < 0) {
$page = 0;
}
$buttons[] = $this->renderPageButton(
$this->prevPageLabel,
$page,
$this->prevPageCssClass,
$currentPage <= 0,
false
);
}
// internal pages
list($beginPage, $endPage) = $this->getPageRange();
for ($i = $beginPage; $i <= $endPage; ++$i) {
$buttons[] = $this->renderPageButton(
$i + 1,
$i,
null,
$this->disableCurrentPageButton && $i == $currentPage,
$i == $currentPage
);
}
// next page
if ($this->nextPageLabel !== false) {
if (($page = $currentPage + 1) >= $pageCount - 1) {
$page = $pageCount - 1;
}
$buttons[] = $this->renderPageButton(
$this->nextPageLabel,
$page,
$this->nextPageCssClass,
$currentPage >= $pageCount - 1,
false
);
}
// last page
$lastPageLabel = $this->lastPageLabel === true ? $pageCount : $this->lastPageLabel;
if ($lastPageLabel !== false) {
$buttons[] = $this->renderPageButton(
$lastPageLabel,
$pageCount - 1,
$this->lastPageCssClass,
$currentPage >= $pageCount - 1,
false
);
}
$options = $this->listOptions;
$tag = ArrayHelper::remove($options, 'tag', 'ul');
return Html::tag($tag, implode("\n", $buttons), $options);
}
Executes the widget.
This overrides the parent implementation by displaying the generated page buttons.
public void run ( ) |
public function run()
{
if ($this->registerLinkTags) {
$this->registerLinkTags();
}
$options = $this->options;
$tag = ArrayHelper::remove($options, 'tag', 'nav');
$html = Html::beginTag($tag, $options);
$html .= $this->renderPageButtons();
$html .= Html::endTag($tag);
return $html;
}