<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Hugo 学习区：内容与模板入门 on 向叔记事簿</title>
        <link>https://ttf248.life/learning/hugo-learning-path/</link>
        <description>Recent content in Hugo 学习区：内容与模板入门 on 向叔记事簿</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language><atom:link href="https://ttf248.life/learning/hugo-learning-path/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>先把内容当成一棵树</title>
        <link>https://ttf248.life/learning/hugo-learning-path/01-content-tree/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://ttf248.life/learning/hugo-learning-path/01-content-tree/</guid>
        <description>&lt;p&gt;博客的默认单位是一篇文章：写完、发布、归档，读者通常从最新一篇往回看。课程不是这样。课程的第一章即使一年没更新，也依然应该排在读者面前；中间插入一节补充内容，也不该打乱原有的阅读路径。&lt;/p&gt;
&lt;p&gt;因此，学习区先用目录声明“这是谁的一部分”，再用 &lt;code&gt;weight&lt;/code&gt; 声明“它应该排在第几位”。例如：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;content/learning/hugo-learning-path/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── _index.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── 01-content-tree/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── index.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── 02-reading-template/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └── index.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;顶层 &lt;code&gt;hugo-learning-path&lt;/code&gt; 是一个集合，它的 &lt;code&gt;_index.md&lt;/code&gt; 说明这门课解决什么问题。每个章节目录中的 &lt;code&gt;index.md&lt;/code&gt; 是可独立阅读的页面；如果一部分内容下面还会继续长出小节，就把该层写成 &lt;code&gt;_index.md&lt;/code&gt;，让它既能写导言，也能容纳子章节。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;weight&lt;/code&gt; 不需要连续。先写 &lt;code&gt;10&lt;/code&gt;、&lt;code&gt;20&lt;/code&gt;、&lt;code&gt;30&lt;/code&gt;，以后要在前两章之间补一节时，用 &lt;code&gt;15&lt;/code&gt; 即可。这样，文件夹名字帮助人理解结构，&lt;code&gt;weight&lt;/code&gt; 则成为模板可稳定读取的阅读顺序。&lt;/p&gt;
&lt;p&gt;日期仍有价值，但它只回答“这页最后更新是什么时候”，不再替读者决定“我下一步该读什么”。这是学习内容和日常博客最重要的分界线。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>用模板把章节连成阅读路径</title>
        <link>https://ttf248.life/learning/hugo-learning-path/02-reading-template/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://ttf248.life/learning/hugo-learning-path/02-reading-template/</guid>
        <description>&lt;p&gt;内容有了顺序，还需要把顺序交给读者。否则三篇文章只是放在同一个目录里，读者仍然要靠猜测决定下一篇。&lt;/p&gt;
&lt;p&gt;学习区的页面壳做了三件小事：左侧目录树告诉读者整门课的形状；面包屑标示当前位置；页面底部给出上一章和下一章。它们都来自同一份目录与 &lt;code&gt;weight&lt;/code&gt;，不需要在正文里手动维护链接。&lt;/p&gt;
&lt;p&gt;这也是为什么课程不应直接套用博客文章页。博客文章页会强调作者、发布日期、相关文章和评论；学习页面更关心“我现在在哪一节”“本节属于什么集合”“读完之后去哪一节”。两种内容都能使用相同的 Markdown、代码高亮和数学公式，但阅读上下文不同。&lt;/p&gt;
&lt;p&gt;在这个站点里，章节树会递归读取集合下的 section 与页面：section 显示为“部分”，叶子页面显示为“章节”。前后导航只扁平化叶子章节，所以“第二部分”的导言不会挤进读者的连续阅读路线。&lt;/p&gt;
&lt;p&gt;当内容规模还只有三章时，这些设计看起来略显克制；但它避免了以后从三篇扩展到三十篇时，重新整理链接、搬迁 URL 和修改分类页的成本。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>把构建当成发布前的边界检查</title>
        <link>https://ttf248.life/learning/hugo-learning-path/03-publish-boundary/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://ttf248.life/learning/hugo-learning-path/03-publish-boundary/</guid>
        <description>&lt;p&gt;如果课程章节仍然出现在博客首页、年度归档和日常订阅里，它在读者眼中还是博客的一部分。真正的独立需要把“哪里能发现它”也设计清楚。&lt;/p&gt;
&lt;p&gt;本站把 &lt;code&gt;post&lt;/code&gt;、&lt;code&gt;notes&lt;/code&gt; 保留为博客流的主内容；学习区不加入 &lt;code&gt;mainSections&lt;/code&gt;。因此，首页的最近更新、归档和博客搜索不会自动吸入课程章节。学习区自己的根页则生成独立搜索索引，只搜索课程中的叶子章节。&lt;/p&gt;
&lt;p&gt;首页仍然可以给学习内容一个轻量入口：展示集合卡片，而不是展示某一章。卡片只说这门课叫什么、处于什么状态、已经有几章，点击后进入课程首页。这样首页保留了“我正在长期整理什么”的信息，又不会把一节技术课伪装成当天发布的博客文章。&lt;/p&gt;
&lt;p&gt;最后一步是构建。模板和样式的错误往往不会出现在 Markdown 文件里，而会在 Hugo 渲染时暴露。修改学习区后至少运行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;python&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-m&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unittest&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tests&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;test_learning_section&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;hugo&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;-renderToMemory&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;-panicOnWarning&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;前者保护内容边界和模板契约，后者编译实际页面、SCSS、脚本和输出格式。只有两者都通过，新的章节才算真正进入站点。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
