我正在尝试从 PHP 切换到 GO,但我陷入了困境,我请求你的帮助。
我在数据库中有一个名为 Menu 的表。 这里,menuid等于0成为主菜单。 不等于0的取决于书面的menuid。 我想绘制它所依赖的子菜单,但是我做不到,卡住了。
它不是逐个添加子菜单,而是并排添加每个子菜单并作为单独的菜单。我找不到怎么做。
我解决了我的问题。
我实现了如下所示的结构。有需要的可以从这里复制过来
package main
导入( “html/模板” “日志”
"github.com/gofiber/fiber/v2"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
键入 MenuItem 结构体 { gorm.模型 标题字符串 父 ID 整数 网址字符串 子菜单 []MenuItem
gorm:"-"
}
var db *gorm.DB
函数主(){ 应用程序:= Fiber.New()
var err error
db, err = gorm.Open(sqlite.Open("menu.db"), &gorm.Config{})
if err != nil {
log.Fatal(err)
}
db.AutoMigrate(&MenuItem{})
app.Get("/", func(c *fiber.Ctx) error {
menuItems := []MenuItem{}
db.Where("parent_id = ?", 0).Find(&menuItems)
for i := range menuItems {
subMenuItems := []MenuItem{}
db.Where("parent_id = ?", menuItems[i].ID).Find(&subMenuItems)
menuItems[i].SubMenu = subMenuItems
}
return c.Render("index", fiber.Map{"MenuItems": menuItems})
})
app.Static("/static", "./static")
app.Listen(":8080")
}
html
<nav>
<ul>
{{ range $index, $item := .MenuItems }}
<li><a href="{{ $item.URL }}">{{ $item.Title }}</a></li>
{{ if $item.SubMenu }}
<ul>
{{ range $subIndex, $subItem := $item.SubMenu }}
<li><a href="{{ $subItem.URL }}">{{ $subItem.Title }}</a></li>
{{ end }}
</ul>
{{ end }}
{{ end }}
</ul>
</nav>