资源栏
This commit is contained in:
parent
d1e0c21a9a
commit
395b1c619a
@ -3,16 +3,18 @@
|
|||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Models\Category;
|
use App\Models\Category;
|
||||||
|
use App\Models\Link;
|
||||||
use App\Models\Topic;
|
use App\Models\Topic;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
class CategoriesController extends Controller
|
class CategoriesController extends Controller
|
||||||
{
|
{
|
||||||
public function show(Category $category, Request $request, User $user)
|
public function show(Category $category, Request $request, User $user, Link $link)
|
||||||
{
|
{
|
||||||
$topics = Topic::where('category_id', $category->id)->withOrder($request->order)->with('user', 'category')->paginate();
|
$topics = Topic::where('category_id', $category->id)->withOrder($request->order)->with('user', 'category')->paginate();
|
||||||
|
$links = $link->getAllCached();
|
||||||
$active_users = $user->getActiveUsers();
|
$active_users = $user->getActiveUsers();
|
||||||
return view('topics.index', compact('topics', 'category', 'active_users'));
|
return view('topics.index', compact('topics', 'category', 'active_users', 'links'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ namespace App\Http\Controllers;
|
|||||||
|
|
||||||
use App\Http\Requests\TopicRequest;
|
use App\Http\Requests\TopicRequest;
|
||||||
use App\Models\Category;
|
use App\Models\Category;
|
||||||
|
use App\Models\Link;
|
||||||
use App\Models\Topic;
|
use App\Models\Topic;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Tools\ImageUploadTool;
|
use App\Tools\ImageUploadTool;
|
||||||
@ -23,11 +24,12 @@ class TopicsController extends Controller
|
|||||||
return view('topics.create_and_edit', compact('topic', 'categories'));
|
return view('topics.create_and_edit', compact('topic', 'categories'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function index(Request $request, Topic $topic, User $user)
|
public function index(Request $request, Topic $topic, User $user, Link $link)
|
||||||
{
|
{
|
||||||
$active_users = $user->getActiveUsers();
|
$active_users = $user->getActiveUsers();
|
||||||
$topics = $topic->with('user', 'category')->withOrder($request->order)->paginate();
|
$topics = $topic->with('user', 'category')->withOrder($request->order)->paginate();
|
||||||
return view('topics.index', compact('topics', 'active_users'));
|
$links = $link->getAllCached();
|
||||||
|
return view('topics.index', compact('topics', 'links', 'active_users'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function show(Topic $topic, Request $request)
|
public function show(Topic $topic, Request $request)
|
||||||
|
29
app/Models/Link.php
Normal file
29
app/Models/Link.php
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Support\Facades\Cache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Link
|
||||||
|
* @property int id
|
||||||
|
* @property string title
|
||||||
|
* @property string link
|
||||||
|
* @package App\Models
|
||||||
|
*/
|
||||||
|
class Link extends Model
|
||||||
|
{
|
||||||
|
public $cache_key = 'larabbs_key';
|
||||||
|
public $cache_expire_in_minutes = 1440;
|
||||||
|
protected $fillable = ['title', 'link'];
|
||||||
|
|
||||||
|
public function getAllCached()
|
||||||
|
{
|
||||||
|
return Cache::remember($this->cache_key, $this->cache_expire_in_minutes, function () {
|
||||||
|
{
|
||||||
|
return $this->all();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
21
app/Observers/LinkObserver.php
Normal file
21
app/Observers/LinkObserver.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: xing
|
||||||
|
* Date: 2018/6/2
|
||||||
|
* Time: 21:36
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\Observers;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Models\Link;
|
||||||
|
use Cache;
|
||||||
|
|
||||||
|
class LinkObserver
|
||||||
|
{
|
||||||
|
public function saved(Link $link)
|
||||||
|
{
|
||||||
|
Cache::forget($link->cache_key);
|
||||||
|
}
|
||||||
|
}
|
@ -2,8 +2,10 @@
|
|||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
|
use App\Models\Link;
|
||||||
use App\Models\Reply;
|
use App\Models\Reply;
|
||||||
use App\Models\Topic;
|
use App\Models\Topic;
|
||||||
|
use App\Observers\LinkObserver;
|
||||||
use App\Observers\ReplyObserver;
|
use App\Observers\ReplyObserver;
|
||||||
use App\Observers\TopicObserver;
|
use App\Observers\TopicObserver;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
@ -21,7 +23,7 @@ class AppServiceProvider extends ServiceProvider
|
|||||||
Carbon::setLocale('zh');
|
Carbon::setLocale('zh');
|
||||||
Topic::observe(new TopicObserver());
|
Topic::observe(new TopicObserver());
|
||||||
Reply::observe(new ReplyObserver());
|
Reply::observe(new ReplyObserver());
|
||||||
|
Link::observe(new LinkObserver());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
$a = '';
|
||||||
return array(
|
return array(
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -67,7 +68,8 @@ return array(
|
|||||||
'replies'
|
'replies'
|
||||||
],
|
],
|
||||||
'站点管理' => [
|
'站点管理' => [
|
||||||
'settings.site'
|
'settings.site',
|
||||||
|
'links',
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
|
||||||
|
56
config/administrator/links.php
Normal file
56
config/administrator/links.php
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Created by PhpStorm.
|
||||||
|
* User: xing
|
||||||
|
* Date: 2018/6/2
|
||||||
|
* Time: 20:55
|
||||||
|
*/
|
||||||
|
|
||||||
|
use App\Models\Link;
|
||||||
|
|
||||||
|
return [
|
||||||
|
'title' => '资源推荐',
|
||||||
|
'single' => '资源推荐',
|
||||||
|
|
||||||
|
'model' => Link::class,
|
||||||
|
|
||||||
|
// 访问权限判断
|
||||||
|
'permission' => function () {
|
||||||
|
// 只允许站长管理资源推荐链接
|
||||||
|
return Auth::user()->hasRole('Founder');
|
||||||
|
},
|
||||||
|
|
||||||
|
'columns' => [
|
||||||
|
'id' => [
|
||||||
|
'title' => 'ID',
|
||||||
|
],
|
||||||
|
'title' => [
|
||||||
|
'title' => '名称',
|
||||||
|
'sortable' => false,
|
||||||
|
],
|
||||||
|
'link' => [
|
||||||
|
'title' => '链接',
|
||||||
|
'sortable' => false,
|
||||||
|
],
|
||||||
|
'operation' => [
|
||||||
|
'title' => '管理',
|
||||||
|
'sortable' => false,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'edit_fields' => [
|
||||||
|
'title' => [
|
||||||
|
'title' => '名称',
|
||||||
|
],
|
||||||
|
'link' => [
|
||||||
|
'title' => '链接',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'filters' => [
|
||||||
|
'id' => [
|
||||||
|
'title' => '标签 ID',
|
||||||
|
],
|
||||||
|
'title' => [
|
||||||
|
'title' => '名称',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
10
database/factories/LinkFactory.php
Normal file
10
database/factories/LinkFactory.php
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Faker\Generator as Faker;
|
||||||
|
|
||||||
|
$factory->define(\App\Models\Link::class, function (Faker $faker) {
|
||||||
|
return [
|
||||||
|
'title' => $faker->name,
|
||||||
|
'link' => $faker->url,
|
||||||
|
];
|
||||||
|
});
|
33
database/migrations/2018_06_02_204347_create_links_table.php
Normal file
33
database/migrations/2018_06_02_204347_create_links_table.php
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class CreateLinksTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create('links', function (Blueprint $table) {
|
||||||
|
$table->increments('id');
|
||||||
|
$table->string('title')->comment('资源的描述')->index();
|
||||||
|
$table->string('link')->comment('资源的链接')->index();
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('links');
|
||||||
|
}
|
||||||
|
}
|
@ -14,5 +14,6 @@ class DatabaseSeeder extends Seeder
|
|||||||
$this->call(UsersTableSeeder::class);
|
$this->call(UsersTableSeeder::class);
|
||||||
$this->call(TopicsTableSeeder::class);
|
$this->call(TopicsTableSeeder::class);
|
||||||
$this->call(ReplysTableSeeder::class);
|
$this->call(ReplysTableSeeder::class);
|
||||||
|
$this->call(LinksTableSeeder::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
17
database/seeds/LinksTableSeeder.php
Normal file
17
database/seeds/LinksTableSeeder.php
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
|
class LinksTableSeeder extends Seeder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the database seeds.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function run()
|
||||||
|
{
|
||||||
|
$link = factory(\App\Models\Link::class)->times(6)->make();
|
||||||
|
\App\Models\Link::insert($link->toArray());
|
||||||
|
}
|
||||||
|
}
|
@ -25,3 +25,21 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
|
@if (count($links))
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-body active-users">
|
||||||
|
|
||||||
|
<div class="text-center">资源推荐</div>
|
||||||
|
<hr>
|
||||||
|
@foreach ($links as $link)
|
||||||
|
<a class="media" href="{{ $link->link }}">
|
||||||
|
<div class="media-body">
|
||||||
|
<span class="media-heading">{{ $link->title }}</span>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
@endforeach
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endif
|
Loading…
Reference in New Issue
Block a user