在Jekyll中将网址删除到1个单词

时间:2013-07-10 08:55:26

标签: html jekyll liquid static-site

我正在构建一个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/

为什么呢?所以我可以用它来检查它所属的静态页面并按顺序突出显示它。

4 个答案:

答案 0 :(得分:4)

我设法用三个过滤器来解决它:

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

page.url输出:/page/cat/title,然后replace删除正斜杠,生成:page cat titletruncatewords将字符串截断为一个单词,生成: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;围绕边缘,示例)以获取与液体语法和其他魔法相关的类似代码示例的托管示例。

编辑&amp;更新

上面链接的脚本现在是 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>