https://github.com/motokraft/pagination
Пагинация по страницам с использованием html-element
https://github.com/motokraft/pagination
html html-element html5 pagination php8
Last synced: 9 months ago
JSON representation
Пагинация по страницам с использованием html-element
- Host: GitHub
- URL: https://github.com/motokraft/pagination
- Owner: motokraft
- License: mit
- Created: 2022-06-30T07:13:21.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2022-07-01T15:30:01.000Z (about 4 years ago)
- Last Synced: 2025-01-12T02:06:34.678Z (over 1 year ago)
- Topics: html, html-element, html5, pagination, php8
- Language: PHP
- Homepage:
- Size: 6.84 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Пагинация по страницам с использованием html-element





## Установка
Библиотека устанавливается с помощью пакетного менеджера [**Composer**](https://getcomposer.org/)
Добавьте библиотеку в файл `composer.json` вашего проекта:
```json
{
"require": {
"motokraft/pagination": "^1.0"
}
}
```
или выполните команду в терминале
```
$ php composer require motokraft/pagination
```
Включите автозагрузчик Composer в код проекта:
```php
require __DIR__ . '/vendor/autoload.php';
```
## Привер класса вывода пагинации
```php
use \Motokraft\HtmlElement\HtmlElement;
use \Motokraft\Pagination\Renderer\BaseRenderer;
use \Motokraft\Pagination\Renderer\RendererInterface;
use \Motokraft\Uri\Uri;
class DemoPagination extends BaseRenderer implements RendererInterface
{
function render(HtmlElement $element) : HtmlElement
{
$result = $element->appendCreateHtml('div', [
'class' => 'category-pagination-inner'
]);
// Вывод счетчика навигации
$this->renderCounter($result);
// Вывод контейнера навигация
$this->renderPagination($result);
return $result;
}
private function renderCounter(HtmlElement $element)
{
$padding = $this->getPagination();
$div = $element->appendCreateHtml('div', [
'class' => 'pagination-legend-inner'
]);
$total = $padding->getTotal();
$limitstart = $padding->getLimitStart();
$limit = $padding->getLimit();
$toResult = $total;
if (($limitstart + $limit) < $total)
{
$toResult = $limitstart + $limit;
}
if ($total > 0)
{
$div->html(sprintf(
'Showing %s to %s of %s entries',
($limitstart + 1), $toResult, $total
));
}
else
{
$div->html('No matching records found');
}
}
private function renderPagination(HtmlElement $element)
{
$uri = clone Uri::getInstance();
$nav = $element->appendCreateHtml('nav', [
'class' => 'pagination-nav-inner'
]);
// Кнопка 'В начало'
$first = $this->_prepareFirstItem();
$first = $first->render($nav, clone $uri);
$first->addClass('nav-item-inner');
$first->addAttrAria('label', 'First');
// Кнопка 'Назад'
$prev = $this->_preparePrevItem();
$prev = $prev->render($nav, clone $uri);
$prev->addClass('nav-item-inner');
$prev->addAttrAria('label', 'Prev');
foreach($this->_getPages() as $page)
{
// Нумерация страниц
$page = $page->render($nav, clone $uri);
$page->addClass('nav-item-inner');
}
// Кнопка 'Вперед'
$next = $this->_prepareNextItem();
$next = $next->render($nav, clone $uri);
$next->addClass('nav-item-inner');
$next->addAttrAria('label', 'Next');
// Кнопка 'В конец'
$last = $this->_prepareLasttItem();
$last = $last->render($nav, clone $uri);
$last->addClass('nav-item-inner');
$last->addAttrAria('label', 'Last');
}
}
```
## Примеры инициализации
```php
use \Motokraft\Pagination\Pagination;
use \Motokraft\HtmlElement\HtmlElement;
// Добавляем класс из примера выще
Pagination::addRenderer('demo', DemoPagination::class);
$div = new HtmlElement('div');
$pagination = new Pagination(367, 0, 10, 9);
$pagination->render($div, 'demo');
echo $div;
```
## Полученный результат
```html
```
## Лицензия
Эта библиотека находится под лицензией MIT License.