Golang - Html Template:如何创建导航项子菜单?我不知道怎么做

rjee0c15  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(101)

我试图从PHP切换到GO,但我在一个点上卡住了,我请求你的帮助。
我在数据库中有一个名为Menu的表。在这里,menuid等于0将成为主菜单。不等于0的值取决于所写的menuid。我想画它所依赖的子菜单,但我不能这样做,我卡住了。
表>菜单

简体中文
输出>不是一个接一个地添加子菜单,而是将每个子菜单作为单独的菜单并排添加。

我的PHP函数。

PHP输出(工作)

它不是一个接一个地添加子菜单,而是将它们中的每一个作为单独的菜单并排添加。我不知道该怎么做。

qoefvg9y

qoefvg9y1#

我解决了我的问题。
我实现了一个像下面这样的结构。任何需要的人都可以从这里复制。

package main

import (
    "html/template"
    "log"

    "github.com/gofiber/fiber/v2"
    "gorm.io/driver/sqlite"
    "gorm.io/gorm"
)

type MenuItem struct {
    gorm.Model
    Title    string
    ParentID int
    URL      string
    SubMenu  []MenuItem `gorm:"-"`
}

var db *gorm.DB

func main() {
    app := 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>

相关问题