数据库文章表的创建及添加文章模板导入
创建文章表
创建一个资源路由和与之对应的控制器(类似于分类管理),导入模板
后台文章添加及百度编辑器Ueditor嵌入
控制器
public function create()
{
$data = (new Category)->tree();
return view('admin.article.add',compact('data'));
}
在add.blade.php中引入分类级别
<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>
百度编辑器Ueditor嵌入
将下载好的ueditor放至resources/org目录下,并在文章内容处引入ueditor的<script>并做相应的修改
<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:600px;height:300px;"></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>
后台文章添加缩略图之uploadify插件引入(www.uploadify.com)
将下载好的ueditor放至resources/org目录下
将与之对应的<script>引入到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);
// 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>
后台文章添加缩略图之文件存储
//图片上传
Commoncontroller.php中做如下配置
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;
}
}
add.blade.phpp配置
显示文件路径及缩略图
'onUploadSuccess' : function(file, data, response) {
$('input[name=art_thumb]').val(data);//在文本框内显示文件路径
$('#art_thumb_img').attr('src','/'+data);//抓取缩略图所在位置
<td>
<img src="" alt="" id="art_thumb_img" style="max-width: 350px; max-height:100px;">
//显示缩略图
</td>
后台文章添加数据及validation验证
//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);
}
}
后台文章列表展示及分页功能实现
取数据,排序,分页
public function index()
{
$data = Article::orderBy('art_id','desc')->paginate(10); //取数据,排序,分页
return view('admin.article.index',compact('data'));
}
循环读取数据
@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:;" οnclick="delArt({{$v->art_id}})">删除</a>
</td>
</tr>
@endforeach
显示分页信息
<div class="page_list">
{{$data->links()}}
</div>
后台文章编辑
在修改按钮处添加:<a href="{{url('admin/article/'.$v->art_id.'/edit')}}">修改</a>
编辑文章控制器
//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'));
}
循环读取当前文章所属目录
@foreach($data as $d)
<option value="{{$d->cate_id}}"
@if($field->cate_id==$d->cate_id) selected @endif
>{{$d->_cate_name}}</option>
@endforeach
更新文章
//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','文章更新失败,请稍后重试!');
}
}
后台文章删除
在删除按钮处添加:<a href="javascript:;" οnclick="delArt({{$v->art_id}})">删除</a>
在当前页面添加<script>函数
<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});
}
});
}, function(){
});
}
</script>
编写删除单个文章的控制器方法
//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;
}
友情链接模块使用Migrations数据库迁移创建数据表
php artisan make:migration create_link_table
在database/migration下可查看,打开并编辑
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(0)->comment('//排序');
});
}
创建数据表生成文件命令: php artisan migrate
友情链接模块使用seeding填充测试数据
打开文件写入以下内容
public function run()
{
$data = [
[
'link_name' => '测试填充数据 ',
'link_title' => '测试填充数据',
'link_url' => '测试填充数据',
'link_order' =>测试填充数据,
],
[
'link_name' => '测试填充数据',
'link_title' => '测试填充数据',
'link_url' => '测试填充数据',
'link_order' =>测试填充数据,
]
];
DB::table('links')->insert($data);
}
修改DatabaseSeeder.php文件里的
public function run()
{
$this->call(LinksTableSeeder::class);
}
执行填充文件:php artisan db:seed
友情链接模块列表页展示及Ajax异步修改排序
创建资源模型,路由和对应的控制器
返回一个视图并修改视图模板
<td class="tc">
<input type="text" οnchange="changeOrder(this,{{$v->link_id}})" value="{{$v->link_order}}">
</td>
修改changeOrder函数
function changeOrder(obj,link_id){
var link_order = $(obj).val();
$.post("{{url('admin/links/changeorder')}}",{'_token':'{{csrf_token()}}','link_id':link_id,'link_order':link_order},function(data){
if(data.status == 0){
layer.msg(data.msg, {icon: 6});
}else{
layer.msg(data.msg, {icon: 5});
}
});
}
创建changeorder路由和与之对应的控制器方法
Route::post('navs/changeorder', 'NavsController@changeOrder');
编辑与之对应的控制器方法
public function changeOrder()
{
$input = Input::all();
$navs = Navs::find($input['nav_id']);
$navs->nav_order = $input['nav_order'];
$re = $navs->update();
if($re){
$data = [
'status' => 0,
'msg' => '自定义导航排序更新成功!',
];
}else{
$data = [
'status' => 1,
'msg' => '自定义导航排序更新失败,请稍后重试!',
];
}
return $data;
}
友情链接模块之友情链接添加
<a href="{{url('admin/links/create')}}"><i class="fa fa-plus"></i>添加链接</a>
//get.admin/links/create 添加友情链接
public function create()
{
return view('admin/links/add');
}
编辑提交及验证方法
//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);
}
}
友情链接之友情链接修改及删除
<a href="{{url('admin/links/'.$v->link_id.'/edit')}}">修改</a>
编辑控制方法
//get.admin/links/{links}/edit 编辑友情链接
public function edit($link_id)
{
$field = Links::find($link_id);
return view('admin.links.edit',compact('field'));
}
//put.admin/links/{links} 更新友情链接
public function update($link_id)
{
$input = Input::except('_token','_method');
$re = Links::where('link_id',$link_id)->update($input);
if($re){
return redirect('admin/links');
}else{
return back()->with('errors','友情链接更新失败,请稍后重试!');
}
}
修改模板页面部分代码
<form action="{{url('admin/links/'.$field->link_id)}}" method="post">
{{method_field('PUT')}}
{{csrf_field()}}
</form>
<a href="javascript:;" οnclick="delLinks({{$v->link_id}})">删除</a>
编辑delLinks函数
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});
}
});
}, function(){
});
}
删除的控制方法
//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;
}