За последние 24 часа нас посетили 17938 программистов и 1582 робота. Сейчас ищет 1281 программист ...

Пагинация

Тема в разделе "Laravel", создана пользователем Dimon2x, 4 июн 2018.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    Как для пагинации добавить классы? Сейчас просто выводится в простых лишках

    PHP:
    1. $posts = Post::paginate(2);
    --- Добавлено ---
    Вывожу так

    Код (Text):
    1. {{$posts->links()}}
    --- Добавлено ---
    Всё понял, нашёл нужные методы
     
  2. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    Допустимый ли такой код пагинатора в laravel? Плохо то, что я напрямую обращаюсь к массиву GET?

    Надо что бы первые и последние страницы исчезали из видимости, по мере нахождения на странице.

    Например, изначально так: 1 2 3 4. Если окажусь на 6 странице, то первые 2 не будут отображаться и будет так 3 4 5 6.

    Код полностью рабочий

    PHP:
    1.  <div class="myPag">
    2.                         <a href="?page=1">Первая</a>
    3.                         <?php
    4.                         if (!empty($_GET['page'])) {
    5.  
    6.                             if (($_GET['page'] + 3) <= $posts->total()) {
    7.                                 $countPag = $_GET['page'] + 3;
    8.                             } else {
    9.                                 $countPag = $posts->total();
    10.                             }
    11.  
    12.                             $prev = $_GET['page'] - 1;
    13.  
    14.                             if ($_GET['page'] != 1) {
    15.                                 echo '<a href=?page=' . $prev . '>Назад</a>';
    16.                             }
    17.  
    18.                             if ($_GET['page'] > 1) { //это для предыдущих страниц (можно удалить полностью условие, тогда их не будет)
    19.                                 $prevPage = $_GET['page'] - 1;
    20.                                 $arr = [];
    21.                                 for ($j = $prevPage; $j >= 1; $j--) {
    22.                                     $arr[] = $j;
    23.                                 }
    24.                                 $newArr = array_reverse($arr);
    25.                                 $output = array_slice($newArr, -3, 3);
    26.  
    27.                                 foreach ($output as $key => $val) {
    28.                                     echo '<a href=?page=' . $val . '>' . $val . '</a>';
    29.                                 }
    30.                             }
    31.  
    32.                             for ($i = $_GET['page']; $i <= $countPag; $i++) {
    33.                                 if ($_GET['page'] == $i) {
    34.                                     echo '<span class="active">' . $i . '</span>';
    35.                                 } else {
    36.                                     echo '<a href=?page=' . $i . '>' . $i . '</a>';
    37.                                 }
    38.                             }
    39.  
    40.                             $next = $_GET['page'] + 1;
    41.  
    42.  
    43.                             if ($_GET['page'] != $posts->total()) {
    44.                                 echo '<a href=?page=' . $next . '>Далее</a>';
    45.                             }
    46.                         } else {
    47.                             for ($i = 1; $i <= 3; $i++) {
    48.                                 if ($i == 1) {
    49.                                     echo '<span class="active">' . $i . '</span>';
    50.                                 } else {
    51.                                     echo '<a href=?page=' . $i . '>' . $i . '</a>';
    52.                                 }
    53.                             }
    54.                             echo '<a href=?page=2>Далее</a>';
    55.                         }
    56.                         ?>
    57.  
    58.                         <a href="?page=<?php echo $posts->lastPage(); ?>">Последняя</a>
    59.  
    60.                     </div>
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Допустимый, но лучше сделать всё через Laravel. Если бы я был твоим начальником в конторе по Laravel, я бы тебя за такой код по головке не погладил. Вот же: https://laravel.com/docs/master/pagination#customizing-the-pagination-view, и делай там внутри что хочешь, используя стандартные методы
    --- Добавлено ---
    В любой системе надо всё делать стандартно. Если ты программируешь под WordPress, значит стараешься как можно больше использовать его функций/хуков и пр, если под Laravel - то делать стандартным путём для Laravel.
     
  4. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    @mkramer там про манипуляцию со страницами ничего нету
    --- Добавлено ---
    @mkramer а такой выведет все страницы

    PHP:
    1.  <div>
    2.                         <a href="?page=1">Первая</a>
    3.                         @for ($i = 1; $i < $posts->total()+1; $i++)
    4.                             @if ($i != $posts->currentPage())
    5.                             <a href="?page={{ $i }}">{{ $i }}</a>
    6.                             @else
    7.                             {{ $posts->currentPage()}}
    8.                             @endif
    9.  
    10.                         @endfor
    11.                         <a href="?page=<?php echo $posts->lastPage(); ?>">Последняя</a>
    12.                     </div>
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Запили свой шаблон пагинации и манипулируй сколько хочешь. В доке и не должны решать твою конкретную задачу
     
  6. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    @mkramer немного улучшил код, теперь он стал более понятен. Только, если надо будет изменить количество отображаемых постов, то код придётся немного изменить.

    PHP:
    1. <?php
    2.                        
    3.                             //total показывает не количество страниц, а количество записей в БД
    4.                             $page = [1,2,3];
    5.                             $prevPage = [];
    6.                             $total = $posts->total();
    7.                            
    8.                            
    9.                             // $countPage количество страниц
    10.                            
    11.                            
    12.                            
    13.                             function paginator($page, $current) {
    14.                                
    15.                                 foreach($page as $key => $val) {
    16.                                   if($current!= $val) {
    17.                                     if($val != 0) {
    18.                                          echo '<a href=?page=' . $val . '>' . $val . '</a>';
    19.                                     }
    20.                                   }
    21.                                    else {
    22.                                         echo '<span>' . $val . '</span>';
    23.                                    }
    24.                                  
    25.                                }
    26.                             }
    27.                            
    28.                             if($posts->currentPage() < 3) {
    29.                                paginator($page, $posts->currentPage());
    30.                             }
    31.                            
    32.                             if(!empty($_GET['page'])) {
    33.                                if($posts->currentPage() >= 3 && $posts->currentPage() <= $total) {
    34.                                     $ostatok = $posts->currentPage();
    35.                                     $once = $ostatok + 1;
    36.                                     $two = $ostatok + 2;
    37.                                    
    38.                                     $prev1 = $posts->currentPage() - 3;
    39.                                     $prev2 = $posts->currentPage() - 2;
    40.                                     $prev3 = $posts->currentPage() - 1;
    41.                                    
    42.                                    
    43.                                     array_splice($prevPage, 0, 3);
    44.                                     array_push($prevPage, $prev1, $prev2, $prev3);
    45.  
    46.                                     array_splice($page, 0, 3);
    47.                                    
    48.                                        
    49.                                     if($total >= $once && $total >= $two){
    50.                                         array_push($page, $once, $two);
    51.                                     }
    52.                                    
    53.                                     elseif($total >= $once) {
    54.                                          array_push($page, $once);
    55.                                     }
    56.                                     paginator($prevPage, $posts->currentPage());
    57.                                     echo '<span>'.$posts->currentPage().'</span>';
    58.                                     paginator($page, $posts->currentPage());
    59.                                    
    60.                                 }
    61.                             }  
    62.                            
    63.                         ?>
     
  7. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    Нашёл

    php artisan vendor:publish --tag=laravel-pagination