Как добавить ручную нумерацию страниц в Laravel - PullRequest
0 голосов
/ 29 апреля 2020

Я новичок в Laravel и php. Я пытаюсь показать список статей с нумерацией страниц.

У меня есть контроллер:

public function poradnik(Request $request)
    {
        MetaTag::set('title', 'name.pl | xxxxx');
        MetaTag::set('description', 'name.pl | xxxxx');
        MetaTag::set('keywords', 'name.pl | xxxxx');

        $data = [
            [
                'title' => 'Strona Internetowa, jak Odnieść Sukces?',
                'desc' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vestibulum luctus ex. Morbi sollicitudin condimentum ante, vel euismod quam rhoncus nec. Ut consectetur convallis libero, ut venenatis libero sagittis ac. Sed hendrerit risus quis luctus dignissim. Morbi tincidunt tempus enim, at volutpat leo placerat sed. Aliquam pharetra dolor faucibus, posuere lacus sit amet, venenatis nulla...',
                'url' => 'poradnik-strona-internetowa-jak-odniesc-sukces'
            ],
            [
                'title' => 'Znaczenie Linków w Budowaniu Pozycji Strony',
                'desc' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vestibulum luctus ex. Morbi sollicitudin condimentum ante, vel euismod quam rhoncus nec. Ut consectetur convallis libero, ut venenatis libero sagittis ac. Sed hendrerit risus quis luctus dignissim. Morbi tincidunt tempus enim, at volutpat leo placerat sed. Aliquam pharetra dolor faucibus, posuere lacus sit amet, venenatis nulla...',
                'url' => 'poradnik-znaczenie-linkow-w-budowaniu-pozycji-strony'
            ],
            [
                'title' => 'Planowanie Sklepu Internetowego',
                'desc' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vestibulum luctus ex. Morbi sollicitudin condimentum ante, vel euismod quam rhoncus nec. Ut consectetur convallis libero, ut venenatis libero sagittis ac. Sed hendrerit risus quis luctus dignissim. Morbi tincidunt tempus enim, at volutpat leo placerat sed. Aliquam pharetra dolor faucibus, posuere lacus sit amet, venenatis nulla...',
                'url' => 'poradnik-planowanie-sklepu-internetowego'
            ]
.........
        ];

        return view('frontend.poradnik.index', ['data' => $data]);
    }

(243 записи)

Просмотр:

@foreach($data as $value)
                        <li class="guide-item">
                            <a href="{{ $value['www'] }}">
                                <h2>{{ $value['title'] }}</h2></a>
                            <a href="{{ $value['www'] }}"><p
                                    class="justify-text">
                                    {{ $value['desc'] }}
                                </p></a>
                        </li>
                    @endforeach

<nav aria-label="Page navigation">
                    <ul class="pagination">
                        <li class="page-item"><a class="page-link" href="#" aria-label="Previous"></a></li>
                        <li class="page-item"><a class="page-link" href="#">1</a></li>
                        <li class="page-item"><a class="page-link" href="#">2</a></li>
                        <li class="page-item"><a class="page-link" href="#">3</a></li>
                        <li class="page-item"><a class="page-link" href="#" aria-label="Next"></a></li>
                    </ul>
                </nav>

Как можно Добавить пагинацию в свой код? Мне нужно ограничить 4 записи на странице. Я использую Laravel 6:)

Ответы [ 2 ]

3 голосов
/ 29 апреля 2020

Вы можете использовать LengthAwarePaginator для достижения этого.

Пример для вашего случая:

$currentPage = $request->page ?? 1;
$itemsPerPage = 4;

// You should manually make a slice of array for current page
$items = array_slice($data, ($currentPage - 1) * $itemsPerPage, $itemsPerPage);
$pagination = new LengthAwarePaginator($items, count($data), $itemsPerPage, $currentPage);

Затем передать этот экземпляр LengthAwarePaginator в массив параметров при вызове view например:

return view('frontend.poradnik.index', ['data' => $pagination]);

Чтобы использовать его в своем представлении, выполните итерацию по $data для визуализации ваших элементов.

@foreach($data as $value)
    {{-- Your HTML code here, e.g. show title --}}
    <h1>{{ $value['title'] }}</h1>
@endforeach

Чтобы показать нумерацию страниц, используйте метод links(), подобный следующему:

{{ $data->links() }}
0 голосов
/ 29 апреля 2020

Если я правильно понимаю, вы хотите нумерацию страниц в вашем массиве. Если это так, взгляните на этот пример:

class PaginationController extends Controller
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    public function index()
    {
        $myArray = [
            ['id'=>1, 'title'=>'Laravel CRUD'],
            ['id'=>2, 'title'=>'Laravel Ajax CRUD'],
            ['id'=>3, 'title'=>'Laravel CORS Middleware'],
            ['id'=>4, 'title'=>'Laravel Autocomplete'],
            ['id'=>5, 'title'=>'Laravel Image Upload'],
            ['id'=>6, 'title'=>'Laravel Ajax Request'],
            ['id'=>7, 'title'=>'Laravel Multiple Image Upload'],
            ['id'=>8, 'title'=>'Laravel Ckeditor'],
            ['id'=>9, 'title'=>'Laravel Rest API'],
            ['id'=>10, 'title'=>'Laravel Pagination'],
        ];

        $data = $this->paginate($myArray);

        return view('paginate', compact('data'));
    }

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    public function paginate($items, $perPage = 5, $page = null, $options = [])
    {
        $page = $page ?: (Paginator::resolveCurrentPage() ?: 1);
        $items = $items instanceof Collection ? $items : Collection::make($items);
        return new LengthAwarePaginator($items->forPage($page, $perPage), $items->count(), $perPage, $page, $options);
    }
}

Выше есть массив, затем запускается функция разбивки на страницы для создания нумерации страниц с использованием laravel paginator.

Затем в Клинок вы бы сделали следующее:

<div class="container">
    <table class="table table-bordered">
        <tr>
            <th>Id</th>
            <th>Title</th>
        </tr>
        @foreach($data as $post)
        <tr>
            <td>{{ $post->id }}</td>
            <td>{{ $post->title }}</td>
        </tr>
        @endforeach
    </table>
</div>

{{ $data->links() }}

Для более подробного объяснения взгляните на источник: https://www.itsolutionstuff.com/post/how-to-create-pagination-from-array-in-laravelexample.html

...