本书未发布
84. 回复管理
说明
在本节里,我们完成后台回复管理功能。
需求分析
和注册用户管理一样,后台模块只能查看回复列表和删除话题,不能添加或编辑回复信息。
回复列表
- 有查看权限的管理员用户才可以访问本页面;
- 按回复创建时间降序排列显示出回复关联的话题标题、回复创建用户昵称、回复创建用户头像和回复创建时间;
- 点击话题标题跳转到前台话题详情页;
- 点击创建用户昵称或头像跳转到前台个人中心页面;
- 可以按分类和标题关键词搜索话题;
删除回复
- 有删除权限的管理员用户才可以删除记录;
- 点击删除用户时需要弹出确认提示,当管理员确认后再能删除;
- 删除操作请求必须是DELETE请求;
- 回复删除后关联话题的「回复数」减一。
观察者
因为在前台开时我们已经实现回复删除成功后,关联话题的「回复数」减一功能,所以在这里不需要再进行开发。
模型
在回复模型里添加后台管理员使用的搜索方法:
application/common/model/Reply.php
<?php
.
.
.
class Reply extends Model
{
.
.
.
/**
* 后台模块搜索方法
* @Author zhanghong(Laifuzi)
* @DateTime 2019-06-25
* @param array $params [description]
* @param integer $page_rows [description]
* @return [type] [description]
*/
public static function adminPaginate($params = [], $page_rows = 15)
{
$self = self::order('id', 'DESC');
$map = [];
foreach ($params as $name => $text) {
$text = trim($text);
switch ($name) {
case 'keyword':
if(!empty($text)){
$like_text = '%'.$text.'%';
$self = $self->whereLike('content', $like_text);
}
break;
}
}
return $self->with('user,topic')->paginate($page_rows, false, ['query' => $params]);
}
}
控制器
创建回复管理控制器:
$ php think make:controller admin/Reply
只保留控制器里的 index
和 delete
方法,详细代码如下:
application/admin/controller/Reply.php
<?php
namespace app\admin\controller;
use think\Request;
use tpadmin\controller\Controller;
use app\common\model\Reply as ReplyModel;
class Reply extends Controller
{
public function index(Request $request)
{
$param = $request->param();
$paginate = ReplyModel::adminPaginate($param);
$this->assign('param', $param);
$this->assign('paginate', $paginate);
return $this->fetch('reply/index');
}
public function delete($id)
{
$reply = ReplyModel::find($id);
if(!empty($reply)){
$reply->delete();
}
return $this->success([]);
}
}
路由
在配置文件里定义控制方法访问路由规则:
route/admin_content.php
<?php
Route::group([
'name' => 'admin',
'middleware' => ['tpadmin.admin', 'tpadmin.admin.role'],
], function () {
.
.
.
// 回复管理
Route::get('/reply', 'Reply@index')->name('admin.reply.index');
Route::delete('/reply/<id>', 'reply/delete')->name('admin.reply.delete');
})->prefix('\\app\\admin\\controller\\');
视图模板
创建回复列表视图模板页面,详细代码如下:
application/admin/view/reply/index.html
{extend name="layout:base" /}
{block name="main_content"}
<div class="row maintop">
<div class="col-xs-10 col-sm-5">
<form name="form_search" class="form-search" method="get">
<div class="input-group">
<span class="input-group-addon">
<i class="ace-icon fa fa-check"></i>
</span>
<input type="text" name="keyword" id="keyword" class="form-control" value="{$param.keyword|default=''}" placeholder="请输入关键词" />
<span class="input-group-btn">
<button type="submit" class="btn btn-purple btn-sm">
<span class="ace-icon fa fa-search icon-on-right bigger-110"></span>
搜索
</button>
</span>
</div>
</form>
</div>
<div class="col-xs-4 col-sm-5">
<div class="input-group-btn">
<a href="{:url('[admin.reply.index]')}">
<button type="button" class="btn btn-sm btn-purple">
<span class="ace-icon fa fa-globe icon-on-right bigger-110"></span>
显示全部
</button>
</a>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<table class="table table-striped table-bordered table-hover" id="dynamic-table">
<thead>
<tr>
<th>用户名</th>
<th>回复内容</th>
<th>创建时间</th>
<th class="center">操作</th>
</tr>
</thead>
<tbody>
{foreach $paginate->all() as $key => $reply }
<tr>
<td>
<a href="{:url('user.read', ['id' => $reply->id, 'tab' => 'replies'])}" target="_blank">
{$reply->user->name}
</a>
</td>
<td>{$reply->content}</td>
<td>{$reply->create_time}</td>
<td class="center">
{if auth_check('user/delete', $current_adminer->id) }
<a class="red" herf="javascript:void(0);" onclick="alert_del(this);" data-del-href="{:url('[admin.reply.delete]', ['id' => $reply.id])}" data-del-id='{$reply.id}'>
<i class="ace-icon fa fa-trash-o bigger-130"></i>删除
</a>
{/if}
</td>
</tr>
{/foreach}
</tbody>
</table>
<div>
<?php echo($paginate->render()); ?>
</div>
</div>
</div>
{/block}
权限管理
用 admin
账号登录后台,添加以下路由规则并给『运营』 角色组分配访问权限。
新增路由规则清单:
上级菜单 | 菜单标题 | 页面名称 | 路由名称 | 是否显示 | 排序编号 |
---|---|---|---|---|---|
内容管理 | 回复管理 | reply/index | admin.reply.index | 是 | 230 |
回复管理 | 删除回复 | reply/delete | admin.reply.delete | 是 | 231 |
效果预览
用 manager
账号登录查看回复管理功能:
Git 版本控制
下面把代码纳入到版本管理:
$ git add -A
$ git commit -m "后台回复管理"
推荐文章: