【问题标题】:Strip url to 1 word in Jekyll在 Jekyll 中将 url 剥离为 1 个单词
【发布时间】:2013-07-08 03:05:21
【问题描述】:

我正在建立一个 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%}

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

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

/blog/travel/netherlands-trip-prequesites

下到

/blog/

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

【问题讨论】:

    标签: html jekyll liquid static-site


    【解决方案1】:

    最简单的方法是使用split

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      希望这对某人有所帮助。

      【讨论】:

        【解决方案3】:

        PeterInvincible 提供的答案几乎是完美的,但是,没有必要让remove 参与其中...

        以下也将产生所需的输出

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

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

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

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

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

        编辑和更新

        上面的链接脚本现在是live/mostly-working/modular 和 auto-serving 解析的子目录,目前在相关的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 %}
        

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

        【讨论】:

          【解决方案4】:

          最简单的方法是使用

          if page.url contains
          

          示例:

          <li class="{% if page.url contains '/docs/' %}current{% endif %}">
          <a href="/docs/home/">Docs</a>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-06-29
            • 1970-01-01
            • 2012-01-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多