feat: 文章/分类/评论关联细节完善

- 文章列表:会员插件注入「付费」徽章列(会员/付费¥xx,停插件即消失)
- 分类:真实文章数(withCount)、名称点击跳文章列表并按分类筛选(ListPosts booted 预置筛选)
- 分类:新增封面(medialibrary)+ 介绍(description 字段/表单);前台分类页顶部展示介绍区;SEO description + BreadcrumbList 结构化数据(GEO)
- 文章编辑:MarkdownEditor 内容区加大(26rem);文章编辑页新增「评论」关系管理页(可审/拒)
- 评论列表:文章列带摘要
- 三套主题补 .category-intro 样式
- 测试更新(付费徽章列)
This commit is contained in:
ak
2026-08-12 22:44:16 +08:00
parent a22175d5b7
commit 5f74dd76e4
18 changed files with 276 additions and 34 deletions
@@ -4,7 +4,11 @@ declare(strict_types=1);
namespace App\Filament\Resources\Categories\Schemas;
use App\Support\MediaDisk;
use Filament\Forms\Components\SpatieMediaLibraryFileUpload;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Schema;
class CategoryForm
@@ -13,23 +17,39 @@ class CategoryForm
{
return $schema
->components([
TextInput::make('name')
->label(__('category.name'))
->required(),
TextInput::make('slug')
->label(__('category.slug'))
->helperText('留空自动生成'),
TextInput::make('display_order')
->label(__('category.display_order'))
->required()
->numeric()
->default(0),
TextInput::make('post_count')
->label(__('category.post_count'))
->required()
->numeric()
->default(0)
->disabled(),
Section::make('基本信息')
->columns(2)
->schema([
TextInput::make('name')
->label(__('category.name'))
->required(),
TextInput::make('slug')
->label(__('category.slug'))
->helperText('留空自动生成'),
TextInput::make('display_order')
->label(__('category.display_order'))
->required()
->numeric()
->default(0),
TextInput::make('post_count')
->label('文章数(自动统计)')
->numeric()
->disabled(),
Textarea::make('description')
->label('分类介绍')
->helperText('显示在分类列表页顶部,也用于 SEO description')
->rows(4)
->columnSpanFull(),
]),
Section::make('封面')
->schema([
SpatieMediaLibraryFileUpload::make('cover')
->label('封面图')
->collection('cover')
->image()
->imageEditor()
->disk(MediaDisk::name()),
]),
]);
}
}
@@ -9,16 +9,20 @@ use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Illuminate\Support\Str;
class CategoriesTable
{
public static function configure(Table $table): Table
{
return $table
->modifyQueryUsing(fn ($query) => $query->withCount('posts'))
->columns([
TextColumn::make('name')
->label(__('category.name'))
->searchable(),
->searchable()
->url(fn ($record) => route('filament.admin.resources.posts.index').'?category_id='.$record->id)
->description(fn ($record) => $record->description ? Str::limit($record->description, 40) : null),
TextColumn::make('slug')
->label(__('category.slug'))
->searchable(),
@@ -26,8 +30,8 @@ class CategoriesTable
->label(__('category.display_order'))
->numeric()
->sortable(),
TextColumn::make('post_count')
->label(__('category.post_count'))
TextColumn::make('posts_count')
->label('文章数')
->numeric()
->sortable(),
TextColumn::make('created_at')