PHP code example of okipa / laravel-bootstrap-table-list
1. Go to this page and download the library: Download okipa/laravel-bootstrap-table-list library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
okipa / laravel-bootstrap-table-list example snippets
// laravel bootstrap table list
// https://github.com/Okipa/laravel-bootstrap-table-list
$this->app->register(Okipa\LaravelBootstrapTableList\TableListServiceProvider::class);
// we instantiate a table list in the news controller
$table = app(TableList::class)
->setModel(News::class)
->setRoutes([
'index' => ['alias' => 'news.index', 'parameters' => []],
]);
// we add some columns to the table list
$table->addColumn('title')
->isSortable()
->isSearchable()
->useForDestroyConfirmation();
{{ $table }}
// create your tablelist instance
$table = app(TableList::class)
// set the model namespace
->setModel(News::class)
// set a custom request to the table list rather than the request() one.
->setRequest($request)
// set the route that will be targetted when the create / edit / delete button will be hit.
->setRoutes([
'index' => ['alias' => 'news.index', 'parameters' => []],
'create' => ['alias' => 'news.create', 'parameters' => []],
'edit' => ['alias' => 'news.edit', 'parameters' => []],
'destroy' => ['alias' => 'news.destroy', 'parameters' => []],
])
// set the default number of rows to show in your table list.
->setRowsNumber(50)
// show the rows number selector that will enable you to choose the number of rows to show.
->enableRowsNumberSelector()
// add some query instructions for the special use cases
->addQueryInstructions(function ($query) use ($category_id) {
// some examples of what you can do
$query->select('news.*');
// add a constraint
$query->where('category_id', $category_id);
// get value stored in a json field
$query->addSelect('news.json_field->>json_attribute as json_attribute');
// get a formatted value form a pivot table
$query->selectRaw('count(comments.id) as comments_count');
$query->leftJoin('news_commment', 'news_commment.news_id', '=', 'news.id');
$query->leftJoin('comments', 'comments.id', '=', 'news_commment.comment_id');
$query->groupBy('comments.id');
// alias a value to make it available from the column model
$query->addSelect('users.name as author');
$query->join('users', 'users.id', '=', 'news.author_id');
})
// display some lines as disabled
->disableLines(function($model){
return $model->id === 1 || $model->id === 2;
}, ['disabled', 'bg-secondary'])
// display some line as highlighted
->highlightLines(function($model){
return $model->id === 3;
}, ['highlighted', 'bg-success']);
// you can now join some columns to your tablelist.
// display the news image from a custom HTML element.
$table->addColumn('image')
->isCustomHtmlElement(function ($entity, $column) {
return $entity->{$column->attribute})
? '<img src="' . $entity->{$column->attribute}) . '" alt="' . $entity->title . '">'
: null;
});
// display the news title that is contained in the news table and use this field in the destroy confirmation modal.
// this field will also be searchable in the search field.
$table->addColumn('title')
->isSortable()
->isSearchable()
->useForDestroyConfirmation();
// display an abreviated content from a text with the number of caracters you want.
$table->addColumn('content')
->setStringLimit(30);
// display a value from a sql alias
// in this case, you will target the `users` table and the `author` field, and make this sortable and searchable.
// this way, you tell the tablelist to manipulate the `name` attribute in the sql queries but to display the aliased `author` model attribute.
$table->addColumn('author')
->setCustomTable('users', 'name')
->isSortable()
->isSearchable();
// display the category with a custom column title, as a button, prefixed with an icon and with a value contained in config.
$table->addColumn('category_id')
->setTitle('Category custom name')
->setIcon('your-icon')
->isButton(['btn', 'btn-sm', 'btn-outline-primary'])
->isCustomValue(function ($entity, $column) {
return config('news.category.' . $entity->{$column->attribute});
});
// display a button to preview the news
$table->addColumn()
->isLink(function($entity, $column){
return route('news.show', ['id' => $entity->id]);
})
->isButton(['btn', 'btn-sm', 'btn-primary']);
// display the formatted release date of the news and choose to sort the list by this field by default.
$table->addColumn('released_at')
->isSortable()
->sortByDefault('desc')
->setColumnDateTimeFormat('d/m/Y H:i:s');
'index' => [
'alias' => 'news.index',
'parameters' => [
// set your extra parameters here or let the array empty
]
]