7.4 KiB
7.4 KiB
统一内容系统使用指南
概述
现在 comindex.uvue 页面已经改用统一的 ak_contents 表来管理业务项目,不再需要单独的 ak_business_items 表。这样做的好处包括:
- 统一管理: 所有内容(文章、业务项目、产品等)使用同一套表结构
- 多语言支持: 利用现有的多语言翻译系统
- 功能复用: 共享评论、收藏、分享等功能
- 维护简化: 减少重复的表结构和逻辑
表结构说明
ak_contents 表
业务项目作为一种特殊的内容类型存储在 ak_contents 表中:
-- 关键字段说明
content_type = 'business_item' -- 标识为业务项目
title -- 业务项目标题
content_summary -- 业务项目描述
featured_image_url -- 业务项目图片
category_id -- 分类ID(关联到业务分类)
original_language -- 原始语言
status = 'published' -- 发布状态
view_count -- 浏览次数
published_at -- 发布时间
tags -- 标签数组
数据获取逻辑
1. 查询优化
使用连接查询获取分类信息,避免多次查询:
const result = await supa
.from('ak_contents')
.select(`
id,
title,
content_summary,
featured_image_url,
published_at,
view_count,
status,
tags,
ak_content_categories!inner(name_key)
`)
.eq('status', 'published')
.eq('content_type', 'business_item')
.eq('original_language', currentLanguageCode.value)
.order('published_at', { ascending: false })
2. 多语言支持
根据用户选择的语言自动筛选对应语言的业务项目:
original_language = 'zh-CN'- 简体中文original_language = 'en'- 英文original_language = 'zh-TW'- 繁体中文original_language = 'ja'- 日文
3. 数据转换
将 ak_contents 的字段映射到 BusinessItem 类型:
const businessItem: BusinessItem = {
id: item.id,
title: item.title,
description: item.content_summary,
imageUrl: item.featured_image_url,
categoryName: item.ak_content_categories?.name_key,
publishTime: new Date(item.published_at).toLocaleDateString(),
viewCount: item.view_count,
loading: false
}
部署步骤
1. 运行初始化脚本
# 运行业务项目初始化脚本
psql -d your_database -f init_business_items.sql
2. 验证数据
-- 查看业务项目
SELECT * FROM public.vw_business_items;
-- 检查分类
SELECT * FROM public.ak_content_categories
WHERE name_key LIKE 'business.%';
-- 验证内容类型
SELECT content_type, COUNT(*)
FROM public.ak_contents
GROUP BY content_type;
3. 测试功能
- 访问公司首页,查看业务项目展示
- 切换语言,验证多语言业务项目
- 点击业务项目,测试详情页导航
内容管理
1. 添加新业务项目
INSERT INTO public.ak_contents (
title,
content_summary,
content_type,
category_id,
original_language,
status,
featured_image_url,
tags
) VALUES (
'新业务项目',
'项目描述...',
'business_item',
(SELECT id FROM ak_content_categories WHERE name_key = 'business.ai'),
'zh-CN',
'published',
'https://example.com/image.jpg',
ARRAY['标签1', '标签2']
);
2. 添加多语言版本
-- 先插入英文版本
INSERT INTO public.ak_contents (
title,
content_summary,
content_type,
category_id,
original_language,
status
) VALUES (
'AI Solutions',
'Comprehensive AI technology support...',
'business_item',
(SELECT id FROM ak_content_categories WHERE name_key = 'business.ai'),
'en',
'published'
);
3. 管理业务分类
-- 添加新的业务分类
INSERT INTO public.ak_content_categories (
name_key,
level,
ai_keywords,
sort_order
) VALUES (
'business.cybersecurity',
0,
ARRAY['网络安全', 'cybersecurity', '信息安全'],
9
);
页面路由更新
详情页导航
现在业务项目详情使用通用的内容详情页:
// 旧的路由
url: `/pages/business/detail?id=${item.id}`
// 新的路由
url: `/pages/content/detail?id=${item.id}&type=business_item`
建议的页面结构
pages/
content/
detail.uvue -- 统一的内容详情页
list.uvue -- 内容列表页
info/
comindex.uvue -- 公司首页(业务项目展示)
index.uvue -- 信息首页
性能优化
1. 索引优化
确保以下索引存在:
CREATE INDEX IF NOT EXISTS idx_ak_contents_content_type ON ak_contents(content_type);
CREATE INDEX IF NOT EXISTS idx_ak_contents_language ON ak_contents(original_language);
CREATE INDEX IF NOT EXISTS idx_ak_contents_status ON ak_contents(status);
CREATE INDEX IF NOT EXISTS idx_ak_contents_published ON ak_contents(published_at DESC);
2. 查询优化
- 使用连接查询减少数据库请求次数
- 按语言筛选减少数据传输量
- 分页加载避免一次性加载过多数据
3. 缓存策略
- 分类数据可以缓存,减少重复查询
- 公司配置信息可以缓存到本地存储
- 热门业务项目可以预加载
扩展功能
基于统一的内容系统,可以轻松扩展以下功能:
1. 内容翻译
利用现有的 ak_content_translations 表:
-- 为业务项目添加翻译
INSERT INTO public.ak_content_translations (
content_id,
language_id,
translated_title,
translated_content,
translation_method
) VALUES (
'business-item-id',
'language-id',
'Translated Title',
'Translated Content',
'human'
);
2. 业务项目评论
使用 ak_comments 表:
-- 为业务项目添加评论
INSERT INTO public.ak_comments (
target_type,
target_id,
author_id,
content
) VALUES (
'content',
'business-item-id',
'user-id',
'这个业务解决方案很棒!'
);
3. 业务项目收藏
使用 ak_content_favorites 表:
-- 收藏业务项目
INSERT INTO public.ak_content_favorites (
user_id,
target_type,
target_id
) VALUES (
'user-id',
'content',
'business-item-id'
);
迁移指南
从 ak_business_items 迁移
如果之前使用过独立的业务项目表,可以这样迁移:
-- 迁移数据
INSERT INTO public.ak_contents (
title,
content_summary,
content_type,
featured_image_url,
view_count,
status,
original_language,
published_at
)
SELECT
title,
description,
'business_item',
image_url,
view_count,
'published',
'zh-CN',
created_at
FROM old_ak_business_items
WHERE status = 'active';
-- 删除旧表(谨慎操作)
-- DROP TABLE IF EXISTS old_ak_business_items;
总结
通过使用统一的 ak_contents 表来管理业务项目,我们实现了:
- ✅ 数据结构统一: 所有内容使用相同的表结构
- ✅ 多语言支持: 自动根据用户语言筛选内容
- ✅ 功能集成: 共享评论、收藏、分享等功能
- ✅ 维护简化: 减少重复代码和表结构
- ✅ 扩展性强: 易于添加新的内容类型和功能
这种设计模式可以应用到其他内容类型(如产品介绍、案例研究等),形成统一的内容管理系统。