Hugo 创建多级 Section


原文链接: Hugo 创建多级 Section

https://gohugo.io/content-management/sections/

生成章节 section

章节的生成可以在新建md文章文件的同时生成:

hugo new xxx\yyy.md

这样除了生成了yyy文章外,还生成了xxx章节。

章节也可以单独生成

mkdir content\xxx

章节就是文件夹,当然可以用文件夹的形式来创建,比如右键新建。

对应的类型 type

Is value of type if set in front matter, else it is the name of the root section (e.g. "blog"). It will always have a value, so if not set, the value is "page".

新建了xxx章节,就对应了一个xxx类型的内容类型。 如果没有设置,默认就是"page"

当然,默认所有的内容类型都是一样的,在设置了内容类型模板之后,以后新建的xxx章节内容都将继承这个模板“xxx.md”的基本设置,也就是都为xxx内容类型。

在文件头里面设置的“type”内容类型与章节是一样的效果。

type = "xxx"

更多内容参看内容类型。

对应的模板

对应的,我们可以为每个章节设置单独的模板,更多内容参看模板部分。
总结

章节就是文件夹,用来组织内容的一种最有效方式。

章节也有单独的内容类型,也有单独的模板。如果都没设置,则使用默认的内容类型和模板。

同一文件夹下文件名不能重复,这是组织内容的根本原则。实际上对于中文站点来说,章节尽可能的少,因为服务器系统不支持 中文文件夹,较少的可以用拼音或者英文代替,手动设置导航目录,过多的章节会给目录导航带来麻烦。

如何创建多级 section

1.在二级目录里创建 _index.md 文件

Hugo, by deault, creates sections for the top level only (A, B ...), for nested sections,
you need an "_index.md" or similar in the bottom-most folder.

2. 模板实现

    {{ range .Site.Sections }}
    {{ if ne  .Type  "post" }}
        <li class="menu-item menu-item-type-post_type menu-item-object-page">
        <a rel="nofollow" href="/{{ .Type | lower }}/">{{ .Type | title}} </a>
        
            {{ with .Sections }}         
            <ul>
                {{ range . }}  
                <li >
                    <a href="{{ .Permalink }}">{{replaceRE ".*/(.+?)/$" "$1" .File.Dir |title}}</a>
                    <!-- <a href="{{ .Permalink }}">{{index (findRE "([a-z]+)" .URL) 1 }}</a> -->
                </li>                
                {{ end }}
            </ul>
            {{end}}
        </li>
    {{ end }}        
    {{ end }}

根据 menu


        {{ range .Site.Menus.main.ByWeight }}
          {{ if .HasChildren }}
            <li class="navlinks-container">
              <a class="navlinks-parent" href="javascript:void(0)">{{ .Name }}</a>
              <div class="navlinks-children">
                {{ range .Children }}
                <!-- 取消i18n URL
                  <a href="{{ .URL | relLangURL }}">{{ .Name }}</a>
                -->
                  <a href="{{ .URL | absURL }}">{{ .Name }}</a>
                {{ end }}
              </div>
            </li>
          {{ else }}
            <li>
              <a title="{{ .Name }}" href="{{ .URL  | relLangURL }}">{{ .Name }}</a>
              <!-- 如果使用absURL的话所有的链接最后面要加还是那个/才能访问,但是使用relLangURL在config.tom里设置https地址就不会生效-->
              <!--
              <a title="{{ .Name }}" href="{{ .URL  | absURL }}">{{ .Name }}</a>
              -->
            </li>
          {{ end }}

`