feat: Admin settings 侧栏 aside_widgets 开关与排序

让运营可在 /admin/settings 配置右栏组件,并与友链页 aside 开关共用同一份 JSON。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-29 20:16:07 +08:00
parent 2d09729976
commit 5e623f67fb
10 changed files with 236 additions and 32 deletions

View File

@@ -792,7 +792,12 @@ func (s *ForumSettingsService) SetAsideFriendLinksEnabled(enabled bool) error {
if !found {
widgets = append(widgets, AsideWidget{ID: AsideWidgetFriendLinks, Enabled: enabled})
}
widgets = NormalizeAsideWidgets(widgets)
return s.UpdateAsideWidgets(widgets)
}
// UpdateAsideWidgets 保存侧栏组件顺序与开关(同步 legacy bool 键)
func (s *ForumSettingsService) UpdateAsideWidgets(in []AsideWidget) error {
widgets := NormalizeAsideWidgets(in)
bools := asideBoolsFromWidgets(widgets)
payload, err := json.Marshal(widgets)
if err != nil {
@@ -801,11 +806,21 @@ func (s *ForumSettingsService) SetAsideFriendLinksEnabled(enabled bool) error {
if err := s.setString(SettingAsideWidgets, string(payload)); err != nil {
return err
}
v := "0"
if bools.friendLinks {
v = "1"
boolUpdates := map[string]bool{
SettingAsideShowTagCloud: bools.tagCloud,
SettingAsideShowRecentComments: bools.recentComments,
SettingAsideShowFriendLinks: bools.friendLinks,
}
return s.setString(SettingAsideShowFriendLinks, v)
for key, on := range boolUpdates {
v := "0"
if on {
v = "1"
}
if err := s.setString(key, v); err != nil {
return err
}
}
return nil
}
type asideWidgetBools struct {