Skip to content

Commit

Permalink
添加@某个用户的功能
Browse files Browse the repository at this point in the history
  • Loading branch information
no-serve-people committed Jan 9, 2019
1 parent 8ed18f9 commit 5e8a5c8
Show file tree
Hide file tree
Showing 10 changed files with 62 additions and 3 deletions.
28 changes: 28 additions & 0 deletions app/Http/Controllers/RepliesController.php
Expand Up @@ -6,6 +6,7 @@
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Http\Requests\ReplyRequest; use App\Http\Requests\ReplyRequest;
use App\Models\User;


class RepliesController extends Controller class RepliesController extends Controller
{ {
Expand All @@ -21,6 +22,11 @@ public function store(ReplyRequest $request, Reply $reply)
if (empty($content)) { if (empty($content)) {
return redirect()->back()->with('danger', '回复内容错误!'); return redirect()->back()->with('danger', '回复内容错误!');
} }
// fixme只能@一个用户
$username = $this->get_between($content, '@', ' ');
$uid = User::query()->where('name', $username)->pluck('id')->toArray();
$replace = "<a style='color:blue' href='/users/" . $uid[0] . "' title='" . "$username'>@" . $username . "</a>";
$content = str_replace('@' . $username, $replace, $content);
$reply->content = $content; $reply->content = $content;
$reply->user_id = \Auth::id(); $reply->user_id = \Auth::id();
$reply->topic_id = $request->topic_id; $reply->topic_id = $request->topic_id;
Expand All @@ -36,4 +42,26 @@ public function destroy(Reply $reply)


return redirect()->to($reply->topic->link())->with('success', '删除成功!'); return redirect()->to($reply->topic->link())->with('success', '删除成功!');
} }

public function atwho(Request $request)
{
$name = $request->input('q', '');
//fixme 只能 at话题作者或者是自己的粉丝
$users = User::query()->where('name', 'like', $name . '%')->pluck('name');
// laravel集合可以当做数组用,laravel默认返回的是json响应
return $users;
}

/**
* php截取指定两个字符之间字符串
* @param $input
* @param $start
* @param $end
* @return bool|string
*/
public function get_between($input, $start, $end)
{
$substr = substr($input, strlen($start) + strpos($input, $start), (strlen($input) - strpos($input, $end)) * (-1));
return $substr;
}
} }
1 change: 1 addition & 0 deletions public/css/jquery.atwho.min.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions public/js/jquery.atwho.min.js

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions public/js/jquery.caret.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions resources/assets/atwho/css/jquery.atwho.min.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions resources/assets/atwho/js/jquery.atwho.min.js

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions resources/assets/atwho/js/jquery.caret.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

23 changes: 21 additions & 2 deletions resources/views/topics/_reply_box.blade.php
Expand Up @@ -4,9 +4,28 @@
<input type="hidden" name="_token" value="{{ csrf_token() }}"> <input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="topic_id" value="{{ $topic->id }}"> <input type="hidden" name="topic_id" value="{{ $topic->id }}">
<div class="form-group"> <div class="form-group">
<textarea class="form-control" rows="3" placeholder="分享你的想法" name="content"></textarea> <textarea class="form-control inputor" rows="3" placeholder="分享你的想法" name="content"></textarea>
</div> </div>
<button type="submit" class="btn btn-primary btn-sm"><i class="fa fa-share"></i>回复</button> <button type="submit" class="btn btn-primary btn-sm"><i class="fa fa-share"></i>回复</button>
</form> </form>
</div> </div>
<hr> <hr>
@section('styles')
<link href="{{asset('css/jquery.atwho.min.css')}}" rel="stylesheet">
@endsection
@section('scripts')
<script src="{{asset('js/jquery.atwho.min.js')}}"></script>
<script src="{{asset('js/jquery.caret.min.js')}}"></script>
<script>
$('.inputor').atwho({
at: "@",
callbacks: {
remoteFilter: function (query, callback) {
$.getJSON("/atwho", {q: query}, function (data) {
callback(data)
})
}
}
})
</script>
@endsection
2 changes: 2 additions & 0 deletions routes/web.php
Expand Up @@ -47,6 +47,8 @@
Route::resource('categories', 'CategoriesController', ['only' => ['show']]); Route::resource('categories', 'CategoriesController', ['only' => ['show']]);
Route::post('upload_image', 'TopicsController@uploadImage')->name('topics.upload_image'); Route::post('upload_image', 'TopicsController@uploadImage')->name('topics.upload_image');
Route::resource('replies', 'RepliesController', ['only' => ['store', 'destroy']]); Route::resource('replies', 'RepliesController', ['only' => ['store', 'destroy']]);
Route::get('atwho', 'RepliesController@atwho')->name('replies.atwho');

Route::resource('notifications', 'NotificationsController', ['only' => ['index']]); Route::resource('notifications', 'NotificationsController', ['only' => ['index']]);
Route::get('pages/notification_count', 'PagesController@notificationCount')->name('pages.notification_count'); Route::get('pages/notification_count', 'PagesController@notificationCount')->name('pages.notification_count');
Route::get('permission-denied', 'PagesController@permissionDenied')->name('permission-denied'); Route::get('permission-denied', 'PagesController@permissionDenied')->name('permission-denied');
4 changes: 3 additions & 1 deletion webpack.mix.js
Expand Up @@ -14,4 +14,6 @@ let mix = require('laravel-mix');
mix.js('resources/assets/js/app.js', 'public/js') mix.js('resources/assets/js/app.js', 'public/js')
.sass('resources/assets/sass/app.scss', 'public/css') .sass('resources/assets/sass/app.scss', 'public/css')
.copyDirectory('resources/assets/editor/js', 'public/js') .copyDirectory('resources/assets/editor/js', 'public/js')
.copyDirectory('resources/assets/editor/css', 'public/css'); .copyDirectory('resources/assets/editor/css', 'public/css')
.copyDirectory('resources/assets/atwho/js', 'public/js')
.copyDirectory('resources/assets/atwho/css', 'public/css');

0 comments on commit 5e8a5c8

Please sign in to comment.