一。 將5.5以上的laravel框架方在編輯器
二。修改配置檔案正確連線資料庫
三。 cmd 命令進入框架
四。執行如下命令
五。 cmd執行
php artisan serve
六。 自己建立增刪改
1.建立資料表(在admin資料庫建立資料表如title)
2.建立模型層
php artisan make:model /Admin/Models/Title
在模型層繫結資料表
protected $table=’title’;
public $timestamps=false;
3. 建立控制器
php artisan admin:make TitleCotrollers –model=App\Admin\Models\Title
如下:
4.執行: php artisan serve
5.谷歌url訪問:
大功尚未告成:
同學繼續努力!
更新頭像命令:php artisan config:cache
頁面新增建立的表
控制器各方法的作用:
$title屬性用來設定這個CURD模組的標題,可以將它修改為任何其它的字串。
grid方法對應資料的列表頁,參考model-grid 文件來實現列表頁的相關功能邏輯。
detail方法對應資料的詳情頁,在列表頁操作列的詳情顯示按鈕點選進入,參考model-show 文件來實現詳情頁的相關功能邏輯。
form方法對應資料的建立和編輯頁,參考model-form 文件來實現資料建立和編輯頁的相關功能邏輯。
grid方法對應資料的列表頁,參考model-grid 文件來實現列表頁的相關功能邏輯。
示例:
// 第一列顯示id欄位,並將這一列設定為可排序列
$grid->column(‘id’, ‘ID’)->sortable();
1)->sortable()顯示排序
2)$grid->column(‘’,__’列顯示名’)->display(function() { return ‘定義方法查詢你需要的內容,顯示內容’; });
3) // 第六列顯示released欄位,通過display($callback)方法來格式化顯示輸出 $grid->column(‘released’, ‘上映’)->display(function ($released) { return $released ? ‘是’ : ‘否’; //三元運算判斷是否上映 });
4)->using([‘0’=>’不顯示’,’1’=>’展示’,’2’=>’到時顯示’])
5)開關按鈕展示
// $states = [
// ‘on’ => [‘value’ => 1, ‘text’ => ‘開啟’, ‘color’ => ‘primary’],
// ‘off’ => [‘value’ => 2, ‘text’ => ‘關閉’, ‘color’ => ‘default’],
// ];
// $grid->column(‘hh’)->switch($states);
改格式 擷取30位 超出用。。。顯示
列物件的setAttributes()方法用來給當前這一列的每一行新增HTML屬性, 比較有用的一個場景是給當前列增加樣式
$grid->column(‘title’)->setAttributes([‘style’ => ‘color:red;’]);
基於setAttributes()方法封裝了style()方法,直接新增樣式,比如限制列的寬度:
$grid->column(‘desc’)->style(‘max-width:200px;word-break:break-all;’);
$grid->column(‘tags’)->pluck(‘name’);資料表若存的是json串的用->pluck(‘name’)可取其對應的值
自定義行&批量操作
php artisan admin:action Post\Replicate –grid-row –name=”複製”
Post對應控制器名建立的檔案 Replicate自己定義的名 name為行操作的名字
控制器寫
$grid->tools(function (Grid\Tools $tools) {
$tools->append(new Value());// Value為你建立的操作自己定義的名字
});
建立檔案寫:
class Value extends Action
{
protected $selector = ‘.value’;
//彈出框表單處理邏輯(入庫等)
public function handle(Request $request)
{
$goods = new IbrandGoods();
$a = $goods->goodsGetFrst($request->get(‘goods_no’));
$arr[“pic_url”] = $a[‘goods_img’];
$arr[“goods_name”] = $a[‘goods_name’];
$arr[“good_info”] = $a;
$arr[“type”] = $request[‘type’];
$arr[“goods_no”] = $request[‘goods_no’];
$arr[“page_url”] = $request[‘page_url’];
$arr[“status”] = $request[‘status’];
$arr[“publish_time”] = $request[‘publish_time’];
if($request[‘type’]==1&&$request[‘page_url’]==null){
return $this->response()->success(‘您選擇了輪播圖廣告,所以廣告連結地址必需填寫’)->refresh();
}
if($request[“status”]==2&&$request[“publish_time”]==null ){
return $this->response()->success(‘您選擇了到時顯示,所以必需填寫推送時間’)->refresh();
}
$recommend = new Recommend();
/* $recommend->good_info=$arr[‘good_info ‘];
$recommend->pic_url=$arr[‘goods_img ‘];
$recommend->type=$arr[‘type ‘];
$recommend->status=$arr[‘status ‘];
$recommend->good_no=$arr[‘good_no ‘];
$recommend->page_url=$arr[‘page_url ‘];
$recommend->publish_time=$arr[‘publish_time ‘];
$recommend->save();*/
$aaa = $recommend->add($arr);
return $this->response()->success($aaa)->refresh();
}
//彈出表單頁面
public function form()
{
//$this->image(‘pic_url’, ‘Placeholder…’);
$directors = [
‘0’ => ‘輪播圖商品’,
‘1’ => ‘輪播圖廣告’,
‘2’ => ‘左邊欄商品’,
‘3’ => ‘右邊欄商品’,
‘4’ => ‘熱賣商品’
];
$this->select(‘type’, ‘展示地方’)->options($directors);
$dir = [
‘0’ => ‘不顯示’,
‘1’ => ‘展示’,
‘2’ => ‘到時顯示’
];
$this->select(‘status’, __(‘是否展示’))->default(‘0’)->options($dir);
$this->text(‘goods_no’, __(‘商品編碼’));
$this->text(‘page_url’, __(‘廣告連結地址’))->placeholder(‘如選擇輪播圖廣告請輸入廣告連結地址’);
$this->datetime(‘publish_time’, __(‘推送時間’));
}
public function html()
{
return <<<HTML
HTML;
}
}
倒序關聯模型層 展示 修改 新增
//關聯模型層
public function newsuser()
{
return $this->belongsTo(NewsUser::class, ‘user_id’,’id’);
}
$grid->column(‘newsuser.uname’, __(‘User id’));
$form->select(‘user_id’)->options(NewsUser::all()->pluck(‘uname’, ‘id’));
正序模型關聯 一對一
//主模型層
public function useraddress()
{
return $this->hasOne(IbrandUserAddress::class,’user_id’,’id’);
}
$grid->column(‘useraddress.is_default’, __(‘狀態’));
//關聯方法名點要顯示的欄位名
如果表格的欄位比較多,擠壓了列的顯示,可以用過fixColumns方法來設定固定列 (有滑動條檢視其他列)
$grid->fixColumns(3, -2);
第一個參數列示固定從頭開始的前三列,第二個參數列示固定從後往前數的兩列,(第二個引數可不傳,預設為-1)
開關 註釋:要想修改關聯查詢顯示的資料,必需再修改頁面新增對應的form表單修改哪一行的資料
on和off對用開關的兩個值1和0:
修改頁
$states = [ ‘on’ => [‘value’ => 1, ‘text’ => ‘開啟’, ‘color’ => ‘success’], ‘off’ => [‘value’ => 0, ‘text’ => ‘關閉’, ‘color’ => ‘danger’], ]; $form->switch(欄位名)->states($states);//一般要用int型別
展示頁
// 設定text、color、和儲存值 $states = [ ‘on’ => [‘value’ => 1, ‘text’ => ‘開啟’, ‘color’ => ‘primary’], ‘off’ => [‘value’ => 2, ‘text’ => ‘關閉’, ‘color’ => ‘default’], ]; $grid->column(‘status’)->switch($states);
行內編輯器 ->editable();可以直接修改欄位資料
可以讓你在表格中點選資料,在彈出的對話方塊裡面編輯儲存資料,使用方法如下
$grid->column(‘title’)->editable(‘select’, [1 => ‘option1’, 2 => ‘option2’, 3 => ‘option3’]);
效果圖
列的展開(一般用於一對多表主表展示)
更牛操作網址部落格:擴充套件 Laravel-admin,實現一行程式碼展現內聯表格的功能,自動加頁碼,... 可以分頁
主表模型層
public function catrend()
{ //副表 副表欄位 主表欄位
return $this->hasMany(Recommend::class,’type’,’cate_id’);
}
主表控制器
$grid->column(‘cate_id’, __(‘推薦欄位id’))
->using([‘0’ => ‘輪播圖商品’, ‘1’ => ‘輪播圖廣告’, ‘2’ => ‘左邊欄商品’, ‘3’ => ‘右邊欄商品’, ‘4’ => ‘熱賣商品’])
->expand(function ($model) {
//關聯方法名 獲取全部
$comments = $model->catrend()->take(10)->get()->map(function ($comment) {
// return $comment->only([‘goods_name’, ‘goods_no’, ‘status’,’created_at’]);
//副表欄位名
$data= $comment->only([‘pic_url’,’goods_name’, ‘goods_no’, ‘status’,’created_at’]);
$sta= $data[‘status’]; //如果想展示你要的效果,把欄位值單提出來,重新新賦值處理你想要的效果
$imgurl=$data[‘pic_url’];
$img=”<img src=’www.humz.com/upload/$imgurl' style="max-width:100px;max-height:100px">”;
$data[‘pic_url’]=$img;
//[‘0’ => ‘不顯示’, ‘1’ => ‘展示’, ‘2’ => ‘到時顯示’]
if($sta==0){
$data[‘status’]=’不顯示’;
}elseif($sta==1){
$data[‘status’]=’顯示’;
}else{
$data[‘status’]=’到時顯示’;
}
return $data;
});
return new Table([‘商品圖片’,’商品名’, ‘商品編號’,’是否顯示 ‘,’釋出時間’], $comments->toArray());
});
效果圖
當一列的欄位太多時也可以用向列展開一樣的效果展示
$grid->column(‘goods_name’, ‘商品名稱’)->expand(function ($model) {
//獲取其他欄位
$comments[] = $model->only([‘market_price’,’sell_price’,’cost_price’,’goods_detail’,’created_at’,’updated_at’]);
return new Table([‘市場價’,’銷售價’,’成本價’,’商品詳情’,’釋出時間’,’修改時間’], $comments);
})->width(260);
效果圖
列的彈出框顯示
主表模型層
public function goods()
{
return $this->hasOne(IbrandGoods::class,’goods_no’,’goods_no’);
}
主表控制器
$grid->column(‘goods.goods_name’, ‘商品基本資訊’)->modal(‘最新評論’, function ($model) {
//主表模型層關聯表方法
$comments = $model->goods()->take(10)->get()->map(function ($comment) {
return $comment->only([‘goods_name’, ‘goods_no’, ‘sale_count’,’sell_price’,’googs_detail’]);
});
return new Table([‘商品名稱’, ‘商品編號’, ‘商品銷量’,’商品售價’,’商品描述’], $comments->toArray());
});
效果圖
圖片輪播(必需在模型層將圖片欄位轉成json存入資料庫)
protected $casts = [
‘good_pic’ => ‘json’,
];
如果欄位值為圖片陣列,可以用下面的呼叫顯示為圖片輪播元件
$grid->column(‘good_pic’, __(‘Good pic’))->carousel($width = 300, $height = 200);
表單控制器
$form->multipleImage(‘good_pic’, __(‘多圖上傳’))->removable()->sortable();
規格選擇器
$grid->selector(function (Grid\Tools\Selector $selector) {
$selector->select(‘欄位名’, ‘品牌’, [
1 => ‘華為’,
2 => ‘小米’,
3 => ‘OPPO’,
4 => ‘vivo’,
]);
});
效果圖
圖片放大效果安裝
命令列安裝擴充套件
composer require laravel-admin-ext/grid-lightbox
php artisan vendor:publish –tag=laravel-admin-grid-lightbox
配置
開啟config/admin.php,將屬於此擴充套件的配置新增到extensions部分。
‘extensions’ => [
‘grid-lightbox’ => [
// Set to false
if you want to disable this extension
‘enable’ => true,
]
]
用法
$grid->pic(‘海報圖’)->lightbox([‘width’ => 50, ‘height’ => 50]);
admin後臺腳手架
參考部落格:部落格:Larave-admin 搭建管理後臺 - 腳手架工具
composer require laravel-admin-ext/helpers
php artisan admin:import helpers
模型樹操作 (用於手機分類)
參考部落格:部落格:Laravel-admin 搭建管理後臺 - 資料模型樹(1)
部落格:Laravel-admin 搭建管理後臺 - 資料模型樹(2)
效果圖
簡便操作
文件地址:laravel-admin.org/docs/zh/model-tr...
1.前提條件:表格結構裡面有三個必要的欄位parent_id (父級id)、order(排序)、title(名稱),其它欄位沒有要求。
2.正常建立模型層 控制器 路由的定義
3.模型層綁表 做欄位修改 引用 use ModelTree;
<?php
namespace App\Admin\Models;
use Encore\Admin\Traits\AdminBuilder;
use Encore\Admin\Traits\ModelTree;
use Illuminate\Database\Eloquent\Model;
class IbrandGoodsCategory extends Model
{
use ModelTree, AdminBuilder;
protected $table = ‘ibrand_goods_category’;
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
//這裡根據自己的欄位修改
$this->setParentColumn(‘parent_id’);
$this->setTitleColumn(‘order’);
$this->setTitleColumn(‘category_name’);
}
}
4.控制器操作 請參照地址:www.erlo.vip/share/2/58762.html
use App\Admin\Models\IbrandGoodsCategory;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Facades\Admin;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Layout\Column;
use Encore\Admin\Layout\Content;
use Encore\Admin\Layout\Row;
use Encore\Admin\Show;
use Encore\Admin\Widgets\Box;
public function index(Content $content)
{
return Admin::content(function ($content) {
$content->header('商品分類管理');
$content->row(function (Row $row) {
$row->column(6, $this->viewterr());
$row->column(6, function (Column $column) {
$form = new \Encore\Admin\Widgets\Form();
$form->action(admin_url('ibrand_goods_categories'));//設定表單提交地址
$form->select('parent_id', __('父級分類'))
->options(IbrandGoodsCategory::selectOptions(function ($category) {
return $category->where('parent_id', '0');
}));
$form->text('category_name', __('分類名稱'));
//小圖示入庫 icon
$form->icon('category_icon', __('分類圖示'));
//設定獲取時間戳 字串擷取 留取排序的數字
$form->number('order', __('排序'))->default(substr(time(), 4));
$form->hidden('_token')->default(csrf_token()); //post提交是設定安全提交
$column->append(new Box(__('規格管理'), $form));
});
});
});
}
public function viewterr()
{ // 模型層
return IbrandGoodsCategory::tree(function ($tree) {
$tree->branch(function ($branch) {
//小圖示顯示
$img="<i class='fa {$branch['category_icon']}'></i>";
//前臺顯示的每行欄位
return "$img {$branch['id']} - {$branch['category_name']} ";
});
});
}
修改form
select中使用分類樹
$form->select(‘parent_id’, __(‘Parent id’))->options(Category::selectOptions())->default(1);
效果圖
富文字編輯 (採集頁面圖片上傳等更方便)
composer require jxlwqq/quill
php artisan vendor:publish –tag=laravel-admin-quill
2.配置config/admin.php
‘extensions’ => [
‘quill’ => [
// If the value is set to false, this extension will be disabled
‘enable’ => true,
‘config’ => [
‘modules’ => [
‘syntax’ => true,
‘toolbar’ =>
[
[‘size’ => []],
[‘header’ => []],
‘bold’,
‘italic’,
‘underline’,
‘strike’,
[‘script’ => ‘super’],
[‘script’ => ‘sub’],
[‘color’ => []],
[‘background’ => []],
‘blockquote’,
‘code-block’,
[‘list’ => ‘ordered’],
[‘list’ => ‘bullet’],
[‘indent’ => ‘-1’],
[‘indent’ => ‘+1’],
‘direction’,
[‘align’ => []],
‘link’,
‘image’,
‘video’,
‘formula’,
‘clean’
],
],
‘theme’ => ‘snow’,
‘height’ => ‘200px’,
]
]
]
3.重新整理框架
php artisan config:cache
4.對應的控制器新增修改
$form->quill(‘content’);
5.顯示用 ->view(‘渲染頁面’)
$grid->column(‘content’, __(‘Content’))->view(‘aaa’);
6. 渲染頁面 aaa.blade.php
{!! $value !!} 次方法可以將資料庫的html資料解析到頁面渲染
效果圖
後臺頁面佈局(一頁分塊展示)
public function index(Content $content)
{
// 選填
$content->header(‘填寫頁面頭標題’);
// 選填
$content->description(‘填寫頁面描述小標題’);
$content->row(function(Row $row) {
$row->column(6, $this->tree());//¥this-》tree()為顯示頁面的方法
$row->column(6, $this->form());
});
return $content;
}
$this->tree();樹狀結構顯示的方法;
protected function tree()
{
return Category::tree(function (Tree $tree) {
$tree->branch(function ($data) {
return “{$data[‘id’]} - {$data[‘title’]}”;
});
});
}
$this->form(); 新增表單顯示的方法;
protected function form()
{
$form = new Form(new Category);
$form->display(‘id’, ‘ID’);
$form->select(‘parent_id’, ‘所屬類別’)->options(Category::selectOptions());
$form->text(‘title’, ‘類別名稱’)->rules(‘required’);
$form->display(‘created_at’, ‘Created At’);
$form->display(‘updated_at’, ‘Updated At’);
return $form;
}
效果圖:
模型詳情 (後臺詳情頁展示多模型的資料頁)
效果圖:
sers表和上面的posts表為一對一關聯關係,通過posts.author_id欄位關聯,users表結構如下:
users id - integer name - string email - string posts id - integer author_id - integer content - text
模型定義為:
class User extends Model
{
}
class Post extends Model
{
public function author()
{
return $this->belongsTo(User::class, ‘author_id’);
}
}
那麼可以用下面的方式顯示post所屬的使用者的詳細:
$show->author(‘作者資訊’, function ($author) {
$author->setResource(‘/admin/users’);
$author->id();
$author->name();
$author->email();
});
其中$author物件也是Show例項,同樣可以使用上面的各種方法
注意:為了能夠正常使用這個皮膚右上角的工具,必須用setResource()方法設定使用者資源的url訪問路徑
一對多或多對多關係
一對多或多對多關係的關聯資料會以Model-grid的方式呈現,下面是簡單的例子
posts表和評論表comments為一對多關係(一條post有多條comments),通過comments.post_id欄位關聯
comments id - integer post_id - integer content - string
模型定義為:
class Post extends Model
{
public function comments()
{
return $this->hasMany(Comment::class);
}
}
class Comment extends Model
{
}
那麼評論的顯示通過下面的程式碼實現:
$show->關聯方法名(‘評論’, function ($comments) {
$comments->resource(‘/admin/comments’);
$comments->id();
$comments->content()->limit(10);
$comments->filter(function ($filter) {
$filter->like(‘content’);
});
});
$comments是一個Encore\Admin\Grid例項,詳細的使用方法可以參考model-grid
注意:為了能夠正常使用這個資料表格的功能,必須用resource()方法設定comments資源的url訪問路徑
皮膚工具設定
皮膚右上角預設有三個按鈕編輯、刪除、列表,可以分別用下面的方式關掉它們:
$show->panel()
->tools(function ($tools) {
$tools->disableEdit();
$tools->disableList();
$tools->disableDelete();
});
地址省市區入庫及顯示
在laravel_admin文件 擴充套件 找中國省市區級聯選擇
github.com/laravel-admin-extension...
composer require laravel-admin-ext/china-distpicker
php artisan vendor:publish –tag=laravel-admin-china-distpicker
配置檔案config
‘extensions’ => [
‘china-distpicker’ => [
// 如果要關掉這個擴充套件,設定為false
‘enable’ => true,
]
]
在資料庫匯入sql檔案 china_area.sql
檔案下載地址 部落格:中國城市區域資料下載
admin使用 blog.csdn.net/xiaxia_Lin/article/d...
引用 use Illuminate\Support\Facades\DB;
$form->distpicker([
‘province’ => ‘省’,
‘city’ => ‘市’,
‘district’ => ‘區’
]);
//省名
$grid->column(‘province’, __(‘Province’))
->display(function($code) {
$name = DB::table(‘china_area’)->where(‘code’, $code)->value(‘name’);
return $name;
});
//市名
$grid->column(‘city’, __(‘City’))
->display(function($code) {
$name = DB::table(‘china_area’)->where(‘code’, $code)->value(‘name’);
return $name;
});
//區名
$grid->column(‘district’, __(‘District’))
->display(function($code) {
$name = DB::table(‘china_area’)->where(‘code’, $code)->value(‘name’);
return $name;
});
$show->field(‘province’, __(‘Province’))
->unescape()->as(function ($code) {
$name = DB::table(‘china_area’)->where(‘code’, $code)->value(‘name’);
return $name;
});
$show->field(‘city’, __(‘City’))
->unescape()->as(function ($code) {
$name = DB::table(‘china_area’)->where(‘code’, $code)->value(‘name’);
return $name;
});
$show->field(‘district’, __(‘District’))
->unescape()->as(function ($code) {
$name = DB::table(‘china_area’)->where(‘code’, $code)->value(‘name’);
return $name;
});
下拉列展示
$data是返回的欄位值
$grid->column(‘’, __(‘地址’))->expand(function ($model) {
$comments = $model->useraddres()->take(10)->get()->map(function ($comment) {
$data=$comment->only([‘id’, ‘name’, ‘mobile’, ‘province’, ‘city’, ‘area’, ‘address’
]);
$name = DB::table(‘china_area’)->where(‘code’, $data[‘area’])->value(‘name’);
$data[‘area’]=$name;
return $data;
});
return new Table([‘ID’, ‘收件人’, ‘聯絡電話’, ‘省’, ‘市’, ‘區’, ‘詳細地址’], $comments->toArray());
});
有顏色的效果展示 效果圖
$grid->column(‘status’, __(‘是否展示’))->using([‘0’ => ‘不顯示’, ‘1’ => ‘展示’, ‘2’ => ‘到時展示’])->filter([
0 => ‘不顯示’,
1 => ‘展示’,
2 => ‘到時展示’,
])->label([
1 => ‘warning’,
2 => ‘default’,
3 => ‘success’,
4 => ‘info’,
]);
本作品採用《CC 協議》,轉載必須註明作者和本文連結