文章分类
- 后台文章分类列表页模板导的详细步骤
- 建立数据表
blog_category
,并添加相应的文章字段 - 使用
php artisan make:model Category
命令,创建Category.php
模型文件,并编写对应的属性代码 - 在
Admin
文件下使用php artisan make:controller CategoryController
命令创建基于CommonController
的CategoryController
控制器 - 在路由文件
routes.php
中配置文章分类的资源路由,代码如下
// 文章分类路由 Route::resource('category', 'CategoryController');
- 使用
php artisan route:list
命令找到对文章分类进行CRUD
的方法,写到CategoryController
控制器中,具体方法代码如下
//get.admin/category 全部分类列表 public function index() { $categorys = Category::all(); return view('admin.category.index')->with('data',$categorys); } //post.admin/category public function store() { } //get.admin/category/create 添加分类 public function create() { } //get.admin/category/{category} 显示单个分类信息 public function show() { } //delete.admin/category/{category} 删除单个分类 public function destroy() { } //put.admin/category/{category} 更新分类 public function update() { } //get.admin/category/{category}/edit 编辑分类 public function edit() { }
- 将视图模板中的
list.html
拷贝到admin
下新建的文件category
下,并重新命名为index.blade.php
,并利用admin.blade.php
重新调整代码结构
- 建立数据表
- 基本信息展示的详细步骤
- 在
index.blade.php
中修改导航栏的链接为<a href="{{url('admin/info')}}">首页</a> » 全部分类
- 根据控制器中传过来的数据调整<table></table>标签的内容和格式,具体代码如下:
<table class="list_tab"> <tr> <th class="tc" width="5%">排序</th> <th class="tc" width="5%">ID</th> <th>分类名称</th> <th>标题</th> <th>查看次数</th> <th>操作</th> </tr> @foreach($data as $v) <tr> <td class="tc"> <input type="text" name="ord[]" value="{{$v->cate_order}}"> </td> <td class="tc">{{$v->cate_id}}</td> <td> <a href="#">{{$v->cate_name}}</a> </td> <td>{{$v->cate_title}}</td> <td>{{$v->cate_view}}</td> <td> <a href="#">修改</a> <a href="#">删除</a> </td> </tr> @endforeach </table>
- 在
- 后台文章分类页多级分类列表的详细步骤
- 给数据表
blog_category
,添加相应的二级分类字段 - 在
Category.php
模型文件中添加如下方法
/* * 获取分类列表数据 */ public function tree() { $categorys = $this->all(); return $this->getTree($categorys,'cate_name','cate_id','cate_pid'); } /* * 获取多级分类列表的数据 */ public function getTree($data,$field_name,$field_id='id',$field_pid='pid',$pid=0) { $arr = array(); foreach ($data as $k=>$v) { if ($v->$field_pid == $pid) { $data[$k]["_".$field_name] = $data[$k][$field_name]; $arr[] = $data[$k]; foreach ($data as $m=>$n) { if ($n->$field_pid == $v->$field_id) { $data[$m]["_".$field_name] = '├─ '.$data[$m][$field_name]; $arr[] = $data[$m]; } } } } return $arr; }
- 在
CategoryController.php
文件中修改全部分类的方法index
,具体代码如下
//get.admin/category 全部分类列表 public function index() { $categorys = (new Category)->tree(); return view('admin.category.index')->with('data',$categorys); }
- 将视图模板下的
admin
下的category
下的index.blade.php
中的展示分类名称的行改为
<td> <a href="#">{{$v->_cate_name}}</a> </td>
- 给数据表
- 后台文章分类页Ajax异步修改分类排序的详细步骤
- 在路由文件
routes.php
中配置修改文章分类排序的路由,代码如下
// 修改文章分类排序路由 Route::post('cate/changeorder', 'CategoryController@changeOrder');
- 在
CategoryController.php
文件中编写修改文章分类排序的方法changeOrder
,具体代码如下
// 修改文章分类排序 public function changeOrder() { $input = Input::all(); $cate = Category::find($input['cate_id']); $cate->cate_order = $input['cate_order']; $res = $cate->update(); if ($res) { $data = [ 'status' => 0, 'msg' => '分类排序更新成功!', ]; } else { $data = [ 'status' => 1, 'msg' => '分类排序更新失败,请稍后重试!', ]; } return $data; }
- 将
layer
文件拷贝到resources
下的org
下 - 将
layer
文件下的layer.js
引入到视图模板views
下的layouts
下的公共php文件admin.blade.php
中,具体代码如下
<script type="text/javascript" src="{{asset('resources/org/layer/layer.js')}}"></script>
- 将视图模板下的
admin
下的category
下的index.blade.php
中的展示分类排序的行改为
<td class="tc"> <input type="text" onchange="changeOrder(this,{{$v->cate_id}})" value="{{$v->cate_order}}"> </td>
- 在视图模板下的
admin
下的category
下的index.blade.php
中添加如下js代码
<script> function changeOrder(obj,cate_id) { var cate_order = $(obj).val(); $.post("{{url('admin/cate/changeorder')}}",{'_token':'{{csrf_token()}}','cate_id':cate_id,'cate_order':cate_order},function(data) { if(data.status == 0) { layer.msg(data.msg, {icon: 6}); } else { layer.msg(data.msg, {icon: 5}); } }); }
- 在路由文件
</script>
* 在`Category.php`模型文件中修改获取分类列表数据的方法(按照排序的升序进行获取数据),具体代码如下
objc
/*
* 获取分类列表数据
*/
public function tree()
{
$categorys = $this->orderBy('cate_order','asc')->get();
return $this->getTree($categorys,'cate_name','cate_id','cate_pid');
}
```
- 后台文章分类添加模板分配的详细步骤
- 将视图模板中的
add.html
拷贝到category
下并修改名称为add.blade.php
,并利用admin.blade.php
重新调整代码结构 - 根据数据库中
blog_category
表的字段设计页面<table></table>的内容 - 修改导航栏的链接
- 在
CategoryController.php
的create
方法中返回add.blade.php
视图
- 将视图模板中的
- 后台文章父级分类嵌入的详细步骤
- 修改
CategoryController.php
的create
方法,具体代码如下
//get.admin/category/create 添加分类 public function create() { $data = Category::where('cate_pid',0)->get(); return view('admin.category.add',compact('data')); }
- 编写
CategoryController.php
的store
方法,具体代码如下
//post.admin/category 添加分类提交 public function store() { $input = Input::all(); dd($input); }
- 在
add.blade.php
文件中修改父级分类选项的代码,具体如下
<select name="cate_pid"> <option value="0">==顶级分类==</option> @foreach($data as $d) <option value="{{$d->cate_id}}">{{$d->cate_name}}</option> @endforeach </select>
- 修改
- 后台文章分类添加数据Validation验证的详细步骤
- 在
CategoryController.php
文件中的添加分类提交的方法store
中,进行后台文章分类添加数据Validation验证,具体代码如下
//post.admin/category 添加分类提交 public function store() { $input = Input::except('_token'); $rules = [ 'cate_name' => 'required', ]; $message = [ 'cate_name.required' => '分类名称不能为空!', ]; // 表单输入验证 $validator = Validator::make($input,$rules,$message); if ($validator->passes()) { return redirect('admin/category'); } else { return back()->withErrors($validator); } }
- 在
add.blade.php
文件写上验证错误信息提示的代码,具体如下
- 在
- 后台文章分类编辑的详细步骤
- 在
CategoryController.php
文件中编写edit
方法,具体代码如下
//get.admin/category/{category}/edit 编辑分类 public function edit($cate_id) { $field = Category::find($cate_id); $data = Category::where('cate_pid',0)->get(); return view('admin.category.edit',compact('field','data')); }
- 拷贝
add.blade.php
到当前文件并修改名称为edit.blade.php
,并修改编辑选项的value
值 - 修改
edit.blade.php
文件中的顶级分类
代码如下
- 在
<select name="cate_pid">
<option value="0">==顶级分类==</option>
@foreach($data as $d)
<option value="{{$d->cate_id}}"
@if($d->cate_id==$field->cate_pid) selected @endif
>{{$d->cate_name}}</option>
@endforeach
</select>
* 修改`category`下的`index.blade.php`中的修改选项的链接为`<a href="{{url('admin/category/'.$v->cate_id.'/edit')}}">修改</a>`
- 后台文章分类模拟PUT方法提交表单的象征步骤
- 在
CategoryController.php
文件中编写update
方法,具体代码如下
//put.admin/category/{category} 更新分类 public function update($cate_id) { $input = Input::except('_token','_method'); $re = Category::where('cate_id',$cate_id)->update($input); if($re){ return redirect('admin/category'); }else{ return back()->with('errors','分类信息更新失败,请稍后重试!'); } }
- 在
edit.blade.php
文件中的<form></form>
标签中添加如下代码
<input type="hidden" name="_method" value="put"> {{csrf_field()}}
- 在
- 后台文章分类删除及Ajax异步模拟DELETE方法的详细步骤
- 在
CategoryController.php
的destory
方法中添加如下代码
//delete.admin/category/{category} 删除单个分类 public function destroy($cate_id) { $res = Category::where('cate_id',$cate_id)->delete(); // 删除顶级分类时,底下的分类变成顶级分类 Category::where('cate_pid',$cate_id)->update(['cate_pid'=>0]); if ($res) { $data = [ 'status' => 0, 'msg' => '分类删除成功!', ]; } else { $data = [ 'status' => 1, 'msg' => '分类删除失败,请稍后重试!', ]; } return $data; }
- 在
category
下的index.blade.php
文件中修改删除的链接为<a href="javascript:;" onclick="delCate({{$v->cate_id}})">删除</a>
,并添加删除分类的JS代码,具体代码如下
// 删除分类 function delCate(cate_id) { layer.confirm('您确定要删除这个分类吗?', { btn:['确定', '取消'] }, function(){ $.post("{{url('admin/category')}}/"+cate_id,{'_method':'delete','_token':"{{csrf_token()}}"}, function (data) { if(data.status == 0) { location.href = location.href; layer.msg(data.msg, {icon:6}); } else { layer.msg(data.msg, {icon:5}); } }) }); }
- 修改
category
下的各个文件的页面布局
- 在
文章
- 数据库文章表的创建及添加文章模板导入的详细步骤
- 新建数据表
blog_article
- 使用命令
php artisan make:controller ArticleController
创建文章控制器 - 在
route.php
文件中配置文章的资源路由,具体代码如下
// 文章资源路由 Route::resource('article', 'ArticleController');
- 在
ArticleController
控制器中添加全部文章列表index
方法,具体代码如下
//get.admin/article 全部文章列表 public function index() { echo '全部文章列表'; }
- 在
resources
下的views
下的admin
下新建文件article
,并拷贝category
下的add.blade.php
到该文件下,做文字显示的修改工作 - 在
ArticleController
控制器中添加文章create
方法,具体代码如下
//get.admin/article 全部文章列表 //get.admin/article/create 添加文章 public function create() { $data = []; return view('admin.article.add',compact('data')); }
- 新建数据表
- 后台文章添加及百度编辑器Ueditor嵌入的详细步骤
- 将下载好的编辑器的文件夹拷贝到
resources
下的org
下,并重新命名为ueditor
- 修改
resources
下的views
下的admin
下的article
下的add.blade.php
文件中的<table></table>
里面的代码,具体代码如下
<table class="add_tab"> <tbody> <tr> <th width="120">分类:</th> <td> <select name="cate_id"> @foreach($data as $d) <option value="{{$d->cate_id}}">{{$d->_cate_name}}</option> @endforeach </select> </td> </tr> <tr> <th><i class="require">*</i> 文章标题:</th> <td> <input type="text" class="lg" name="art_title"> </td> </tr> <tr> <th>编辑:</th> <td> <input type="text" class="sm" name="art_editor"> </td> </tr> <tr> <th>缩略图:</th> <td> <input type="text" size="50" name="art_thumb"> </td> </tr> <tr> <th>关键词:</th> <td> <input type="text" class="lg" name="art_tag"> </td> </tr> <tr> <th>描述:</th> <td> <textarea name="art_description"></textarea> </td> </tr> <tr> <th>文章内容:</th> <td> <script type="text/javascript" charset="utf-8" src="{{asset('resources/org/ueditor/ueditor.config.js')}}"></script> <script type="text/javascript" charset="utf-8" src="{{asset('resources/org/ueditor/ueditor.all.min.js')}}"> </script> <script type="text/javascript" charset="utf-8" src="{{asset('resources/org/ueditor/lang/zh-cn/zh-cn.js')}}"></script> <script id="editor" name="art_content" type="text/plain" style="width:860px;height:500px;"></script> <script type="text/javascript"> var ue = UE.getEditor('editor'); </script> <style> .edui-default{line-height: 28px;} div.edui-combox-body,div.edui-button-body,div.edui-splitbutton-body {overflow: hidden; height:20px;} div.edui-box{overflow: hidden; height:22px;} </style> </td> </tr> <tr> <th></th> <td> <input type="submit" value="提交"> <input type="button" class="back" onclick="history.go(-1)" value="返回"> </td> </tr> </tbody> </table>
- 在数据表
blog_article
中添加cate_id
文章分类字段 - 在
ArticleController
控制器中修改添加文章create
方法,具体代码如下
//get.admin/article/create 添加文章 public function create() { $data = (new Category)->tree(); return view('admin.article.add',compact('data')); }
- 将下载好的编辑器的文件夹拷贝到
- 后台文章添加缩略图上传之uploadify插件引入的详细步骤
- 将下载好的uploadify插件的文件夹拷贝到
resources
下的org
下 - 修改
resources
下的views
下的admin
下的article
下的add.blade.php
文件中的缩略图部分的代码,具体代码如下
<th>缩略图:</th> <td> <input type="text" size="50" name="art_thumb"> <input id="file_upload" name="file_upload" type="file" multiple="true"> <script src="{{asset('resources/org/uploadify/jquery.uploadify.min.js')}}" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="{{asset('resources/org/uploadify/uploadify.css')}}"> <script type="text/javascript"> <?php $timestamp = time();?> $(function() { $('#file_upload').uploadify({ 'buttonText' : '图片上传', 'formData' : { 'timestamp' : '<?php echo $timestamp;?>', '_token' : "{{csrf_token()}}" }, 'swf' : "{{asset('resources/org/uploadify/uploadify.swf')}}", 'uploader' : "{{url('admin/upload')}}" }); }); </script> <style> .uploadify{display:inline-block;} .uploadify-button{border:none; border-radius:5px; margin-top:8px;} table.add_tab tr td span.uploadify-button-text{color: #FFF; margin:0;} </style> </td>
- 将下载好的uploadify插件的文件夹拷贝到
- 后台文章添加缩略图上传之文件存储的详步骤
- 修改
commonController.php
中的upload
方法,具体代码如下
//图片上传 public function upload() { $file = Input::file('Filedata'); if ($file -> isValid()) { $entension = $file -> getClientOriginalExtension(); // 上传文件的后缀 $newName = date('YmdHis').mt_rand(100,999).'.'.$entension; // 上传文件的路径 $path = $file -> move(base_path().'/uploads',$newName); $filepath = 'uploads/'.$newName; return $filepath; } }
- 修改
resources
下的views
下的admin
下的article
下的add.blade.php
文件中的缩略图部分的代码,具体代码如下
<tr> <th>缩略图:</th> <td> <input type="text" size="50" name="art_thumb"> <input id="file_upload" name="file_upload" type="file" multiple="true"> <script src="{{asset('resources/org/uploadify/jquery.uploadify.min.js')}}" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="{{asset('resources/org/uploadify/uploadify.css')}}"> <script type="text/javascript"> <?php $timestamp = time();?> $(function() { $('#file_upload').uploadify({ 'buttonText' : '图片上传', 'formData' : { 'timestamp' : '<?php echo $timestamp;?>', '_token' : "{{csrf_token()}}" }, 'swf' : "{{asset('resources/org/uploadify/uploadify.swf')}}", 'uploader' : "{{url('admin/upload')}}", 'onUploadSuccess' : function(file, data, response) { $('input[name=art_thumb]').val(data); $('#art_thumb_img').attr('src','/'+data); } }); }); </script> <style> .uploadify{display:inline-block;} .uploadify-button{border:none; border-radius:5px; margin-top:8px;} table.add_tab tr td span.uploadify-button-text{color: #FFF; margin:0;} </style> </td> </tr>
- 修改
- 后台文章添加数据及Validation验证的详细步骤
- 使用命令
php artisan make:mode Article
创建文章模型 - 修改文章模型的命名空间并添加相应的属性
- 在
ArticleController.php
文章控制器中添加添加文章提交的方法store
,具体代码如下
//post.admin/article 添加文章提交 public function store() { $input = Input::except('_token'); $input['art_time'] = time(); $rules = [ 'art_title'=>'required', 'art_content'=>'required', ]; $message = [ 'art_title.required'=>'文章名称不能为空!', 'art_content.required'=>'文章内容不能为空!', ]; $validator = Validator::make($input,$rules,$message); if($validator->passes()){ $re = Article::create($input); if($re){ return redirect('admin/article'); }else{ return back()->with('errors','数据填充失败,请稍后重试!'); } }else{ return back()->withErrors($validator); } }
- 使用命令
- 后台文章页列表展示及分页功能实现的详细步骤
- 在
ArticleController.php
文章控制器中修改全部文章列表的方法index
,具体代码如下
//get.admin/article 全部文章列表 public function index() { $data = Article::orderBy('art_id','desc')->paginate(1); return view('admin.article.index',compact('data')); }
- 将视图模板中的
list.html
拷贝到article
下并重新命名为为index.blade.php
,并利用admin.blade.php
重新调整代码结构,其中form
表单中和样式布局的具体代码如下
<form action="#" method="post"> <div class="result_wrap"> <!--快捷导航 开始--> <div class="result_title"> <h3>文章列表</h3> </div> <div class="result_content"> <div class="short_wrap"> <a href="{{url('admin/article/create')}}"><i class="fa fa-plus"></i>添加文章</a> <a href="{{url('admin/article')}}"><i class="fa fa-recycle"></i>全部文章</a> </div> </div> <!--快捷导航 结束--> </div> <div class="result_wrap"> <div class="result_content"> <table class="list_tab"> <tr> <th class="tc">ID</th> <th>标题</th> <th>点击</th> <th>编辑</th> <th>发布时间</th> <th>操作</th> </tr> @foreach($data as $v) <tr> <td class="tc">{{$v->art_id}}</td> <td> <a href="#">{{$v->art_title}}</a> </td> <td>{{$v->art_view}}</td> <td>{{$v->art_editor}}</td> <td>{{date('Y-m-d',$v->art_time)}}</td> <td> <a href="{{url('admin/article/'.$v->art_id.'/edit')}}">修改</a> <a href="javascript:;" onclick="delArt({{$v->art_id}})">删除</a> </td> </tr> @endforeach </table> <div class="page_list"> {{$data->links()}} </div> </div> </div> </form> <style> .result_content ul li span { font-size: 15px; padding: 6px 12px; } </style>
- 在
- 后台文章编辑的详细步骤
- 在
ArticleController.php
文章控制器中添加编辑文章列表的方法edit
,具体代码如下
//get.admin/article/{article}/edit 编辑文章 public function edit($art_id) { $data = (new Category)->tree(); $field = Article::find($art_id); return view('admin.article.edit',compact('data','field')); }
- 拷贝视图模板
article
下的add.blade.php
并重新命名为为edit.blade.php
,并利用admin.blade.php
重新调整代码结构,其中form
表单中和样式布局的具体代码如下
<form action="{{url('admin/article/'.$field->art_id)}}" method="post"> <input type="hidden" name="_method" value="put"> {{csrf_field()}} <table class="add_tab"> <tbody> <tr> <th width="120">分类:</th> <td> <select name="cate_id"> @foreach($data as $d) <option value="{{$d->cate_id}}" @if($field->cate_id==$d->cate_id) selected @endif >{{$d->_cate_name}}</option> @endforeach </select> </td> </tr> <tr> <th><i class="require">*</i> 文章标题:</th> <td> <input type="text" class="lg" name="art_title" value="{{$field->art_title}}"> </td> </tr> <tr> <th>编辑:</th> <td> <input type="text" class="sm" name="art_editor" value="{{$field->art_editor}}"> </td> </tr> <tr> <th>缩略图:</th> <td> <input type="text" size="50" name="art_thumb" value="{{$field->art_thumb}}"> <input id="file_upload" name="file_upload" type="file" multiple="true"> <script src="{{asset('resources/org/uploadify/jquery.uploadify.min.js')}}" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="{{asset('resources/org/uploadify/uploadify.css')}}"> <script type="text/javascript"> <?php $timestamp = time();?> $(function() { $('#file_upload').uploadify({ 'buttonText' : '图片上传', 'formData' : { 'timestamp' : '<?php echo $timestamp;?>', '_token' : "{{csrf_token()}}" }, 'swf' : "{{asset('resources/org/uploadify/uploadify.swf')}}", 'uploader' : "{{url('admin/upload')}}", 'onUploadSuccess' : function(file, data, response) { $('input[name=art_thumb]').val(data); $('#art_thumb_img').attr('src','/blog/'+data);
- 在
// alert(data);
}
});
});
</script>
<style>
.uploadify{display:inline-block;}
.uploadify-button{border:none; border-radius:5px; margin-top:8px;}
table.add_tab tr td span.uploadify-button-text{color: #FFF; margin:0;}
</style>
</td>
</tr>
<tr>
<th></th>
<td>
<img alt="" id="art_thumb_img" style="max-width: 350px; max-height:100px;" src="/blog/{{$field->art_thumb}}">
</td>
</tr>
<tr>
<th>关键词:</th>
<td>
<input type="text" class="lg" name="art_tag" value="{{$field->art_tag}}">
</td>
</tr>
<tr>
<th>描述:</th>
<td>
<textarea name="art_description">{{$field->art_description}}</textarea>
</td>
</tr>
<tr>
<th>文章内容:</th>
<td>
<script type="text/javascript" charset="utf-8" src="{{asset('resources/org/ueditor/ueditor.config.js')}}"></script>
<script type="text/javascript" charset="utf-8" src="{{asset('resources/org/ueditor/ueditor.all.min.js')}}"> </script>
<script type="text/javascript" charset="utf-8" src="{{asset('resources/org/ueditor/lang/zh-cn/zh-cn.js')}}"></script>
<script id="editor" name="art_content" type="text/plain" style="width:860px;height:500px;">{!! $field->art_content !!}</script>
<script type="text/javascript">
var ue = UE.getEditor('editor');
</script>
<style>
.edui-default{line-height: 28px;}
div.edui-combox-body,div.edui-button-body,div.edui-splitbutton-body
{overflow: hidden; height:20px;}
div.edui-box{overflow: hidden; height:22px;}
</style>
</td>
</tr>
<tr>
<th></th>
<td>
<input type="submit" value="提交">
<input type="button" class="back" onclick="history.go(-1)" value="返回">
</td>
</tr>
</tbody>
</table>
</form>
```
* 将视图模板`article`下的`index.blade.php`中修改的链接改为`<a href="{{url('admin/article/'.$v->art_id.'/edit')}}">修改</a>`
* 在`ArticleController.php`文章控制器中添加编辑文章列表的方法`update`,具体代码如下
```objc
//put.admin/article/{article} 更新文章
public function update($art_id)
{
$input = Input::except('_token','_method');
$re = Article::where('art_id',$art_id)->update($input);
if($re){
return redirect('admin/article');
}else{
return back()->with('errors','文章更新失败,请稍后重试!');
}
}
```
- 后台文章删除的详细步骤
- 在
ArticleController.php
文章控制器中添加编辑文章列表的方法destroy
,具体代码如下
//delete.admin/article/{article} 删除单个文章 public function destroy($art_id) { $re = Article::where('art_id',$art_id)->delete(); if($re){ $data = [ 'status' => 0, 'msg' => '文章删除成功!', ]; }else{ $data = [ 'status' => 1, 'msg' => '文章删除失败,请稍后重试!', ]; } return $data; }
- 在视图模板
article
下的index.blade.php
添加删除确认的弹框,具体代码如下
<script> //删除分类 function delArt(art_id) { layer.confirm('您确定要删除这篇文章吗?', { btn: ['确定','取消'] //按钮 }, function(){ $.post("{{url('admin/article/')}}/"+art_id,{'_method':'delete','_token':"{{csrf_token()}}"},function (data) { if(data.status==0){ location.href = location.href; layer.msg(data.msg, {icon: 6}); }else{ layer.msg(data.msg, {icon: 5}); } });
- 在
// layer.msg('的确很重要', {icon: 1});
}, function(){
});
}
</script>
```
* 将视图模板`article`下的`index.blade.php`中删除的链接改为`<a href="javascript:;" onclick="delArt({{$v->art_id}})">删除</a>`
* 修改视图模板`style`下的`index.blade.php`中左侧列表,具体代码如下
```objc
<ul class="sub_menu">
<li><a href="{{url('admin/category/create')}}" target="main"><i class="fa fa-fw fa-plus-square"></i>添加分类</a></li>
<li><a href="{{url('admin/category')}}" target="main"><i class="fa fa-fw fa-list-ul"></i>分类列表</a></li>
<li><a href="{{url('admin/article/create')}}" target="main"><i class="fa fa-fw fa-plus-square"></i>添加文章</a></li>
<li><a href="{{url('admin/article')}}" target="main"><i class="fa fa-fw fa-list-ul"></i>文章列表</a></li>
</ul>
```
友情链接模块
- 友情链接模块使用Migrations数据迁移创建数据表的详细步骤
- 使用命令
php artisan make:migration create_links_table
创建数据库迁移文件 - 数据库迁移文件中的代码如下所示
public function up() { Schema::create('links', function (Blueprint $table) { $table->engine = 'MyISAM'; $table->increments('link_id'); $table->string('link_name')->default('')->comment('//名称'); $table->string('link_title')->default('')->comment('//标题'); $table->string('link_url')->default('')->comment('//链接'); $table->integer('link_order')->default('')->comment('//排序'); }); } public function down() { Schema::drop('links'); }
- 使用命令
php artisan migrate
执行创建数据库迁移文件
- 使用命令
- 友情链接模块使用Seeding填充测试数据的详细步骤
- 使用
php artisan make:seeder LinksTableSeeder
命令创建种子文件 - 在
php artisan make:seeder LinksTableSeeder
文件中添加如下代码
public function run() { $data = [ [ 'link_name' => '后盾网', 'link_title' => '国内口碑最好', 'link_url' => 'http://www.houdunwang.com', 'link_order' => 1, ], [ 'link_name' => '后盾论坛', 'link_title' => '人人做后盾', 'link_url' => 'http://bbs.houdunwang.com', 'link_order' => 2, ] ]; DB::table('links')->insert($data); }
- 在
DatabaseSeeder.php
中修改代码,具体如下
public function run() { $this->call(LinksTableSeeder::class); }
- 使用
php artisan db:seed
命令执行种子文件,填充测试数据
- 使用
- 友情链接模块列表页面展示的详细步骤
- 在
routes.php
中配置友情链接的资源路由,具体代码是Route::resource('links', 'LinksController');
- 使用命令
php artisan make:controller LinksController
创建友情链接控制器 - 使用命令
php artisan make:mode Links
创建友情链接模型 - 在
LinksController.php
文章控制器中添加全部友情链接列表的方法index
,具体代码如下
//get.admin/links 全部友情链接列表 public function index() { $data = Links::orderBy('link_order','asc')->get(); return view('admin.links.index',compact('data')); }
- 拷贝
resources
文件下的views
下的category
到当前文件并重新命名为links
- 修改
links
下的index.blade.php
文件中的代码
- 在
- 友情链接模块Ajax异步修改排序的详细步骤
- 在
routes.php
中配置修改友情链接排序的路由,具体代码是Route::post('links/changeorder', 'LinksController@changeOrder');
- 在
LinksController.php
文章控制器中添加修改友情链接排序的方法changeOrder
,具体代码如下
public function changeOrder() { $input = Input::all(); $links = Links::find($input['link_id']); $links->link_order = $input['link_order']; $re = $links->update(); if($re){ $data = [ 'status' => 0, 'msg' => '友情链接排序更新成功!', ]; }else{ $data = [ 'status' => 1, 'msg' => '友情链接排序更新失败,请稍后重试!', ]; } return $data; }
- 在
LinksController.php
文章控制器中添加修改友情链接排序的方法show
,具体代码如下
//get.admin/category/{category} 显示单个分类信息 public function show() { }
- 修改
links
下的index.blade.php
文件中的代码
- 在
- 友情链接模块之友情链接添加的详细步骤
- 在
LinksController.php
文章控制器中添加全部友情链接列表的方法create
,具体代码如下
//get.admin/links/create 添加友情链接 public function create() { return view('admin.links.add'); }
- 修改
links
下的add.blade.php
文件中的代码 - 在
LinksController.php
文章控制器中添加全部友情链接列表的方法store
,具体代码如下
//post.admin/links 添加友情链接提交 public function store() { $input = Input::except('_token'); $rules = [ 'link_name'=>'required', 'link_url'=>'required', ]; $message = [ 'link_name.required'=>'友情链接名称不能为空!', 'link_url.required'=>'友情链接URL不能为空!', ]; $validator = Validator::make($input,$rules,$message); if($validator->passes()){ $re = Links::create($input); if($re){ return redirect('admin/links'); }else{ return back()->with('errors','友情链接失败,请稍后重试!'); } }else{ return back()->withErrors($validator); } }
- 在
- 友情链接模块之友情链接修改的详细步骤
- 在
LinksController.php
友情链接控制器中添加全部友情链接列表的方法edit
,具体代码如下
//get.admin/links/{links}/edit 编辑友情链接 public function edit($link_id) { $field = Links::find($link_id); return view('admin.links.edit',compact('field')); }
- 修改
links
下的edit.blade.php
文件中的代码 - 在
LinksController.php
友情链接控制器中添加全部友情链接列表的方法destroy
,具体代码如下
//delete.admin/links/{links} 删除友情链接 public function destroy($link_id) { $re = Links::where('link_id',$link_id)->delete(); if($re){ $data = [ 'status' => 0, 'msg' => '友情链接删除成功!', ]; }else{ $data = [ 'status' => 1, 'msg' => '友情链接删除失败,请稍后重试!', ]; } return $data; }
- 在
links
下的index.blade.php
文件中添加如下的代码
//删除友情链接 function delLinks(link_id) { layer.confirm('您确定要删除这个链接吗?', { btn: ['确定','取消'] //按钮 }, function(){ $.post("{{url('admin/links/')}}/"+link_id,{'_method':'delete','_token':"{{csrf_token()}}"},function (data) { if(data.status==0){ location.href = location.href; layer.msg(data.msg, {icon: 6}); }else{ layer.msg(data.msg, {icon: 5}); } });
- 在
// layer.msg('的确很重要', {icon: 1});
}, function(){
});
}
```
- 在
style
下的index.blade.php
文件中修改系统设置下的代码具体的代码如下<ul class="sub_menu " style="display: block;"> <li><a href="{{url('admin/links')}}" target="main"><i class="fa fa-fw fa-cubes"></i>友情链接</a></li> <li><a href="#" target="main"><i class="fa fa-fw fa-database"></i>备份还原</a></li> </ul>
自定义导航模块
- 在友情链接模块基础上完成自定义导航模块的详细步骤
- 创建数据表
blog_liks
- 分别在对应的控制器,模型和视图文件下进行拷贝,并做相应的修改
- 创建数据表
网站配置模块
- 数据表创建
- 创建数据表名为
blog_config
,并添加相应的数据表字段
- 创建数据表名为
- 添加网站配置项
- 在
route.php
文件中配置网站配置的资源路由
// 网站配置的资源路由 Route::resource('config', 'ConfigController');
- 拷贝
LinksController.php
友情链接控制器到当前文件内并重新命名为ConfigController.php
,并修改网站配置控制器中的代码 - 拷贝
Links.php
友情链接模型到当前文件内并重新命名为Config.php
,并修改网站配置模型中的代码 - 拷贝
resources
下的views
下的links
友情链接到当前文件内并重新命名为config
- 修改
resources
下的views
下的config
文件下的add.blade.php
中的代码
- 在
- 网站配置项列表以及异步修改排序
- 修改
resources
下的views
下的config
文件下的index.blade.php
中的代码 - 在
route.php
文件中配置网站配置的资源路由
// 修改网站配置排序路由 Route::post('config/changeorder', 'ConfigController@changeOrder');
- 修改
- 网站配置项修改
- 修改
resources
下的views
下的config
文件下的edit.blade.php
中的代码
- 修改
- 网站配置值分类类型显示
- 修改
ConfigController.php
项目配置控制器的全部配置列表方法index
,具体代码如下
//get.admin/config 全部配置项列表 public function index() { $data = Config::orderBy('conf_order','asc')->get(); foreach ($data as $k=>$v){ switch ($v->field_type){ case 'input': $data[$k]->_html = '<input type="text" class="lg" name="conf_content" value="'.$v->conf_content.'">'; break; case 'textarea': $data[$k]->_html = '<textarea type="text" class="lg" name="conf_content">'.$v->conf_content.'</textarea>'; break; case 'radio': //1|开启,0|关闭 $arr = explode(',',$v->field_value); $str = ''; foreach($arr as $m=>$n){ //1|开启 $r = explode('|',$n); $c = $v->conf_content==$r[0]?' checked ':''; $str .= '<input type="radio" name="conf_content" value="'.$r[0].'"'.$c.'>'.$r[1].' '; } $data[$k]->_html = $str; break; } } return view('admin.config.index',compact('data')); }
- 修改
resources
下的views
下的config
文件下的index.blade.php
中的代码,增加配置内容的显示项,在<table></table>
标签中添加如下代码
<td> {!! $v->_html !!} </td>
- 修改
- 网站配置值修改
- 修改
resources
下的views
下的config
文件下的index.blade.php
中的代码,添加form
表单和提交按钮
<form action="{{url('admin/config/changecontent')}}" method="post"> <div class="btn_group"> <input type="submit" value="提交"> <input type="button" class="back" onclick="history.go(-1)" value="返回" > </div> </form>
- 在
route.php
文件中配置网站配置内容路由
// 修改网站配置内容路由 Route::post('config/changecontent', 'ConfigController@changeContent');
- 在
ConfigController.php
项目配置控制器添加修改网站配置内容的方法changeContent
,具体代码如下
public function changeContent() { $input = Input::all(); foreach($input['conf_id'] as $k=>$v){ Config::where('conf_id',$v)->update(['conf_content'=>$input['conf_content'][$k]]); } $this->putFile(); return back()->with('errors','配置项更新成功!'); }
- 修改
ConfigController.php
项目配置控制器中全部配置项列表的方法index
,将name="conf_content"
改为name="conf_content[]"
- 修改
resources
下的views
下的config
文件下的index.blade.php
中的代码,在显示网站配置内容的地方加上如下代码<input type="hidden" name="conf_id[]" value="{{$v->conf_id}}">
- 修改
- 生成网站配置项文件
- 修改
ConfigController.php
项目配置控制器中添加生成配置文件的方法putFile
,具体代码如下
// 生成配置文件 public function putFile() { $config = Config::pluck('conf_content','conf_name')->all(); $path = base_path().'/config/web.php'; $str = '<?php return '.var_export($config,true).';'; file_put_contents($path,$str); }
- 在
route.php
文件中配置生成配置文路由
// 生成配置文件的路由 Route::get('config/putfile', 'ConfigController@putFile');
- 在
ConfigController.php
项目配置控制器中的方法changeContent
,destroy
,update
方法中加上代码$this->putFile();
- 修改
resources
下的views
下的style
文件下的index.blade.php
中的代码如下
<li><a href="{{url('admin/config')}}" target="main"><i class="fa fa-fw fa-cogs"></i>网站配置</a></li>
- 修改