es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Paginación para archivos markdown en Laravel 8.

Quiero utilizar la paginación para un blog que renderiza las publicaciones a partir de archivos Markdown a través de almacenamiento.

En el método del controlador, estoy usando lo siguiente:

    // Obteniendo todos los archivos del almacenamiento:
    $files = Storage::disk('articles')->allFiles();
    $articles = [];

    foreach ($files as $file) {
       $storageFile = Storage::disk('posts')->get($file);
       array_push($articles, $storageFile);
    }

    return view('articles', compact('files', 'articles'));

¿Cómo puedo obtener los mismos resultados que:

    $posts = Post::orderBy('created_at', 'desc')
            ->paginate(1);

Quiero mostrar un artículo (un archivo) por página.

¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener los mismos resultados que $posts = Post::orderBy('created_at', 'desc')->paginate(1); para su blog que muestra publicaciones de archivos markdown a través del almacenamiento, puede usar el método paginate() en la matriz $articles. Aquí hay un ejemplo:

    // Obtener todos los archivos del almacenamiento:
    $files = Storage::disk('articles')->allFiles();
    $articles = [];
    
    foreach ($files as $file) {
       $storageFile = Storage::disk('posts')->get($file);
       array_push($articles, $storageFile);
    }
    
    $articlesPerPage = 1;
    $currentPage = request()->get('page', 1); // Obtener el valor de la página actual de la cadena de consulta
    $pagedData = array_slice($articles, ($currentPage - 1) * $articlesPerPage, $articlesPerPage);
    $articlesPaginated = new LengthAwarePaginator($pagedData, count($articles), $articlesPerPage, $currentPage);
    
    return view('articles', compact('files', 'articlesPaginated'));
    

    En este ejemplo, primero definimos el número de artículos que se mostrarán por página ($articlesPerPage) como 1. También obtenemos el valor de la página actual de la cadena de consulta usando request()->get('page', 1).

    Luego usamos array_slice() para obtener una porción de la matriz $articles según la página actual y el número de artículos por página. Esto nos da los datos para paginar.

    A continuación, creamos una nueva instancia de LengthAwarePaginator usando los datos paginados, el número total de artículos (count($articles)), el número de artículos por página y el número de página actual.

    Finalmente, pasamos la variable articlesPaginated a la vista en lugar de $articles. El paginador de Laravel se encargará de mostrar los datos paginados en el front-end.

    Tenga en cuenta que estamos usando LengthAwarePaginator en lugar de la clase más simple Paginator porque necesitamos conocer el número total de artículos para fines de paginación.

Comments are closed.