美文网首页PHP开发PHP实战
Laravel框架实战项目Blog

Laravel框架实战项目Blog

作者: JoyceZhao | 来源:发表于2016-07-14 16:13 被阅读565次

    文章分类

    • 后台文章分类列表页模板导的详细步骤
      • 建立数据表blog_category,并添加相应的文章字段
      • 使用php artisan make:model Category命令,创建Category.php模型文件,并编写对应的属性代码
      • Admin文件下使用php artisan make:controller CategoryController命令创建基于CommonControllerCategoryController控制器
      • 在路由文件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> &raquo; 全部分类
      • 根据控制器中传过来的数据调整<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.phpcreate方法中返回add.blade.php视图
    • 后台文章父级分类嵌入的详细步骤
      • 修改CategoryController.phpcreate方法,具体代码如下
      //get.admin/category/create   添加分类
      public function create()
      {
          $data = Category::where('cate_pid',0)->get();
          return view('admin.category.add',compact('data'));
      }
      
      • 编写CategoryController.phpstore方法,具体代码如下
      //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.phpdestory方法中添加如下代码
      //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>
      
    • 后台文章添加缩略图上传之文件存储的详步骤
      • 修改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项目配置控制器中的方法changeContentdestroyupdate方法中加上代码$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>
      

    相关文章

      网友评论

        本文标题:Laravel框架实战项目Blog

        本文链接:https://www.haomeiwen.com/subject/xbwejttx.html