Как построить нумерацию страниц с помощью многоточия - PullRequest
2 голосов
/ 19 июня 2019

Итак, я прочитал все связанные вопросы здесь, но они не были тем, о чем я здесь спрашиваю, поэтому, пожалуйста, если вы считаете, что этот вопрос является дубликатом, подумайте о новичке в PHP, который спрашивает, кто не может найти хороший ответ, и я тоже прошу, пожалуйста, не голосуйте, может быть, кто-то хочет мне помочь. Спасибо

кстати это мой код для нумерации страниц:

<?php
$per_page = 10;

       if(isset($_GET['page'])){
        $page = $_GET['page'];
       } else {
         $page = 1;
       }

       if($page == "" || $page == 1) {
         $page_1 = 0;
       } else {
         $page_1 = ($page * $per_page) - $per_page;
       }
$item_count = "SELECT * FROM products";
    $find_count = mysqli_query($connection, $item_count);
    $count = mysqli_num_rows($find_count);
    $count_pages = ceil($count / $per_page) ;
?>

<ul class="pagination">
<?php
       for($i = 1; $i <= $count_pages; $i++){

        if($i == $page) {

          echo "<li><a class='active-page' href='./latest.php?page=$i'>$i</a></li>";

        } else {

          echo "<li><a href='./latest.php?page=$i'>$i</a></li>";
        }

        }   
        ?>  
</ul>

код получить номер страницы с запросом Get и сделать цикл для количества страниц. и нумерация страниц выглядит так:

1 2 3 4 5 6 7 8 9 10

но я не хочу отображать как выше, я хочу сделать это короче с "...", например, если пользователь на странице 3:

1 2 3 4 5 ... 9 10

или пользователь на странице 9:

1 2 ... 7 8 9 10

как я могу манипулировать этим кодом для достижения этого?

1 Ответ

1 голос
/ 19 июня 2019

Привет, Большой пепел!

Ты уже почти там. Вам просто нужно проверить пару вещей:

- это $ i в пределах двух страниц от начала или конца счетчика страниц. Это легко, правда?

if ($i <= 2 || $i >= $count_pages - 2)

это $ i на двух страницах текущей страницы?

Это достигается с помощью

if (abs($i - $page) <= 2)

Так что теперь остается вопрос: когда поставить многоточие?

Если вы просто повторяете '...' каждый раз, когда вышеуказанные условия не выполняются, вы просто получите целую кучу эллипсов, верно?

Кроме того, возможно, вам понадобятся два эллипса (представьте, что на странице 10 страниц, и вы на 10-й странице. Вам нужно '1 2 ... 8 9 10 11 12 ... 19 20).

Я уверен, что есть более элегантный способ для этого, но я бы просто использовал флаг ($ outOfRange), который имеет значение false, когда выполняется любое из вышеперечисленных условий, но имеет значение true, если они не выполнены. Затем мы выводим '...' только тогда, когда условия не выполняются, но $ outOfRange все еще ложно. Итак, имеем:

$outOfRange = false;
for($i = 1; $i <= $count_pages; $i++) {

    if ($i <= 2 || $i >= $count_pages - 2 || abs($i - $page) <= 2) {

        // page number should be echoed so do as you did before

        $outOfRange = false;

        if($i == $page) {
            echo "<li><a class='active-page' href='./latest.php?page=$i'>$i</a></li>";
        } else {
            echo "<li><a href='./latest.php?page=$i'>$i</a></li>";
        }
    } else {

        // we are out of range! if not already out of range, echo ellipsis

        if (!$outOfRange) {
            echo ' ... ';
        }

        $outOfRange = true;

    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...