Golang - Html 模板:如何创建导航项 - 子菜单?我找不到怎么做

问题描述 投票:0回答:1

我正在尝试从 PHP 切换到 GO,但我陷入了困境,我请求你的帮助。

我在数据库中有一个名为 Menu 的表。 这里,menuid等于0成为主菜单。 不等于0的取决于书面的menuid。 我想绘制它所依赖的子菜单,但是我做不到,卡住了。

表格 > 菜单

html

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

我的 PHP 函数。

PHP 输出(工作)

它不是逐个添加子菜单,而是并排添加每个子菜单并作为单独的菜单。我找不到怎么做。

php go go-templates go-fiber go-html-template
1个回答
0
投票

我解决了我的问题。

我实现了如下所示的结构。有需要的可以从这里复制过来

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>
© www.soinside.com 2019 - 2024. All rights reserved.