{"id":19934427,"url":"https://github.com/motokraft/pagination","last_synced_at":"2025-10-16T14:45:54.660Z","repository":{"id":62551333,"uuid":"508973007","full_name":"motokraft/pagination","owner":"motokraft","description":"Пагинация по страницам с использованием html-element","archived":false,"fork":false,"pushed_at":"2022-07-01T15:30:01.000Z","size":7,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-01-12T02:06:34.678Z","etag":null,"topics":["html","html-element","html5","pagination","php8"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/motokraft.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-06-30T07:13:21.000Z","updated_at":"2023-07-04T04:48:02.000Z","dependencies_parsed_at":"2022-11-03T02:01:06.567Z","dependency_job_id":null,"html_url":"https://github.com/motokraft/pagination","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/motokraft%2Fpagination","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/motokraft%2Fpagination/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/motokraft%2Fpagination/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/motokraft%2Fpagination/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/motokraft","download_url":"https://codeload.github.com/motokraft/pagination/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241361394,"owners_count":19950379,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["html","html-element","html5","pagination","php8"],"created_at":"2024-11-12T23:16:48.178Z","updated_at":"2025-10-16T14:45:54.568Z","avatar_url":"https://github.com/motokraft.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Пагинация по страницам с использованием html-element\n\n![Package version](https://img.shields.io/github/v/release/motokraft/pagination)\n![Total Downloads](https://img.shields.io/packagist/dt/motokraft/pagination)\n![PHP Version](https://img.shields.io/packagist/php-v/motokraft/pagination)\n![Repository Size](https://img.shields.io/github/repo-size/motokraft/pagination)\n![License](https://img.shields.io/packagist/l/motokraft/pagination)\n\n## Установка\n\nБиблиотека устанавливается с помощью пакетного менеджера [**Composer**](https://getcomposer.org/)\n\nДобавьте библиотеку в файл `composer.json` вашего проекта:\n\n```json\n{\n    \"require\": {\n        \"motokraft/pagination\": \"^1.0\"\n    }\n}\n```\n\nили выполните команду в терминале\n\n```\n$ php composer require motokraft/pagination\n```\n\nВключите автозагрузчик Composer в код проекта:\n\n```php\nrequire __DIR__ . '/vendor/autoload.php';\n```\n\n## Привер класса вывода пагинации\n\n```php\nuse \\Motokraft\\HtmlElement\\HtmlElement;\nuse \\Motokraft\\Pagination\\Renderer\\BaseRenderer;\nuse \\Motokraft\\Pagination\\Renderer\\RendererInterface;\nuse \\Motokraft\\Uri\\Uri;\n\nclass DemoPagination extends BaseRenderer implements RendererInterface\n{\n    function render(HtmlElement $element) : HtmlElement\n    {\n        $result = $element-\u003eappendCreateHtml('div', [\n            'class' =\u003e 'category-pagination-inner'\n        ]);\n\n        // Вывод счетчика навигации\n        $this-\u003erenderCounter($result);\n\n        // Вывод контейнера навигация\n        $this-\u003erenderPagination($result);\n\n        return $result;\n    }\n\n    private function renderCounter(HtmlElement $element)\n    {\n        $padding = $this-\u003egetPagination();\n\n        $div = $element-\u003eappendCreateHtml('div', [\n            'class' =\u003e 'pagination-legend-inner'\n        ]);\n\n        $total = $padding-\u003egetTotal();\n        $limitstart = $padding-\u003egetLimitStart();\n        $limit = $padding-\u003egetLimit();\n        $toResult = $total;\n\n        if (($limitstart + $limit) \u003c $total)\n        {\n            $toResult = $limitstart + $limit;\n        }\n\n        if ($total \u003e 0)\n        {\n            $div-\u003ehtml(sprintf(\n                'Showing %s to %s of %s entries',\n                ($limitstart + 1), $toResult, $total\n            ));\n        }\n        else\n        {\n            $div-\u003ehtml('No matching records found');\n        }\n    }\n\n    private function renderPagination(HtmlElement $element)\n    {\n        $uri = clone Uri::getInstance();\n\n        $nav = $element-\u003eappendCreateHtml('nav', [\n            'class' =\u003e 'pagination-nav-inner'\n        ]);\n\n        // Кнопка 'В начало'\n        $first = $this-\u003e_prepareFirstItem();\n        $first = $first-\u003erender($nav, clone $uri);\n\n        $first-\u003eaddClass('nav-item-inner');\n        $first-\u003eaddAttrAria('label', 'First');\n\n        // Кнопка 'Назад'\n        $prev = $this-\u003e_preparePrevItem();\n        $prev = $prev-\u003erender($nav, clone $uri);\n\n        $prev-\u003eaddClass('nav-item-inner');\n        $prev-\u003eaddAttrAria('label', 'Prev');\n\n        foreach($this-\u003e_getPages() as $page)\n        {\n            // Нумерация страниц\n            $page = $page-\u003erender($nav, clone $uri);\n            $page-\u003eaddClass('nav-item-inner');\n        }\n\n        // Кнопка 'Вперед'\n        $next = $this-\u003e_prepareNextItem();\n        $next = $next-\u003erender($nav, clone $uri);\n\n        $next-\u003eaddClass('nav-item-inner');\n        $next-\u003eaddAttrAria('label', 'Next');\n\n        // Кнопка 'В конец'\n        $last = $this-\u003e_prepareLasttItem();\n        $last = $last-\u003erender($nav, clone $uri);\n\n        $last-\u003eaddClass('nav-item-inner');\n        $last-\u003eaddAttrAria('label', 'Last');\n    }\n}\n```\n\n## Примеры инициализации\n\n```php\nuse \\Motokraft\\Pagination\\Pagination;\nuse \\Motokraft\\HtmlElement\\HtmlElement;\n\n// Добавляем класс из примера выще\nPagination::addRenderer('demo', DemoPagination::class);\n\n$div = new HtmlElement('div');\n\n$pagination = new Pagination(367, 0, 10, 9);\n$pagination-\u003erender($div, 'demo');\n\necho $div;\n```\n\n## Полученный результат\n\n```html\n\u003cdiv data-level=\"0\"\u003e\n    \u003cdiv class=\"category-pagination-inner\" data-level=\"1\"\u003e\n        \u003cdiv class=\"pagination-legend-inner\" data-level=\"2\"\u003e\n            Showing 1 to 10 of 367 entries\n        \u003c/div\u003e\n        \u003cnav class=\"pagination-nav-inner\" data-level=\"2\"\u003e\n            \u003cspan class=\"disabled page-first nav-item-inner\" aria-label=\"First\" data-level=\"3\"\u003e\u003c/span\u003e\n            \u003cspan class=\"disabled page-prev nav-item-inner\" aria-label=\"Prev\" data-level=\"3\"\u003e\u003c/span\u003e\n            \u003cspan class=\"active nav-item-inner\" data-level=\"3\"\u003e\n                1\n            \u003c/span\u003e\n            \u003ca href=\"/pagination.php?page=2\" class=\"nav-item-inner\" data-level=\"3\"\u003e\n                2\n            \u003c/a\u003e\n            \u003ca href=\"/pagination.php?page=3\" class=\"nav-item-inner\" data-level=\"3\"\u003e\n                3\n            \u003c/a\u003e\n            \u003ca href=\"/pagination.php?page=4\" class=\"nav-item-inner\" data-level=\"3\"\u003e\n                4\n            \u003c/a\u003e\n            \u003ca href=\"/pagination.php?page=5\" class=\"nav-item-inner\" data-level=\"3\"\u003e\n                5\n            \u003c/a\u003e\n            \u003ca href=\"/pagination.php?page=6\" class=\"nav-item-inner\" data-level=\"3\"\u003e\n                6\n            \u003c/a\u003e\n            \u003ca href=\"/pagination.php?page=7\" class=\"nav-item-inner\" data-level=\"3\"\u003e\n                7\n            \u003c/a\u003e\n            \u003ca href=\"/pagination.php?page=8\" class=\"nav-item-inner\" data-level=\"3\"\u003e\n                8\n            \u003c/a\u003e\n            \u003ca href=\"/pagination.php?page=9\" class=\"nav-item-inner\" data-level=\"3\"\u003e\n                9\n            \u003c/a\u003e\n            \u003ca href=\"/pagination.php?page=2\" class=\"page-next nav-item-inner\" aria-label=\"Next\" data-level=\"3\"\u003e\u003c/a\u003e\n            \u003ca href=\"/pagination.php?page=37\" class=\"page-last nav-item-inner\" aria-label=\"Last\" data-level=\"3\"\u003e\u003c/a\u003e\n        \u003c/nav\u003e\n    \u003c/div\u003e\n\u003c/div\u003e\n```\n\n## Лицензия\n\nЭта библиотека находится под лицензией MIT License.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmotokraft%2Fpagination","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmotokraft%2Fpagination","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmotokraft%2Fpagination/lists"}