Skip to content

Commit 81778a4

Browse files
committed
feat: 博客点赞和收藏功能(适配MemberFav和MemberLike)
1 parent 4bc410e commit 81778a4

File tree

9 files changed

+266
-8
lines changed

9 files changed

+266
-8
lines changed

config/module.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,6 @@
1616
'Blog' => [
1717
'enable' => true,
1818
],
19-
// 'AdminApi' => [
20-
// 'enable' => true,
21-
// ],
22-
// 'BlogAdminApi' => [
23-
// 'enable' => true,
24-
// ],
2519
'Nav' => [
2620
'enable' => true,
2721
'config' => [
@@ -40,5 +34,11 @@
4034
'VisitStatistic' => [
4135
'enable' => true,
4236
],
37+
// 'AdminApi' => [
38+
// 'enable' => true,
39+
// ],
40+
// 'BlogAdminApi' => [
41+
// 'enable' => true,
42+
// ],
4343
],
4444
];

module/Blog/Core/BlogMemberFavBiz.php

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
3+
4+
namespace Module\Blog\Core;
5+
6+
7+
use ModStart\Core\Dao\ModelUtil;
8+
use ModStart\Core\Util\ArrayUtil;
9+
use ModStart\Widget\TextLink;
10+
use Module\Blog\Util\UrlUtil;
11+
use Module\MemberFav\Biz\AbstractMemberFavBiz;
12+
13+
class BlogMemberFavBiz extends AbstractMemberFavBiz
14+
{
15+
const NAME = 'Blog';
16+
17+
public function name()
18+
{
19+
return self::NAME;
20+
}
21+
22+
public function title()
23+
{
24+
return '收藏的博客';
25+
}
26+
27+
public function memberMenu()
28+
{
29+
return [
30+
'title' => '博客',
31+
'icon' => 'list',
32+
'sort' => 100,
33+
'children' => [
34+
[
35+
'title' => '收藏的博客',
36+
'url' => modstart_web_url('member_fav/' . self::NAME),
37+
],
38+
]
39+
];
40+
}
41+
42+
public function memberTitle()
43+
{
44+
return '收藏的博客';
45+
}
46+
47+
public function memberGridItem($item)
48+
{
49+
$record = ModelUtil::get('blog', $item['bizId']);
50+
return TextLink::primary(htmlspecialchars($record['title']),
51+
UrlUtil::blog($record), 'target="_blank"');
52+
}
53+
54+
public function memberRecords($items)
55+
{
56+
ModelUtil::join($items, 'bizId', '_blog', 'blog', 'id');
57+
$records = [];
58+
foreach ($items as $item) {
59+
$record = ArrayUtil::keepKeys($item, ['biz', 'bizId', 'created_at']);
60+
$record['style'] = 'title';
61+
$record['title'] = '[已删除博客]';
62+
$record['url'] = '';
63+
if (!empty($item['_blog'])) {
64+
$record['title'] = $item['_blog']['title'];
65+
$record['url'] = '/pages/blog/show?id=' . $item['_blog']['id'];
66+
}
67+
$records[] = $record;
68+
}
69+
return $records;
70+
}
71+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php
2+
3+
4+
namespace Module\Blog\Core;
5+
6+
7+
use ModStart\Core\Dao\ModelUtil;
8+
use ModStart\Core\Util\ArrayUtil;
9+
use ModStart\Widget\TextLink;
10+
use Module\Blog\Util\UrlUtil;
11+
use Module\MemberLike\Biz\AbstractMemberLikeBiz;
12+
13+
class BlogMemberLikeBiz extends AbstractMemberLikeBiz
14+
{
15+
const NAME = 'Blog';
16+
17+
public function name()
18+
{
19+
return self::NAME;
20+
}
21+
22+
public function title()
23+
{
24+
return '点赞的博客';
25+
}
26+
27+
public function memberMenu()
28+
{
29+
return [
30+
'title' => '博客',
31+
'icon' => 'list',
32+
'sort' => 100,
33+
'children' => [
34+
[
35+
'title' => '点赞的博客',
36+
'url' => modstart_web_url('member_like/' . self::NAME),
37+
],
38+
]
39+
];
40+
}
41+
42+
public function memberTitle()
43+
{
44+
return '点赞的博客';
45+
}
46+
47+
public function memberGridItem($item)
48+
{
49+
$record = ModelUtil::get('blog', $item['bizId']);
50+
return TextLink::primary(htmlspecialchars($record['title']),
51+
UrlUtil::blog($record), 'target="_blank"');
52+
}
53+
54+
public function memberRecords($items)
55+
{
56+
ModelUtil::join($items, 'bizId', '_blog', 'blog', 'id');
57+
$records = [];
58+
foreach ($items as $item) {
59+
$record = ArrayUtil::keepKeys($item, ['biz', 'bizId', 'created_at']);
60+
$record['style'] = 'title';
61+
$record['title'] = '[已删除博客]';
62+
$record['url'] = '';
63+
if (!empty($item['_blog'])) {
64+
$record['title'] = $item['_blog']['title'];
65+
$record['url'] = '/pages/blog/show?hash=' . $item['_blog']['id'];
66+
}
67+
$records[] = $record;
68+
}
69+
return $records;
70+
}
71+
72+
}

module/Blog/Core/ModuleServiceProvider.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Module\Blog\Core;
44

55
use Illuminate\Events\Dispatcher;
6+
use Illuminate\Support\Facades\Event;
67
use Illuminate\Support\ServiceProvider;
78
use ModStart\Admin\Config\AdminMenu;
89
use ModStart\Admin\Widget\DashboardItemA;
@@ -11,6 +12,11 @@
1112
use ModStart\Module\ModuleClassLoader;
1213
use Module\Banner\Biz\BannerPositionBiz;
1314
use Module\Blog\Util\BlogCategoryUtil;
15+
use Module\Blog\Util\BlogUtil;
16+
use Module\MemberFav\Biz\MemberFavBiz;
17+
use Module\MemberFav\Event\MemberFavChangeEvent;
18+
use Module\MemberLike\Biz\MemberLikeBiz;
19+
use Module\MemberLike\Event\MemberLikeChangeEvent;
1420
use Module\Partner\Biz\PartnerPositionBiz;
1521
use Module\Reward\Biz\RewardBiz;
1622
use Module\Vendor\Admin\Widget\AdminWidgetDashboard;
@@ -110,6 +116,22 @@ public function boot(Dispatcher $events)
110116
if (modstart_module_enabled('Reward')) {
111117
RewardBiz::register(BlogRewardBiz::class);
112118
}
119+
if (modstart_module_enabled('MemberFav')) {
120+
MemberFavBiz::register(BlogMemberFavBiz::class);
121+
Event::listen(MemberFavChangeEvent::class, function (MemberFavChangeEvent $event) {
122+
if ($event->biz == BlogMemberFavBiz::NAME) {
123+
BlogUtil::updateFavoriteCount($event->bizId);
124+
}
125+
});
126+
}
127+
if (modstart_module_enabled('MemberLike')) {
128+
MemberLikeBiz::register(BlogMemberLikeBiz::class);
129+
Event::listen(MemberLikeChangeEvent::class, function (MemberLikeChangeEvent $event) {
130+
if ($event->biz == BlogMemberFavBiz::NAME) {
131+
BlogUtil::updateLikeCount($event->bizId);
132+
}
133+
});
134+
}
113135
}
114136

