7

我正在建立一个 Jekyll 博客,我遇到了永久链接的问题。

我的博客帖子的永久链接在 _config.yml 中设置如下:

permalink: /:page/:categories/:title

导航到博客文章时,它的输出如下:

http://localhost:4000/blog/travel/netherlands-trip-prequesites/

我在网站上有一些静态页面:博客、旅行

变量page.url输出此 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%}

导航到静态页面时效果很好,但是当我单击博客文章时,它不会突出显示正确的静态页面。(例如:如果我导航到带有 url 的博客文章,/blog/smth/title它应该会在我的导航中自动突出显示“博客”。当我导航到/travel/smth/title它时,应该突出显示“旅行”)

我想做的是将page.url的输出剥离到它的第一部分。例如,我想提供以下输出

/blog/travel/netherlands-trip-prequesites

向下

/blog/

为什么?所以我可以用它来检查它属于哪个静态页面并相应地突出显示它。

4

4 回答 4

7

最简单的方法是使用split

{{ page.url | split:'/' | first }}

这将为您提供直到第一个/字符的 URL 内容。

于 2013-07-23T03:22:20.060 回答
4

我设法用三个过滤器解决了这个问题:

{{ page.url | replace:'/',' ' | truncatewords: 1 | remove:'...' }}

page.url输出:/page/cat/title,然后replace删除产生的正斜杠:page cat titletruncatewords将字符串截断为一个单词,产生:(page...出于某种原因,在剩余单词之后插入了三个点)。毕竟,我只需要删除那些点remove和瞧,我的最后一个字符串:page.

希望这可以帮助某人。

于 2013-07-10T09:57:06.407 回答
4

PeterInvincible提供的答案几乎是完美的,但是,没有必要让管道remove参与进来......

以下也将产生所需的输出

{{ page.url | replace:'/',' ' | truncatewords: 1,"" }}

并将其保存到变量使用capture重定向

 {{ capture url_base }}{{ page.url | replace:'/',' ' | truncatewords: 1,"" }}{{ endcapture }}

可以通过{{url_base}}其他处理调用或与其他处理调用混合调用。

page.dir如果您不使用永久链接设置进行布局,对于文件路径而不是 URL也可以很好地工作,请检查gh-pages分支(特别_includes/nav_gen.html是功能性,尽管边缘粗糙,示例)以获取与液体语法和其他相关的类似代码示例的托管示例魔法。

编辑和更新

上面的链接脚本现在是当前在相关项目站点上查看的实时/mostly-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 %}

上面的注释只是推测,未经测试,并且可能比测试和公开托管的脚本更多错误......换句话说就是灵感。

于 2017-01-02T14:40:45.073 回答
1

最简单的方法是使用

if page.url contains

例子:

<li class="{% if page.url contains '/docs/' %}current{% endif %}">
<a href="/docs/home/">Docs</a>
于 2017-05-20T04:51:26.800 回答