#今回すること
- 公式ドキュメント見ながらgridの機能を色々実装してみる
#Grid
##画面表示部
公式ドキュメントを見ながら色々追加してみました。
各列の実装内容の簡単な概要を書いています。
最初に画像とソースを載せています。
devproject\app\Admin\Controllers\TodoController.php
use Encore\Admin\Widgets\Table;
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
$grid = new Grid(new Todo);
$grid->id('ID')->modal('情報', function () {
$data = [
[
$this->id,
$this->user->name,
$this->title,
$this->detail,
]
];
return new Table(['ID', 'ユーザー名', 'タイトル', '詳細'], $data);
})->sortable();
$grid->user()->name('ユーザー名')->style('min-width:100px;');
$grid->title('タイトル')->setAttributes(['style' => 'background-color:#ffdbdb;'])->editable();
$grid->detail('詳細')->limit(20)->expand(function () {
return $this->detail;
});
$grid->created_at('Created at')->label('danger');
$grid->updated_at('Updated at')->badge();
return $grid;
}
###ID
$grid->id('ID')->modal('情報', function () {
$data = [
[
$this->id,
$this->user->name,
$this->title,
$this->detail,
]
];
return new Table(['ID', 'ユーザー名', 'タイトル', '詳細'], $data);
})->sortable();
- modal()
- IDの項目を押下と対象のデータをポップアップでの表示をします
- リレーション先のデータを表示する際に役立つと思います。
- 今回では自データを表示しているだけです。
- sortable()
- 列名を押下するとソートされます。
###ユーザー名
$grid->user()->name('ユーザー名')->style('min-width:100px;');
- user()
- modelのリレーションを使用しリレーション先からname(ユーザー名)を取得しています。
- style()
- 列のスタイルを指定しています。
- 今回では最低幅を100pxに指定。
###タイトル
$grid->title('タイトル')->setAttributes(['style' => 'background-color:#ffdbdb;'])->editable();
- setAttributes()
- 列にHTML属性を追加できます。
- 今回ではstyleを追加していますが、styleだけならばユーザー名で使用したstyle()で事足ります。
- editable()
- 列のデータを編集画面を開かず直接編集できる機能です。
- bootstrap-editable.min.jsを使用しています。
###詳細
$grid->detail('詳細')->limit(20)->expand(function () {
return $this->detail;
});
- limit
- 表示文字数を20文字に指定しています。
- expand
- 詳細のデータを行間に展開します。
- modalを使用したくない場合に有効。
- データを見比べることを想定する場合などで使うと思います。
- function内で別のデータを取得することもできます。
###Created at
$grid->created_at('Created at')->label('danger');
- label
- ラベル表示。
- success,danger,warning,info,primary,defaultのデザインが用意されています。
###Updated at
$grid->updated_at('Updated at')->badge();
- badge
- バッジ表示。
- success,danger,warning,info,primary,defaultのデザインが用意されています。
- labelより丸みがあるデザイン。
###etc
- 他にもセレクトボックス、ラジオボタン、チェックボックス、スイッチなどの機能があったが、Todosテーブルの定義上足りませんでした。
##フィルタ部
gridに以下を追加することでフィルタ機能の詳細設定が出来る
devproject\app\Admin\Controllers\TodoController.php
$grid->filter(function ($filter) {
$filter->column(1/2, function ($filter) {
$filter->disableIdFilter();
$filter->startsWith('title','タイトル'); // 前方一致
$filter->between('created_at', '登録日時')->datetime();
});
$filter->column(1/2, function ($filter) {
$filter->contains('detail','詳細'); // Like検索
});
});
###検索画面の分割
$filter->column(1/2, function ($filter) {}
で検索部を2分割することが出来る。
gridは12の数値を基本としてるのでそれぞれの合計が12となる整数を指定しても可能。
$filter->column(1, function ($filter) {...}
$filter->column(5, function ($filter) {...}
$filter->column(6, function ($filter) {...}
###disableIdFilter
- デフォルトではID検索項目があるが、不要なので消す。
###startsWith
- 前方一致検索
###contains
- 1.6.12から実装された新機能なので使ってみた。
- Equal to like queryとのこと。
- 動作検証がまだだがlikeと同じ気がする。
###between
- 開始入力欄と終了入力欄を追加してくれます。
#感想
コーディングというより、ドキュメントとソースの確認を永遠とやってました。
これは慣れればすごい便利だなぁと思います。
MVCのview部分がなくlaravelのbladeいつ使うの?と戸惑いつつやってます。
ドキュメントの中でチラッとview部分に触れている場所もあったのでいずれ出てくるでしょう・・・
#次回
次は一定のroleの場合は全ユーザーを表示する(scope解除)などの機能を入れていきたいと思います。