Skip to content

Instantly share code, notes, and snippets.

@Ichinya
Last active July 23, 2021 09:04
Show Gist options
  • Save Ichinya/d4a7948f6d23cc310fccb5f271374d8c to your computer and use it in GitHub Desktop.
Save Ichinya/d4a7948f6d23cc310fccb5f271374d8c to your computer and use it in GitHub Desktop.
pagination. При получаем пагинацию для страниц
function get_navigation (page, post_number, total_post, number_link)
{
let number_pages = (total_post / post_number)
if ((total_post % post_number) != 0)
{
number_pages++
}
if (total_post < post_number || page > number_pages)
{
return false
}
let result = {}
result.next = []
result.previous = []
if (page != 1)
{
result.end = 1
result.previous_page = page - 1
}
if (page > number_link + 1)
{
for (let i = page - number_link; i < page; i++)
{
result.previous.push(i)
}
}
else
{
for (let i = 1; i < page; i++)
{
result.previous.push(i)
}
}
result.current = page
if (page + number_link < number_pages)
{
for (let i = page + 1; i <= page + number_link; i++)
{
result.next.push(i)
}
}
else
{
for (let i = page + 1; i <= number_pages; i++)
{
result.next.push(i)
}
}
if (page != number_pages)
{
result.next_page = page + 1
result.end = number_pages
}
return result
}
<?php
/**
* @param int $page текущая страница
* @param int $post_number количество записей на странице
* @param int $total_post всего записей
* @param int $number_link количество ссылок слева и справа (например, если нужно две ссылки, то у страницы 1, будет 1 2 3)
* @return array|false
*/
public function get_navigation($page, $post_number, $total_post, $number_link)
{
$number_pages = (int)($totalPost / $postNumber);
if (($totalPost % $postNumber) != 0) {
$number_pages++;
}
if ($totalPost < $postNumber || $page > $number_pages) {
return FALSE;
}
$result = array();
if ($page != 1) {
$result['start'] = 1;
$result['previous_page'] = $page - 1;
}
if ($page > $numberLink + 1) {
for ($i = $page - $numberLink; $i < $page; $i++) {
$result['previous'][] = $i;
}
} else {
for ($i = 1; $i < $page; $i++) {
$result['previous'][] = $i;
}
}
$result['current'] = $page;
if ($page + $numberLink < $number_pages) {
for ($i = $page + 1; $i <= $page + $numberLink; $i++) {
$result['next'][] = $i;
}
} else {
for ($i = $page + 1; $i <= $number_pages; $i++) {
$result['next'][] = $i;
}
}
if ($page != $number_pages) {
$result['next_page'] = $page + 1;
$result['end'] = $number_pages;
}
return $result;
}
print_r(get_navigation(7, 2, 100, 3));
Array
(
[start] => 1
[previous_page] => 6
[previous] => Array
(
[0] => 4
[1] => 5
[2] => 6
)
[current] => 7
[next] => Array
(
[0] => 8
[1] => 9
[2] => 10
)
[next_page] => 8
[end] => 50
)
get_navigation(1, 10, 99, 3);
Array
(
[current] => 1
[next] => Array
(
[0] => 2
[1] => 3
[2] => 4
)
[next_page] => 2
[end] => 10
)
get_navigation(5, 10, 99, 1);
Array
(
[start] => 1
[previous_page] => 4
[previous] => Array
(
[0] => 4
)
[current] => 5
[next] => Array
(
[0] => 6
)
[next_page] => 6
[end] => 10
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment