我正在构建一个Jekyll博客,我遇到了永久链接的问题。
我对博客帖子的永久链接设置如下 _config.yml:
permalink: /:page/:categories/:title
导航到博客文章时输出如下:
http://localhost:4000/blog/travel/netherlands-trip-prequesites/
我在网站上有一些静态页面:Blog,Travel
变量page.url
输出此网址:/blog/travel/netherlands-trip-prequesites
我的导航栏用于突出显示当前页面的代码(给它一个“活动”类):
{% assign url = page.url|remove:'index.html' %}
{% for nav in site.navigation %}
{% if nav.href == url %}
<li class="active"><a href="{{nav.href}}">{{nav.name}}</a></li>
{% else %}
<li><a href="{{nav.href}}">{{nav.name}}</a></li>
{% endif %}
{%endfor%}
导航到静态页面时效果很好,但是当我点击博客文章时,它没有突出显示正确的静态页面。 (例如:如果我导航到带有网址/blog/smth/title
的博客文章,它应该会在我的导航中自动突出显示“博客”。当我导航到/travel/smth/title
时,它应突出显示“旅行”)
我想要做的是将 page.url 的输出删除到它的第一部分。例如,我想要提供以下输出
/blog/travel/netherlands-trip-prequesites
到
/blog/
为什么呢?所以我可以用它来检查它所属的静态页面并按顺序突出显示它。
答案 0 :(得分:4)
我设法用三个过滤器来解决它:
{{ page.url | replace:'/',' ' | truncatewords: 1 | remove:'...' }}
page.url
输出:/page/cat/title
,然后replace
删除正斜杠,生成:page cat title
。 truncatewords
将字符串截断为一个单词,生成:page...
(由于某种原因,在剩余单词后插入三个点)。毕竟,我只需要用remove
和voilá删除这些点,我的最后一个字符串:page
。
希望这有助于某人。
答案 1 :(得分:4)
最简单的方法是使用split
:
{{ page.url | split:'/' | first }}
这将为您提供最高为/
个字符的网址内容。
答案 2 :(得分:3)
PeterInvincible提供的答案几乎是完美的,但是,没有必要让remove
涉及...... {/ p>
以下也将产生所需的输出
{{ page.url | replace:'/',' ' | truncatewords: 1,"" }}
并将其保存为变量使用capture
重定向
{{ capture url_base }}{{ page.url | replace:'/',' ' | truncatewords: 1,"" }}{{ endcapture }}
可以通过{{url_base}}
调用或与其他处理调用混合使用。
对于文件路径而不是网址page.dir
如果你没有使用永久链接设置进行布局,请检查gh-pages
branch(特别是_includes/nav_gen.html
的功能,虽然粗糙&# 39;围绕边缘,示例)以获取与液体语法和其他魔法相关的类似代码示例的托管示例。
上面链接的脚本现在是 live / most-working / modular和自动提供解析的子目录,目前在相关的https://s0ands0.github.io/Perinoid_Pipes/
项目站点查看,提供递归解析目录的示例。几乎任何主题的包含和修改都应该是可能的,只需检查顶部的注释部分,查看可能在包含调用中传递的当前已识别的命令...在包含和模块化的注释中,这里是如何打开上面的示例代码目录解析为函数
{% comment %}
# Save this to _include/dir_path_by_numbers.html
# import with the following assigning arguments if needed
# {% include dir_path_by_numbers.html directory_argument_path="blog" directory_argument_depth=1 %}
{% endcomment %}
{% assign default_arg_directory_path = page.url %}
{% assign default_arg_directory_depth = 1 %}
{% if directory_argument_path %}
{% assign directory_to_inspect = directory_argument_path %}
{% else %}
{% assign directory_to_inspect = default_arg_directory_path %}
{% endif %}
{% if directory_argument_depth %}
{% assign directory_to_inspect_depth = directory_argument_path %}
{% else %}
{% assign directory_to_inspect_depth = default_arg_directory_depth %}
{% endif %}
{% comment %}
# Defaults read and assigned now to output results
{% endcomment %}
{{ directory_to_inspect_depth | replace:'/',' ' | truncatewords: directory_to_inspect_depth,"" | remove_first: '/' | replace:' ','/' }}
上面的应输出任何所需大小的目录路径长度,如前所示,或者如果有冒险尝试,请尝试下面显示的内容;虽然对于循环和递归功能,请查看链接脚本,了解我如何处理堆栈大小限制。
{% capture dir_sub_path %}{{include dir_path_by_numbers.html directory_argument_path="blog" directory_argument_depth=1}}{% endcapture %}
上面的注意事项只是猜测,未经测试,可能比公开测试和托管的脚本更多的错误......换句话说就是灵感。
答案 3 :(得分:0)
最简单的方法是使用
if page.url contains
示例:
<li class="{% if page.url contains '/docs/' %}current{% endif %}">
<a href="/docs/home/">Docs</a>