Features: - Custom navigation links management in admin settings - Multi-language support for navigation links (Chinese/English) - Control link behavior (open in new window) - Sort order and enable/disable toggle for nav links - User registration system with validation - Admin can enable/disable user registration - Registration form with username, display name, email, password - Link to registration from login page Navigation Links: - Admin interface to add/edit/delete custom nav links - Support for both internal and external URLs - Display links in header navigation bar - Respects language preference User Registration: - Username validation (3-32 characters, alphanumeric + underscore/dash) - Password validation (minimum 6 characters) - Password confirmation matching - Optional display name and email fields - Can be toggled on/off by admin in site settings Templates: - Added navigation links settings page - Added user registration page - Updated login page with registration link - Updated base layout to render custom nav links Documentation: - NAV_LINKS_FEATURE.md - Navigation links feature documentation - REGISTRATION_FEATURE.md - User registration documentation - IMPLEMENTATION_SUMMARY.md - Overall implementation summary Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
38 lines
1.3 KiB
Go
38 lines
1.3 KiB
Go
package models
|
|
|
|
import "time"
|
|
|
|
// NavLink represents a custom navigation link in the header.
|
|
type NavLink struct {
|
|
ID uint `gorm:"primarykey" json:"id"`
|
|
TitleZh string `gorm:"size:100;not null" json:"title_zh"` // Link text (Chinese)
|
|
TitleEn string `gorm:"size:100;not null" json:"title_en"` // Link text (English)
|
|
URL string `gorm:"size:512;not null" json:"url"` // Target URL
|
|
OpenNew bool `gorm:"default:false" json:"open_new"` // Open in new window
|
|
Enabled bool `gorm:"default:true" json:"enabled"` // Show/hide link
|
|
Sort int `gorm:"default:0;index" json:"sort"` // Display order (lower = first)
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
UpdatedBy uint `gorm:"index" json:"updated_by"`
|
|
}
|
|
|
|
// TableName overrides the default GORM table name.
|
|
func (NavLink) TableName() string {
|
|
return "nav_links"
|
|
}
|
|
|
|
// Title returns the link text for the given language code, falling back to
|
|
// the other language when the requested one is empty.
|
|
func (n *NavLink) Title(lang string) string {
|
|
if lang == "zh" {
|
|
if n.TitleZh != "" {
|
|
return n.TitleZh
|
|
}
|
|
return n.TitleEn
|
|
}
|
|
if n.TitleEn != "" {
|
|
return n.TitleEn
|
|
}
|
|
return n.TitleZh
|
|
}
|