Table Class: paginazione con Laravel
// nel Controller
use DeployStudio\Style\Base\Table;
class ArticoliCategorieController extends Controller
{
public function index(Request $request)
{
// preparo la collection senza all() o get() alla fine...
$categorie = new Categoria;
// recupero il numero totale delle righe...
$conteggio = $categorie->count();
// calcolo il numero di pagine...
$paginatore = Table::getPages($conteggio);
// recupero la collection limitata dal paginatore...
$categorie = $categorie->skip($paginatore['offset'])
->take($paginatore['limit'])->get();
// passo il numero totale di elementi ala view per
// mostrare correttamente il paginatore...
return view('articoliCategorie.index',
['categorie' => $categorie, 'totalElements' => $conteggio]);
}
}
// nel Blade index.blade.html
{!! Table::open('fa fa-list', 'Lista', [], $cols, ['totalElements' => $totalElements]) !!}
{!! Table::rows(...) !!}
{!! Table::close() !!}
Table Class: filtri e ordinamenti con Laravel
// nel Controller
class ArticoliCategorieController extends Controller
{
public function index(Request $request)
{
// eventuale recupero di una ricerca precedente (indicare ?fret=1 nel query string)
$chiave_ricerca = 'la.mia.pagina';
if ($request->fret) {
foreach (session($chiave_ricerca, []) as $k => $v) {
$request->$k = $v;
}
} else {
session([$chiave_ricerca => $request->all()]);
}
// se e' richiesta una relazione esterna, l'uso di with e' fortemente raccomandato
$objects = Model::with('relation_name');
// ordina
$default_sort = 'col1';
$default_dir = 'asc';
$sort = !empty($request->sort) ? $request->sort : $default_sort;
$dir = isset($request->dir) && in_array($request->dir, ['asc', 'desc']) ? $request->dir : $default_dir;
$available_sorts = ['col1_external', 'col2'];
if (in_array($sort, $available_sorts)) {
switch ($sort) {
// definisci qui i casi particolari
case 'col2':
//...
break;
// esempio di una relazione esterna
case 'col1_external':
$objects->join('external_table', 'external_table.id', 'mytable.id')
->orderBy('col1_external', $dir);
break;
default:
$objects = $objects->orderBy($sort, $dir);
break;
}
}
// filtra
$available_filters = ['col1_external', 'col2', 'col3'];
foreach ($available_filters as $filter) {
$ffilter = 'f'.$filter;
if (!empty($request->$ffilter) > 0) {
switch ($filter) {
// definisci qui i casi particolari
case 'col2':
//...
break;
// esempio di una relazione esterna
case 'col1_external':
$objects = $objects->whereHas('relation_name', function($q) use ($request, $ffilter) {
$q->where('nome', "LIKE", '%'.$request->$ffilter.'%');
});
break;
default:
$objects = $objects->where($filter, "LIKE", '%'.$request->$ffilter.'%');
}
}
}
// filtri date
$available_filters_date = ['col4_date'];
foreach ($available_filters_date as $date_filter) {
$startDate = '';
$endDate = '';
$filter_date_start = 'f'.$date_filter.'_start';
$filter_date_end = 'f'.$date_filter.'_end';
if (!empty($request->$filter_date_start) > 0 && !empty($request->$filter_date_end) > 0) {
$startDate = date('Y-m-d 00:00:00', $request->$filter_date_start / 1000);
$endDate = date('Y-m-d 23:59:59', $request->$filter_date_end / 1000);
}
if (strlen($startDate) > 0 && strlen($endDate) > 0) {
$objects = $objects->whereBetween($date_filter, array($startDate, $endDate));
unset($startDate);
unset($endDate);
}
}
$objects = $objects->get();
$actions = [
['href' => 'categoria.create', 'icon' => 'fa fa-plus', 'label' => 'Create']
];
$cols = [
['Nome categoria', 'sort' => 'col1'],
['Data creazione', 'filter' => 'col4_date'],
''
];
return view('articoliCategorie.index', ['actions' => $actions, 'cols' => $cols, 'object' => $object, 'sort' => $sort, 'sort_dir' => $dir]);
}
}
// nel Blade index.blade.html
{!! Table::open('fa fa-list', 'Lista', [], $cols, ['sort' => $sort, 'sort_dir' => $sort_dir]) !!}
{!! Table::rows($object, ['col1', 'col4_date', 'buttons']) !!}
{!! Table::close() !!}