115137
/**

module/Blog/Docs/release.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
## 3.2.0
2+
3+
- 新增:博客点赞和收藏适配(需 Member、MemberFav、MemberLike 支持)
4+
- 新增:博客标签数量侧边栏显示数量限制可设置
5+
6+
---
7+
18
## 3.1.0 标签样式修复,首页标题优化
29

310
- 修复:博客添加“置顶”“热门”“推荐”等标签后,部分UI下,首页标题显示不出
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
use Illuminate\Database\Schema\Blueprint;
4+
use Illuminate\Database\Migrations\Migration;
5+
6+
class BlogFavLikeCount extends Migration
7+
{
8+
/**
9+
* Run the migrations.
10+
*
11+
* @return void
12+
*/
13+
public function up()
14+
{
15+
Schema::table('blog', function (Blueprint $table) {
16+
17+
$table->integer('likeCount')->nullable()->comment('点赞');
18+
$table->integer('favCount')->nullable()->comment('收藏');
19+
20+
});
21+
}
22+
23+
/**
24+
* Reverse the migrations.
25+
*
26+
* @return void
27+
*/
28+
public function down()
29+
{
30+
31+
}
32+
}

module/Blog/Util/BlogUtil.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
4+
namespace Module\Blog\Util;
5+
6+
7+
use ModStart\Core\Dao\ModelUtil;
8+
use Module\Blog\Core\BlogMemberFavBiz;
9+
use Module\Blog\Core\BlogMemberLikeBiz;
10+
use Module\MemberFav\Model\MemberFav;
11+
use Module\MemberLike\Model\MemberLike;
12+
13+
class BlogUtil
14+
{
15+
public static function updateFavoriteCount($id)
16+
{
17+
if (modstart_module_enabled('MemberFav')) {
18+
ModelUtil::update('blog', $id, [
19+
'favCount' => MemberFav::countBiz(BlogMemberFavBiz::NAME, $id),
20+
]);
21+
}
22+
}
23+
24+
public static function updateLikeCount($id)
25+
{
26+
if (modstart_module_enabled('MemberLike')) {
27+
ModelUtil::update('blog', $id, [
28+
'likeCount' => MemberLike::countBiz(BlogMemberLikeBiz::NAME, $id),
29+
]);
30+
}
31+
}
32+
}

