Jekyll分类页侧边栏:按需加载自定义热门帖子列表求助
问题解决:分类页侧边栏加载对应热门帖子文件
需求说明
在博客侧边栏实现:针对每个分类页,若_includes/blog/feat-posts/目录下存在与分类名同名的热门帖子文件(如分类名为Java则对应Java.html),则加载该文件展示内容;若不存在,则显示默认的热门帖子链接。
原代码问题分析
原代码无法正常运行的核心问题有三点:
- 错误遍历范围:
site.static_files仅包含静态资源文件,_includes下的模板文件不在此范围内,因此遍历无法找到目标文件。 - 变量解析失效:条件判断中直接将
{{page.autopages.display_name}}写入固定字符串,Liquid不会解析该变量,导致路径始终无法匹配实际文件。 - Include语法错误:嵌套的
{{}}写法不符合Liquid模板规则,会引发解析失败。
修正后的代码
<h3>POPULAR POSTS</h3> {% capture feat_post_path %}blog/feat-posts/{{ page.autopages.display_name }}.html{% endcapture %} {% if feat_post_path | file_exists %} {% include {{ feat_post_path }} %} {% else %} <p><a href="{{ site.baseurl }}/blog/filename1">Filename1 Text</a></p> <p><a href="{{ site.baseurl }}/blog/filename2">Filename2 Text</a></p> {% endif %}
代码说明
- 路径拼接:通过
{% capture %}将分类名与固定目录拼接成目标文件的相对路径(include标签默认从_includes目录查找,因此无需写全路径)。 - 存在性判断:使用
file_exists过滤器检查拼接后的路径是否存在对应文件(该过滤器支持Jekyll 3.5及以上版本)。 - 内容加载逻辑:若文件存在则加载对应模板;否则渲染默认的热门帖子链接。
内容的提问来源于stack exchange,提问作者user973542
相关产品推荐
相关产品推荐

