# LPadmin多语言博客系统 **Repository Path**: xw54/LPadmin-Blog ## Basic Information - **Project Name**: LPadmin多语言博客系统 - **Description**: LPadmin 多语言博客系统是一个功能完整、性能优异的现代化博客平台,支持多语言内容管理、SEO优化、AI自动生成文章等高级特性。系统采用 Laravel 10+ 框架开发,前端使用 Blade SSR 渲染,无需 Node.js 环境,提供完整的后台管理系统和前台展示功能。 - **Primary Language**: PHP - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2025-11-05 - **Last Updated**: 2025-11-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LPadmin 多语言博客系统 > 基于 Laravel 10+ 和 LPadmin 后台管理系统构建的现代化多语言博客平台 ![后台首页](11.png) ![文章自动发布、手动发布](1.png) ![前端首页](2.png) ![会员中心](3.png) ## 📋 目录 - [项目简介](#项目简介) - [核心特性](#核心特性) - [技术栈](#技术栈) - [系统架构](#系统架构) - [功能模块](#功能模块) - [安装部署](#安装部署) - [项目结构](#项目结构) - [数据库设计](#数据库设计) - [多语言支持](#多语言支持) - [SEO优化](#seo优化) - [AI文章生成](#ai文章生成) - [开发规范](#开发规范) - [常见问题](#常见问题) - [更新日志](#更新日志) - [许可证](#许可证) --- ## 项目简介 LPadmin 多语言/AI自动发布开源博客系统是一个功能完整、性能优异的现代化博客平台,支持多语言内容管理、SEO优化、AI自动生成文章等高级特性。系统采用 Laravel 10+ 框架开发,前端使用 Blade SSR 渲染,无需 Node.js 环境,提供完整的后台管理系统和前台展示功能,适用海内外搜索引擎推广、引流、营销。 - 演示地址:http://www.code120.cn ### 主要特点 - 🌍 **多语言支持**:支持简体中文、繁体中文、英文等多种语言,内容以 JSON 格式存储 - 📝 **完整博客功能**:文章、分类、标签、评论、点赞、收藏等核心功能 - 🎨 **现代化UI**:简洁美观的界面设计,支持响应式布局 - 🔍 **SEO友好**:完整的 SEO 优化,支持 canonical、hreflang、JSON-LD、OG/Twitter 标签 - 🤖 **AI文章生成**:集成 DeepSeek API,支持自动和手动生成文章 - 🔐 **权限管理**:基于 RBAC 的完整权限控制系统 - 📊 **数据统计**:文章浏览量、点赞数、收藏数、评论数等统计功能 --- ## 核心特性 ### 前台功能 - ✅ 多语言内容展示(简体中文、繁体中文、英文) - ✅ 文章列表、分类浏览、标签筛选 - ✅ 文章详情页(支持 Markdown 渲染) - ✅ 用户评论系统(支持审核) - ✅ 点赞和收藏功能 - ✅ 用户注册、登录、个人中心 - ✅ 会员中心(个人资料、我的收藏、我的点赞、我的评论) - ✅ 搜索功能 - ✅ 网站地图(sitemap.xml) - ✅ 友情链接管理 - ✅ 顶部导航菜单(支持多级菜单) - ✅ 焦点图广告(支持标题和内容显示) ### 后台管理(LPadmin) - ✅ 博客文章管理(创建、编辑、发布、下线) - ✅ 分类管理(支持层级分类) - ✅ 标签管理 - ✅ 评论审核管理 - ✅ 导航菜单管理 - ✅ 广告管理(多种类型:焦点图、友情链接、分类页banner等) - ✅ 系统配置管理 - ✅ SEO设置(站点信息、多语言配置) - ✅ AI文章生成(DeepSeek API集成) - ✅ 权限管理(管理员、角色、菜单权限) - ✅ 操作日志 --- ## 技术栈 ### 后端技术 - **PHP**: >= 8.1 - **框架**: Laravel 10.x - **数据库**: MySQL 8.0+ - **缓存**: Redis (可选) - **队列**: Laravel Queue - **HTTP客户端**: Guzzle HTTP ### 前端技术 - **模板引擎**: Blade (SSR) - **UI框架**: PearAdminLayui - **CSS框架**: Bootstrap 5 - **图标库**: Bootstrap Icons - **JavaScript**: 原生 JavaScript (ES6+) ### 开发工具 - **代码规范**: PSR-12 (Laravel Pint) - **包管理**: Composer - **版本控制**: Git --- ## 系统架构 ### 目录结构 ``` blog/ ├── app/ │ ├── Console/ # 命令行任务 │ │ └── Commands/ # 自定义命令(如:AI文章生成) │ ├── Exceptions/ # 异常处理 │ ├── Helpers/ # 辅助函数 │ │ ├── ConfigHelper.php # 配置助手 │ │ └── functions.php # 全局函数 │ ├── Http/ │ │ ├── Controllers/ │ │ │ ├── Blog/ # 前台博客控制器 │ │ │ └── LPadmin/ # 后台管理控制器 │ │ ├── Kernel.php # HTTP内核 │ │ └── Middleware/ # 中间件 │ ├── Models/ │ │ ├── Blog/ # 博客模型 │ │ └── LPadmin/ # 后台模型 │ ├── Providers/ # 服务提供者 │ ├── Services/ # 业务服务层 │ │ ├── Blog/ # 博客服务 │ │ └── DeepSeekService.php # AI服务 │ └── Traits/ # 特征类 ├── config/ # 配置文件 ├── database/ │ ├── migrations/ # 数据库迁移 │ └── seeders/ # 数据填充 ├── docs/ # 项目文档 ├── lang/ # 语言包 │ ├── zh/ # 简体中文 │ ├── tw/ # 繁体中文 │ └── en/ # 英文 ├── public/ # 公共资源 │ └── static/ # 静态资源 ├── resources/ │ ├── views/ │ │ ├── blog/ # 前台视图 │ │ └── lpadmin/ # 后台视图 │ ├── css/ # CSS文件 │ └── js/ # JavaScript文件 ├── routes/ │ ├── web.php # 前台路由 │ └── lpadmin.php # 后台路由 └── storage/ # 存储目录 ``` ### 模块分层 ``` 请求层 (Controllers) ↓ 服务层 (Services) - 业务逻辑处理 ↓ 模型层 (Models) - 数据访问 ↓ 数据库 (Database) ``` --- ## 功能模块 ### 1. 博客文章管理 - **文章发布**: 支持草稿、发布、下线三种状态 - **多语言内容**: 标题、摘要、正文、SEO信息支持多语言 - **分类关联**: 每篇文章可关联一个分类 - **标签关联**: 支持多标签关联(多对多关系) - **封面图片**: 支持文章封面图上传 - **推荐功能**: 支持文章推荐标记 - **发布时间**: 支持定时发布 ### 2. 分类管理 - **层级分类**: 支持无限级分类嵌套 - **多语言名称**: 分类名称、描述、slug支持多语言 - **排序功能**: 支持自定义排序 - **可见性**: 支持分类可见性控制 ### 3. 标签管理 - **多语言标签**: 标签名称和slug支持多语言 - **自动生成slug**: 标签slug自动生成(格式:tag-{id}) - **标签云**: 前台展示标签云 ### 4. 评论系统 - **评论审核**: 支持评论审核机制(待审核、已通过、已屏蔽) - **评论回复**: 支持评论的回复功能(父子关系) - **IP记录**: 记录评论者IP和User-Agent - **评论统计**: 统计每篇文章的评论数 ### 5. 用户互动 - **点赞功能**: 支持文章点赞(支持匿名用户通过IP点赞) - **收藏功能**: 支持文章收藏 - **幂等性**: 点赞和收藏支持幂等操作(重复操作不产生副作用) ### 6. 导航菜单 - **多级菜单**: 支持无限级菜单嵌套 - **多语言标题**: 菜单标题支持多语言 - **图标支持**: 支持菜单图标 - **排序功能**: 支持菜单排序 - **可见性控制**: 支持菜单可见性控制 ### 7. 广告管理 支持多种类型的广告: - **顶部焦点图** (type=1): 首页轮播图,支持标题和内容显示 - **友情链接** (type=2): 友情链接展示 - **分类页banner** (type=3): 分类页广告 - **标签页banner** (type=4): 标签页广告 - **文章详情页banner** (type=5): 文章详情页广告 - **代码广告** (type=6): 代码类型广告 - **会员中心banner** (type=7): 会员中心广告 ### 8. 会员中心 - **个人资料**: 支持头像上传、昵称、简介等资料编辑 - **我的收藏**: 查看已收藏的文章列表 - **我的点赞**: 查看已点赞的文章列表 - **我的评论**: 查看已发表的评论列表 ### 9. AI文章生成 - **DeepSeek集成**: 集成 DeepSeek API 自动生成文章 - **自动生成**: 支持定时任务自动生成文章 - **手动生成**: 支持后台手动触发生成 - **多语言生成**: 根据系统语言配置生成多语言内容 - **关键词配置**: 支持关键词配置和衍生关键词生成 - **分类标签**: 自动选择或创建分类和标签 --- ## 安装部署 ### 环境要求 - PHP >= 8.1 - Composer - MySQL >= 8.0 - Redis (可选,用于缓存) - Web服务器 (Nginx/Apache) ### 安装步骤 1. **克隆项目** ```bash git clone cd blog ``` 2. **安装依赖** ```bash composer install ``` 3. **配置环境** ```bash cp .env.example .env php artisan key:generate ``` 编辑 `.env` 文件,配置数据库连接: ```env DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=blog DB_USERNAME=root DB_PASSWORD= ``` 4. **运行迁移和填充数据** ```bash php artisan migrate --seed ``` 5. **设置存储链接** ```bash php artisan storage:link ``` 6. **配置Web服务器** 将 `public` 目录设置为网站根目录,配置伪静态规则: **Nginx配置示例:** ```nginx location / { try_files $uri $uri/ /index.php?$query_string; } ``` **Apache配置示例:** 启用 `.htaccess` 文件(已包含在 `public` 目录中) 7. **访问系统** - 前台首页: `http://your-domain.com` - 后台管理: `http://your-domain.com/lpadmin` 默认管理员账号: - 用户名: `admin` - 密码: `123456` 演示地址: - http://www.code120.cn/lpadmin - 用户名: `admin` - 密码: `123456` > ⚠️ **安全提示**: 首次登录后请立即修改默认密码! 8. **配置定时任务(自动生成文章)** 要让自动生成文章功能正常工作,需要配置 Cron Job: **Linux/Unix 系统:** 编辑 crontab: ```bash crontab -e ``` 添加以下行(每分钟执行一次 Laravel 调度器): ```bash * * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1 ``` **Windows 系统:** 使用任务计划程序(Task Scheduler): 1. 打开任务计划程序 2. 创建基本任务 3. 触发器:每天或指定时间 4. 操作:启动程序 5. 程序:`php.exe` 6. 参数:`artisan schedule:run` 7. 起始于:项目根目录路径 **验证定时任务:** 手动测试命令: ```bash php artisan articles:generate --count=1 ``` 查看日志: ```bash tail -f storage/logs/articles-generate.log ``` **配置说明:** 1. 在后台 `lpadmin/blog/deepseek/config` 页面: - ✅ 开启"开启自动生成" - ✅ 开启"自动发布"(如果希望生成的文章自动发布) - 设置"最少生成条数"和"最多生成条数" - 配置 DeepSeek API Key 2. 定时任务会在每天凌晨 2:00 执行(可在 `app/Console/Kernel.php` 中修改时间) --- ## 项目结构 ### 核心模型 #### Blog模型 (`app/Models/Blog/`) - **Post**: 博客文章模型 - **Category**: 分类模型 - **Tag**: 标签模型 - **Comment**: 评论模型 - **Like**: 点赞模型 - **Favorite**: 收藏模型 - **Nav**: 导航菜单模型 - **Ad**: 广告模型 #### LPadmin模型 (`app/Models/LPadmin/`) - **Admin**: 管理员模型 - **Role**: 角色模型 - **Rule**: 权限/菜单规则模型 - **Option**: 系统配置模型 - **User**: 前台用户模型 ### 控制器 #### 前台控制器 (`app/Http/Controllers/Blog/`) - `HomeController`: 首页控制器 - `PostController`: 文章详情控制器 - `CategoryController`: 分类控制器 - `TagController`: 标签控制器 - `CommentController`: 评论控制器 - `LikeController`: 点赞控制器 - `FavoriteController`: 收藏控制器 - `MemberController`: 会员中心控制器 - `ContactController`: 联系我们控制器 - `SitemapController`: 网站地图控制器 - `LanguageController`: 语言切换控制器 - `AuthController`: 用户认证控制器 #### 后台控制器 (`app/Http/Controllers/LPadmin/Blog/`) - `PostController`: 文章管理控制器 - `CategoryController`: 分类管理控制器 - `TagController`: 标签管理控制器 - `CommentController`: 评论管理控制器 - `NavController`: 导航菜单管理控制器 - `AdController`: 广告管理控制器 - `DeepSeekController`: AI文章生成控制器 ### 服务层 - `ArticleGeneratorService`: 文章生成服务 - `DeepSeekService`: DeepSeek API服务 - `CommentFilterService`: 评论过滤服务 - `MenuCacheService`: 菜单缓存服务 - `CacheService`: 缓存服务 ### 辅助函数 全局辅助函数位于 `app/Helpers/functions.php`: - `enabled_langs()`: 获取启用的语言列表 - `get_i18n_value()`: 获取多语言字段值 - `get_blog_ad()`: 获取博客广告 - `get_blog_friend_links()`: 获取友情链接 - `blog_url()`: 生成博客URL - `lpadmin_route_prefix()`: 获取后台路由前缀 --- ## 数据库设计 ### 核心数据表 #### 博客相关表 - **blog_posts**: 博客文章表 - 多语言字段:`title`, `slug`, `summary`, `content`, `meta_title`, `meta_desc` - 状态:`draft`(草稿)、`published`(已发布)、`offline`(已下线) - **blog_categories**: 分类表 - 支持层级分类(`parent_id`) - 多语言字段:`name`, `slug`, `description` - **blog_tags**: 标签表 - 多语言字段:`name`, `slug` - 自动生成slug:`tag-{id}` - **blog_post_tag**: 文章标签关联表(多对多) - **blog_comments**: 评论表 - 状态:`pending`(待审核)、`approved`(已通过)、`blocked`(已屏蔽) - 支持父子评论(`parent_id`) - **blog_likes**: 点赞表 - 唯一约束:`post_id` + `user_id`(或 `user_id=0` + `ip`) - **blog_favorites**: 收藏表 - 唯一约束:`post_id` + `user_id` - **blog_navs**: 导航菜单表 - 支持多级菜单(`parent_id`) - 多语言字段:`title` - **blog_ads**: 广告表 - 支持多种广告类型 - 多语言字段:`title`, `content` #### 系统相关表 - **lp_admins**: 管理员表 - **lp_roles**: 角色表 - **lp_rules**: 权限/菜单规则表 - **lp_admin_roles**: 管理员角色关联表 - **lp_role_rules**: 角色权限关联表 - **lp_users**: 前台用户表 - **lp_options**: 系统配置表 ### 多语言存储 所有多语言字段统一使用 JSON 格式存储,键为语言代码(如 `cn`, `en`, `tw`): ```json { "cn": "简体中文内容", "en": "English Content", "tw": "繁體中文內容" } ``` --- ## 多语言支持 ### 语言配置 系统支持的语言通过后台 `options` 表中的 `lang` 配置项管理,默认支持: - `cn`: 简体中文 - `en`: English - `tw`: 繁體中文 ### 语言切换 - 前台语言切换通过 Cookie 保存用户选择 - 中间件 `SetLocaleFromPath` 负责从 Cookie 读取语言并设置应用语言环境 - 所有多语言内容通过 `get_i18n_value()` 函数获取当前语言版本 ### 语言路由 前台路由采用无语言前缀设计,语言通过 Cookie/Session 保存: - 首页: `/` - 文章详情: `/{slug}` - 分类页: `/category/{slug}` - 标签页: `/tag/{slug}` - 会员中心: `/member` ### 语言包 语言包位于 `lang/` 目录: - `zh/blog.php`: 简体中文翻译 - `tw/blog.php`: 繁体中文翻译 - `en/blog.php`: 英文翻译 使用方式: ```php {{ __('blog.title') }} ``` --- ## SEO优化 ### SEO标签 系统为所有页面自动生成完整的 SEO 标签: - ``: 页面标题 - `<meta name="description">`: 页面描述 - `<meta name="keywords">`: 页面关键词 - `<link rel="canonical">`: 规范URL - `<link rel="alternate" hreflang="*">`: 多语言版本链接 - JSON-LD: 结构化数据 - Open Graph: 社交分享标签 - Twitter Card: Twitter分享标签 ### 页面SEO规范 #### 首页 - Title: `{站点名} - {站点标题}` - Description: 站点描述 - Canonical: `/` - Hreflang: 所有语言版本 #### 文章详情页 - Title: `{文章标题} - {站点名}` - Description: 文章摘要或SEO描述 - Canonical: 文章唯一URL - JSON-LD: BlogPosting 结构化数据 - OG: 文章类型,包含标题、描述、封面图 #### 分类/标签页 - Title: `{分类/标签名} - {站点名}` - Description: 分类/标签描述 - Canonical: 分类/标签URL - Hreflang: 多语言版本链接 ### 网站地图 系统自动生成 `sitemap.xml`,包含: - 所有已发布的文章 - 所有可见的分类 - 所有标签 - 导航菜单链接 访问地址: `/sitemap` ### Robots.txt 系统提供 `robots.txt` 文件,位于 `public/robots.txt` --- ## AI文章生成 ### 功能说明 系统集成了 DeepSeek API,支持自动和手动生成博客文章。 ### 配置说明 在后台 `系统配置` -> `DeepSeek配置` 中配置: - **API Key**: DeepSeek API密钥 - **自动生成**: 是否开启自动生成 - **自动发布**: 生成后是否自动发布 - **每日生成数量**: 最少和最多生成条数 - **关键词列表**: 每行一个关键词 - **生成规则**: 文章生成提示词模板 ### 使用方式 #### 自动生成 配置开启自动生成后,系统会通过定时任务每天自动生成文章。 #### 手动生成 在后台 `博客管理` -> `生成文章` 页面: 1. 选择分类 2. 输入关键词(可选,不填则从配置的关键词中随机选择) 3. 选择标签(可选) 4. 点击"生成文章"按钮 ### 生成规则 文章生成遵循以下规则: 1. 根据分类名称、关键词、标签生成文章 2. 生成完整的文章信息(标题、摘要、正文、SEO信息) 3. 支持多语言生成(根据系统语言配置) 4. 自动选择或创建分类和标签 5. Slug自动生成(格式:`category-{id}`, `tag-{id}`) --- ## 开发规范 ### 代码规范 - 遵循 **PSR-12** 编码规范 - 使用 **Laravel Pint** 进行代码格式化 - 方法命名使用 `camelCase` - 类名使用 `PascalCase` ### 代码格式化 ```bash vendor/bin/pint ``` ### 数据库迁移 所有数据库结构变更必须通过迁移文件: ```bash php artisan make:migration create_xxx_table php artisan migrate ``` ### 数据填充 初始化数据通过 Seeder 填充: ```bash php artisan db:seed --class=SimplifiedPermissionSeeder php artisan db:seed --class=BlogDemoSeeder ``` ### 路由规范 - 前台路由: `routes/web.php` - 后台路由: `routes/lpadmin.php` - 路由命名: 前台使用 `site.*`,后台使用 `lpadmin.*` ### 视图规范 - 前台视图: `resources/views/blog/` - 后台视图: `resources/views/lpadmin/` - 布局文件: `resources/views/blog/layouts/main.blade.php` ### 权限控制 后台权限通过 Blade 指令控制: ```blade @lpadmin_can('blog.post.create') <button>创建文章</button> @endlpadmin_can ``` --- ## 常见问题 ### 1. 如何修改默认语言? 在后台 `系统配置` -> `系统设置` 中修改 `lang` 配置项。 ### 2. 如何添加新语言? 1. 在后台配置中添加新语言代码 2. 创建对应的语言包文件 `lang/{lang}/blog.php` 3. 在创建内容时填写对应语言的内容 ### 3. 如何配置SEO信息? - 全局SEO: 后台 `系统配置` -> `SEO设置` - 文章SEO: 编辑文章时填写SEO字段 - 分类/标签SEO: 编辑分类/标签时填写描述字段 ### 4. 如何开启AI文章生成? 1. 在后台配置 DeepSeek API Key 2. 开启"自动生成"选项 3. 配置关键词和生成规则 4. 设置定时任务(如果需要自动生成) ### 5. 如何自定义主题? 修改 `resources/views/blog/` 目录下的视图文件,主要修改: - `layouts/main.blade.php`: 主布局文件 - `components/`: 组件文件 - `home/index.blade.php`: 首页 ### 6. 如何添加新的广告位? 在后台 `博客管理` -> `广告管理` 中创建新广告,选择对应的广告类型。 ### 7. 评论审核流程? 1. 用户提交评论后,状态为 `pending`(待审核) 2. 管理员在后台 `博客管理` -> `评论管理` 中审核 3. 审核通过后状态变为 `approved`,前台显示 4. 可设置为屏蔽状态 `blocked` --- ## 更新日志 ### v1.0.0 (2024-01-01) - ✨ 初始版本发布 - ✅ 完整的博客功能(文章、分类、标签、评论) - ✅ 多语言支持 - ✅ SEO优化 - ✅ 会员中心 - ✅ 后台管理系统 - ✅ AI文章生成(DeepSeek集成) --- ## 许可证 本项目采用 [MIT License](LICENSE) 许可证。 --- ## 技术支持 - 📧 邮箱: jiu-men@qq.com - 📖 文档: [项目文档](docs/) - 🐛 问题反馈: [Issues](https://gitee.com/xw54/LPadmin-Blog/issues) --- <div align="center"> <p>Made with ❤️ by LPadmin Team</p> <p>Copyright © 2024 LPadmin. All rights reserved.</p> </div>