module/Blog/View/pc/blog/show.blade.php

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,16 @@
3333
<i class="iconfont icon-comment"></i>
3434
{{$record['commentCount']?:0}}
3535
<span>&nbsp;</span>
36+
@if(modstart_module_enabled('MemberFav'))
37+
<i class="iconfont icon-star-alt"></i>
38+
{{ $record['favCount']?:0 }}
39+
<span>&nbsp;</span>
40+
@endif
41+
@if(modstart_module_enabled('MemberLike'))
42+
<i class="iconfont icon-heart-alt"></i>
43+
{{ $record['likeCount']?:0 }}
44+
<span>&nbsp;</span>
45+
@endif
3646
</div>
3747
<div>
3848
@if(!empty($record['images']))
@@ -46,8 +56,18 @@
4656
{!! $record['content'] !!}
4757
</div>
4858
</div>
59+
@if(modstart_module_enabled('MemberFav')||modstart_module_enabled('MemberLike'))
60+
<div class="tw-text-center margin-bottom">
61+
@if(modstart_module_enabled('MemberFav'))
62+
@include('module::MemberFav.View.inc.favBtn',['biz'=>\Module\Blog\Core\BlogMemberFavBiz::NAME,'bizId'=>$record['id']])
63+
@endif
64+
@if(modstart_module_enabled('MemberLike'))
65+
@include('module::MemberLike.View.inc.likeBtn',['biz'=>\Module\Blog\Core\BlogMemberLikeBiz::NAME,'bizId'=>$record['id']])
66+
@endif
67+
</div>
68+
@endif
4969
@if(modstart_module_enabled('ShareJS'))
50-
<div class="tw-text-center">
70+
<div class="tw-text-center margin-bottom">
5171
{!! \Module\ShareJS\View\ShareJSView::buttons() !!}
5272
</div>
5373
@endif

module/Blog/config.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@
1717
"tags": [
1818
"博客"
1919
],
20-
"version": "3.1.0",
20+
"version": "3.2.0",
2121
"author": "ModStart",
2222
"description": "提供一个基础的博客系统",
2323
"suggest": [
2424
"Member",
25+
"MemberFav",
26+
"MemberLike",
2527
"SiteMapManager",
2628
"PayCenter",
2729
"ShareJS"

0 commit comments

Comments
 (0)