- Add Favicon field to SiteSetting model with FaviconIsURL() helper - Implement favicon upload and management in site settings page - Support both external URL and local file upload for favicon - Add favicon display in page header with automatic URL detection - Add i18n translations for favicon settings (EN/ZH) - Update middleware and helpers to pass favicon data to templates - Include migration script for existing databases Users can now customize their site's favicon from /admin/settings/site by either providing an external URL or uploading a local image file (recommended formats: .ico, .png, .svg, 16x16 or 32x32 pixels). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2.9 KiB
2.9 KiB
Favicon 设置功能更新
概述
在站点设置页面 (/admin/settings/site) 添加了 Favicon(网站图标)设置功能。
更改的文件
1. 数据库模型 (models/site_setting.go)
- 添加了
Favicon字段到SiteSetting结构体 - 添加了
FaviconIsURL()方法来判断 Favicon 是外链还是本地文件
2. 处理器 (handlers/settings.go)
SiteSettingsPage: 添加SiteFaviconIsURL到模板数据SiteSettingsSave: 添加 Favicon 上传和保存逻辑,支持:- 外链 URL 设置
- 本地文件上传(.ico, .png, .svg)
- 清除当前 Favicon
3. 模板 (templates/admin/settings_site.html)
- 添加 Favicon 设置表单区域
- 显示当前 Favicon 预览
- 支持 URL 输入和文件上传
- 添加清除 Favicon 的复选框
4. 国际化 (i18n/i18n.go)
添加了以下翻译键:
settings_favicon: Favicon / 网站图标(Favicon)settings_favicon_url: Favicon URL (external link) / Favicon 链接(外链地址)settings_favicon_current: Current favicon / 当前 Faviconsettings_favicon_hint: 格式提示settings_favicon_clear: Remove current favicon / 移除当前 Favicon
5. 中间件 (middleware/auth.go)
- 在
SetUserContext中添加site_favicon和site_favicon_is_url到上下文
6. 辅助函数 (handlers/helpers.go)
- 在
DefaultData中添加SiteFavicon和SiteFaviconIsURL到模板数据
7. 页面模板 (templates/layouts/base.html)
- 在
<head>中添加 Favicon 的<link>标签 - 根据设置自动使用外链或本地文件
数据库迁移
如果数据库已存在,需要手动添加 favicon 字段:
ALTER TABLE site_settings ADD COLUMN favicon VARCHAR(512) DEFAULT '';
或者运行提供的迁移脚本:
sqlite3 data/blog.db < scripts/add_favicon_field.sql
注意: GORM 的 AutoMigrate 会在下次启动时自动添加新字段,无需手动执行 SQL。
使用说明
- 访问
/admin/settings/site页面 - 在 "网站图标(Favicon)" 部分:
- 方式一:输入外链 URL(如 CDN 链接)
- 方式二:上传本地图片文件(推荐 .ico, .png 或 .svg 格式,32x32 或 16x16 像素)
- 点击 "保存" 按钮
- Favicon 将自动应用到网站所有页面
文件存储
- 上传的 Favicon 文件保存在
{storage_path}/logos/目录下 - 文件名固定为
favicon.{ext}(如 favicon.ico, favicon.png) - 每次上传新文件时会自动删除旧文件
技术细节
支持的格式
- ICO (.ico) - 传统格式,兼容性最好
- PNG (.png) - 现代浏览器支持
- SVG (.svg) - 矢量格式,适合高分辨率显示
优先级
- 如果同时设置了 URL 和上传文件,URL 优先
- 如果勾选 "移除当前 Favicon",会删除现有设置
缓存
- Favicon 设置存储在数据库中
- 通过
models.RefreshConfigCache()刷新内存缓存 - 更改后立即生效,无需重启服务