【问题标题】:eleventy: generating each category in a permalink for sitemap十一:在站点地图的永久链接中生成每个类别
【发布时间】:2023-04-06 00:58:01
【问题描述】:

我使用Skeleventy 来生成我的静态网站。

那里的 Njk 模板使用 collections.all 为所有可能的页面生成站点地图,就像这样

---
permalink: sitemap.xml
hidden: true
---
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{%- for page in collections.all %}
{%- if not page.data.hidden %}
    <url>
        <loc>{{ site.url }}{{ page.url | url }}</loc>
        <lastmod>{{ page.date | htmlDateDisplay }}</lastmod>
    </url>
{%- endif %}
{%- endfor %}

resulting sitemap 中的一个输出是

https://skeleventy.netlify.app/category/all/

这是所有可能页面的集合 - 有点乱。

而不是“分类所有”,最好是谷歌索引每个类别,例如

<url>
<loc>https://skeleventy.netlify.app/category/software/</loc>
<lastmod>2020-7-20</lastmod>
</url>
<url>
<loc>https://skeleventy.netlify.app/category/writing/</loc>
<lastmod>2020-7-20</lastmod>
</url>

但是我怎样才能编辑那个 njk 模板以便它 - 捕获和输出站点地图中的不同类别? - 不包括类别/全部 - 保留其他重要页面,如主页、每篇博文等。

【问题讨论】:

    标签: static-site nunjucks xml-sitemap jamstack eleventy


    【解决方案1】:

    我想我已经成功了。我已经在我的机器上运行了这个,如果你想要一份副本,请联系。我通常不使用 Nunjucks,所以请原谅任何愚蠢的错误。我对 sitemap.njk 所做的第一个 mod 是隐藏 collections.all:

    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    {%- for page in collections.all %}
    {%- if not page.data.hidden %}
        {%- if page.url !== "/category/all/" %}
        <url>
            <loc>{{ site.url }}{{ page.url | url }}</loc>
            <lastmod>{{ page.date | htmlDateDisplay }}</lastmod>
        </url>
        {% endif %}
    {%- endif %}
    {%- endfor %}
    

    有点老套,但有效。接下来,我需要一种方法来获取博客类别页面。我查看了tags.njk。根据我在那里看到的内容,我为 .eleventy.js 命名类别编写了一个过滤器。我不认为这是一个好名字:

    eleventyConfig.addFilter("categories", function(collections) {
          let categories = Object.keys(collections).filter(c => c !== 'all');
          return categories;
    });
    

    回到站点地图,然后我这样做了:

    {%- set cats = collections | categories %}
    {%- for cat in cats %}
        {% set newestDate = collections[cat] | getLatestDate %}
        <url>
            <loc>{{ site.url }}/category/{{ cat }}/</loc>
            <lastmod>{{ newestDate | htmlDateDisplay }}</lastmod>
        </url>
    {%- endfor %}
    </urlset>
    

    注意getLatestDate 过滤器,它是这样定义的:

    eleventyConfig.addFilter("getLatestDate", function(collection) {
        console.log('running getLatestDate');
        return collection[0].date;
    });
    

    它似乎运作良好。这是我的输出:

    <?xml version="1.0" encoding="utf-8"?>
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
        <url>
            <loc>https://skeleventy.netlify.app/blog/post-1/</loc>
            <lastmod>2020-8-26</lastmod>
        </url>
        
        <url>
            <loc>https://skeleventy.netlify.app/blog/post-2/</loc>
            <lastmod>2020-8-26</lastmod>
        </url>
        
        <url>
            <loc>https://skeleventy.netlify.app/blog/post-3/</loc>
            <lastmod>2020-8-26</lastmod>
        </url>
        
        <url>
            <loc>https://skeleventy.netlify.app/about/</loc>
            <lastmod>2020-8-26</lastmod>
        </url>
        
        <url>
            <loc>https://skeleventy.netlify.app/blog/</loc>
            <lastmod>2020-8-26</lastmod>
        </url>
        
        <url>
            <loc>https://skeleventy.netlify.app/contact/</loc>
            <lastmod>2020-8-26</lastmod>
        </url>
        
        <url>
            <loc>https://skeleventy.netlify.app/</loc>
            <lastmod>2020-8-26</lastmod>
        </url>
        
        
        <url>
            <loc>https://skeleventy.netlify.app/category/blog/</loc>
            <lastmod>2020-8-26</lastmod>
        </url>
        
        <url>
            <loc>https://skeleventy.netlify.app/category/business/</loc>
            <lastmod>2020-8-26</lastmod>
        </url>
        
        <url>
            <loc>https://skeleventy.netlify.app/category/digital/</loc>
            <lastmod>2020-8-26</lastmod>
        </url>
        
        <url>
            <loc>https://skeleventy.netlify.app/category/health/</loc>
            <lastmod>2020-8-26</lastmod>
        </url>
    </urlset>
    

    如果您想要完整的副本,请与我联系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 2017-05-06
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      相关资源
      最近更新 更多