Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/neoacevedo/laravel-gridview

Genera una tabla HTML con datos de array de Eloquent/Collections.
https://github.com/neoacevedo/laravel-gridview

gridview html laravel table

Last synced: about 2 months ago
JSON representation

Genera una tabla HTML con datos de array de Eloquent/Collections.

Awesome Lists containing this project

README

        

Laravel GridView
============

Laravel GridView es un paquete para generar una tabla con datos. Permite generar de manera rápida una tabla a partir de un array de modelos Eloquent o Collections, usando los atributos como columnas y cada fila es un modelo con sus datos.

## Instalación

La forma preferida de instalar esta extensión es a través de [composer](http://getcomposer.org/download/).

Luego ejecute

```
php composer.phar require --prefer-dist neoacevedo/laravel-gridview "*"
```

o agregue

```
"neoacevedo/laravel-gridview": "*"
```

a la sección require de su archivo `composer.json`.

Luego ejecute el siguiente comando _artisan_ para copiar los assets en el directorio _public/vendor/gridview/assets_:

```bash
php artisan vendor:publish --provider="neoacevedo\\gridview\\Providers\\GridViewServiceProvider" --tag=gridview-assets
```

## Uso

Una vez que la extensión está instalada, puede crear la tabla de la siguiente forma:

Registre el servico en el archivo de configuración _app.php_ en la sección `providers`:

```php
...
/*
* Package Service Providers...
*/
neoacevedo\gridview\Providers\GridViewServiceProvider::class,
...
```

Como ejemplo, en su controlador, en el método index, puede poner lo siguiente:

```php
public function index(Request $request, int $page = 1, int $perPage = 5)
{
$data = [
[
'nombre' => 'Andres',
'fecha' => 1706200888,
'email' => '[email protected]',
],
[
'nombre' => 'Jorge',
'fecha' => 1706200890,
'email' => '[email protected]',
],
[
'nombre' => 'Nelson',
'fecha' => 1706200990,
'email' => '[email protected]',
],
[
'nombre' => 'Juan',
'fecha' => 1706201000,
'email' => '[email protected]',
],
[
'nombre' => 'Pedro',
'fecha' => 1706201010,
'email' => '[email protected]',
],
[
'nombre' => 'Felipe',
'fecha' => 1706201020,
'email' => '[email protected]',
],
[
'nombre' => 'Fredy',
'fecha' => 1706201030,
'email' => '[email protected]',
],
[
'nombre' => 'Richard',
'fecha' => 1706201040,
'email' => '[email protected]',
],
];

Collection::macro('paginate', function ($perPage, $total = null, $page = null, $pageName = 'page') {
$page = $page ?: LengthAwarePaginator::resolveCurrentPage($pageName);

return new LengthAwarePaginator($this->forPage($page, $perPage), $total ?: $this->count(), $perPage, $page, [
'path' => LengthAwarePaginator::resolveCurrentPath(),
'pageName' => $pageName,
]);
});

$dataProvider = collect($data)->paginate(5);
return response()->view('index', compact('dataProvider'));
}
```

Para Laravel 6.x o uso como clase:

```php
{{ gridview()->widget([
'dataProvider' => $dataProvider,
'tableOptions' => [
' id' => 'datatable',
'class' => 'dataTable'
],
'columns' => [
[
'attribute' => 'nombre',
'headerOptions' => ['data-sortable' => 'true']
],
[
'attribute' => 'fecha',
'format' => ['datetime', 'd/m/Y H:i:s']
],
'email:email:Email',
[
'class' => '\neoacevedo\gridview\Column\ActionColumn',
'header' => 'Actions'
]
]
]) }}
```

Para Laravel >=7.x, se puede de la forma anterior, o como componente:

```php

```

La propiedad `dataProvider` tiene que ser de tipo `\Illuminate\Contracts\Pagination\LengthAwarePaginator` con el fin de generar el paginador.

En el array de columnas, puede especificar la clase que se encargará de renderizar el contenido de toda la columna a través de la propiedad `class`. Las clases de columna que soporta GridView son:

- `\neoacevedo\gridview\Column\ActionColumn`: Columna que se encarga de renderizar botones para diferentes acciones sobre la fila.
- `\neoacevedo\gridview\Column\CheckboxColumn`: Columna que se encarga de renderizar checkboxes.
- `\neoacevedo\gridview\Column\DataColumn`: Columna que se encarga de renderizar la mayoría de los datos. Es la columna predefinida si se omite la propiedad `class`.
- `\neoacevedo\gridview\Column\RadioButtonColumn`: Columna que se encarga de renderizar inputs de radio
- `\neoacevedo\gridview\Column\SerialColumn`: Columna que renderiza el número de cada fila.

Con cualquiera de las dos opciones, se obtendrá una tabla parecida a la siguiente:

```html








Nombre




Fecha




Email




Actions








Andres
2024-01-25 16:41:28
[email protected]













Jorge
2024-01-25 16:41:30
[email protected]











```

### Sobrescribir la plantilla `Blade`

Si desea sobrescribir la vista que genera la tabla, ejecute el siguiente comando para que copie los archivos de vista en
_resources/views/vendor/gridview_:

```bash
php artisan vendor:publish --provider="neoacevedo\\gridview\\Providers\\GridViewServiceProvider" --tag=gridview-view
```

Si está usando GridView como componente, la vista será copiada en _resources/views/components_:

```bash
php artisan vendor:publish --provider="neoacevedo\\gridview\\Providers\\GridViewServiceProvider" --tag=gridview-component-view
```