两个独立目录的11个标签列表排序



我有两个单独的目录,一个是/sights/,另一个是/sounds/。我想独立运行它们,每个都有自己的标签。

为了达到这个目的,我在eleven .js中创建了两个不同的集合:

// SIGHTS - custom collections
const nowsights = new Date();
const sightslivePosts = (post) => post.date <= nowsights;
eleventyConfig.addCollection("sights", (collection) => {
return [
...collection.getFilteredByGlob("./sights/*.njk").filter(sightslivePosts),
].reverse();
});
// SOUNDS - custom collections
const nowsounds = new Date();
const soundslivePosts = (post) => post.date <= nowsounds;
eleventyConfig.addCollection("sounds", (collection) => {
return [
...collection.getFilteredByGlob("./sounds/*.njk").filter(soundslivePosts),
].reverse();
});

然后我加了:

// generate a list of all tags collections
eleventyConfig.addCollection('tagsList', (collectionApi) => {
const tagsSet = new Set()
collectionApi.getAll().forEach((item) => {
if (!item.data.tags) return
item.data.tags
.filter((tag) => !['foo', 'bar'].includes(tag))
.forEach((tag) => tagsSet.add(tag))
})
return [...tagsSet].sort((a, b) => b.localeCompare(a))
})

我想让十一构建:

/sights/tags/(所有标记为sights);

/sounds/tags/(所有标记为声音)。

但是我得到:

/sights/tags/(所有的视觉和声音标签);

/sounds/tags/(声音和视觉的所有标签)。

还请注意,我在每个目录中都有一个索引。NJK和a标签。Njk,如下:

/景观/index.njk

---
title: Archive
pagination:
data: collections.sights
size: 4
alias: sights
---
{% for tag in collections.tagsList %}
<a href="/sights/tags/{{ tag | slug }}" class="tags">{{tag}}</a>
{% endfor %}

/景观/tags.njk

---
pagination:
data: collections
size: 1
alias: tag
addAllPagesToCollections: true
permalink: /sights/tags/{{ tag | slug }}/
---
{% for tag in collections.tagsList %}
<a href="/sights/tags/{{ tag | slug }}" class="tags">{{tag}}</a>
{% endfor %}

/声音/index.njk

---
title: Archive
pagination:
data: collections.sounds
size: 4
alias: sounds
---
{% for tag in collections.tagsList %}
<a href="/sounds/tags/{{ tag | slug }}" class="tags">{{tag}}</a>
{% endfor %}

/声音/tags.njk

---
pagination:
data: collections
size: 1
alias: tag
addAllPagesToCollections: true
permalink: /sights/tags/{{ tag | slug }}/
---
{% for tag in collections.tagsList %}
<a href="/sounds/tags/{{ tag | slug }}" class="tags">{{tag}}</a>
{% endfor %}
这个问题我实在想不出来。我是一个新手,尽管到目前为止我用11构建我的网站没有任何问题,但现在我正在尝试更复杂的东西,我发现自己被困住了。我已经无数次尝试从主要开发人员的文章中获得灵感,但我还没有找到解决方案。我还在学习。你可能已经注意到我的英语也很有限,我是意大利人。如果你能帮助我,我将不胜感激。

Raymond的跟进:

我也试了你的建议,写"data: collections .sight";在/景观/标记。Njk,和"数据:收集。声音";在/声音/标记。njk,但我得到:

Problem writing Eleventy templates: (more in DEBUG output)
> Having trouble rendering njk template ./sights/tags.njk
`TemplateContentRenderError` was thrown
> (./sights/tags.njk)
Error: slugify: string argument expected
`Template render error` was thrown:
Template render error: (./sights/tags.njk)
Error: slugify: string argument expected
at Object._prettifyError (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrclib.js:36:11)
at C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:563:19
at Template.root [as rootRenderFunc] (eval at _compile (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:633:18), <anonymous>:19:3)
at Template.render (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:552:10)
at C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modules@11tyeleventysrcEnginesNunjucks.js:236:14
at new Promise (<anonymous>)
at C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modules@11tyeleventysrcEnginesNunjucks.js:235:14
at Template.render (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modules@11tyeleventysrcTemplateContent.js:199:28)
at async Template._getLink (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modules@11tyeleventysrcTemplate.js:130:26)
at async Template.getOutputLink (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modules@11tyeleventysrcTemplate.js:161:16)
Copied 90 files / Wrote 0 files in 0.99 seconds (v0.12.1)
Watching…

=============================================================

Raymond的第二个后续:

我正在尝试您的建议,使用11eventycomputed来定义永久链接。我做了几次尝试,都失败得很惨。这一个对我来说似乎是最有意义的-考虑到我对这个函数的理解的局限性。

  1. /目标/指标。njk我做了如下修改:

---
pagination:
data: collections.sights
size: 1
alias: tag
addAllPagesToCollections: true
title: /sights/tags/
parent: "{{ tag | slug }}/"
eleventyComputed:
eleventyNavigation:
key: "{{ title }}"
parent: "{{ parent }}"
---
{% for tag in collections.sights %}
<a href="/sights/tags/{{ tag | slug }}" class="tags">{{tag}}</a>
{% endfor %}

  1. in/sounds/index。njk我做了如下修改:

---
pagination:
data: collections.sounds
size: 1
alias: tag
addAllPagesToCollections: true
title: /sounds/tags/
parent: "{{ tag | slug }}/"
eleventyComputed:
eleventyNavigation:
key: "{{ title }}"
parent: "{{ parent }}"
---
{% for tag in collections.sounds %}
<a href="/sounds/tags/{{ tag | slug }}" class="tags">{{tag}}</a>
{% endfor %}

  1. 在11 .js中我已经删除了://生成所有标签集合的列表;然后我就离开了//SIGHTS -自定义收藏"and &;//SOUNDS -自定义集合&;;

// Articles sights - custom collections
const nowsights = new Date();
const sightslivePosts = (post) => post.date <= nowsights;
eleventyConfig.addCollection("sights", (collection) => {
return [
...collection.getFilteredByGlob("./sights/*.njk").filter(sightslivePosts),
].reverse();
});
// Articles sounds - custom collections
const nowsounds = new Date();
const soundslivePosts = (post) => post.date <= nowsounds;
eleventyConfig.addCollection("sounds", (collection) => {
return [
...collection.getFilteredByGlob("./sounds/*.njk").filter(soundslivePosts),
].reverse();
});

这就是我得到的。从我所能理解的,我仍然得到相同的错误,因为我不能正确地定义永久链接,但我只是不能得到任何线索。

Problem writing Eleventy templates: (more in DEBUG output)
> Having trouble rendering njk template ./sights/tags.njk
`TemplateContentRenderError` was thrown
> (./sights/tags.njk)
Template render error: (C:UsersriccaOneDriveDocumentiWebsitesrawriddims_includespartialscomponentspost-list.njk)
Error: slugify: string argument expected
`Template render error` was thrown:
Template render error: (./sights/tags.njk)
Template render error: (C:UsersriccaOneDriveDocumentiWebsitesrawriddims_includespartialscomponentspost-list.njk)
Error: slugify: string argument expected
at Object._prettifyError (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrclib.js:36:11)
at C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:563:19
at eval (eval at _compile (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:633:18), <anonymous>:53:12)
at eval (eval at _compile (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:633:18), <anonymous>:60:12)
at C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:571:11
at Template.root [as rootRenderFunc] (eval at _compile (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:633:18), <anonymous>:75:3)
at Template.render (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:552:10)
at eval (eval at _compile (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:633:18), <anonymous>:59:10)
at fn (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesa-sync-waterfallindex.js:26:24)
at C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesa-sync-waterfallindex.js:66:22
Copied 90 files / Wrote 0 files in 0.69 seconds (v0.12.1)
Watching…
[Browsersync] Reloading Browsers...

=============================================================

Raymond第三次跟进:

我用不同的变化做了更多的尝试,都失败了。它们都返回相同的模板错误"_includespartialscomponentspost-list.njk"如下-除了下面列出的第二次尝试
`TemplateContentRenderError` was thrown
> (./sights/tags.njk)
Template render error: (C:UsersriccaOneDriveDocumentiWebsitesrawriddims_includespartialscomponentspost-list.njk)
Error: slugify: string argument expected

这里有几个不同的错误:

  1. 已尝试/sounds/tags。NJK和/景点/标签。njk(这只是/sights/的例子)

---
pagination:
data: collections.sights
size: 1
alias: tag
addAllPagesToCollections: true
url: /sights/tags/{{ tag | slug }}/
eleventyComputed:
key: "{{ url }}"
---

:

Problem writing Eleventy templates: (more in DEBUG output)
> Having trouble rendering njk template ./sights/tags.njk
`TemplateContentRenderError` was thrown
> (./sights/tags.njk)
Template render error: (C:UsersriccaOneDriveDocumentiWebsitesrawriddims_includespartialscomponentspost-list.njk)
Error: slugify: string argument expected
`Template render error` was thrown:
Template render error: (./sights/tags.njk)
Template render error: (C:UsersriccaOneDriveDocumentiWebsitesrawriddims_includespartialscomponentspost-list.njk)
Error: slugify: string argument expected
at Object._prettifyError (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrclib.js:36:11)
at C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:563:19
at eval (eval at _compile (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:633:18), <anonymous>:53:12)
at eval (eval at _compile (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:633:18), <anonymous>:60:12)
at C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:571:11
at Template.root [as rootRenderFunc] (eval at _compile (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:633:18), <anonymous>:75:3)
at Template.render (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:552:10)
at eval (eval at _compile (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:633:18), <anonymous>:59:10)
at fn (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesa-sync-waterfallindex.js:26:24)
at C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesa-sync-waterfallindex.js:66:22
Copied 90 files / Wrote 0 files in 2.71 seconds (v0.12.1)
Watching…
[Browsersync] Reloading Browsers...

  1. 尝试/sounds/tags。NJK和/景点/标签。njk(这只是/sights/的例子)

---
pagination:
data: collections.sights
size: 1
alias: tag
addAllPagesToCollections: true
permalink: /sights/tags/{{ url }}/
eleventyComputed:
url: "{{ tag | slug }}"
---

:

Problem writing Eleventy templates: (more in DEBUG output)
> Having trouble rendering njk template ./sights/tags.njk
`TemplateContentRenderError` was thrown
> (./sights/tags.njk)
Error: slugify: string argument expected
`Template render error` was thrown:
Template render error: (./sights/tags.njk)
Error: slugify: string argument expected
at Object._prettifyError (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrclib.js:36:11)
at C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:563:19
at Template.root [as rootRenderFunc] (eval at _compile (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:633:18), <anonymous>:17:3)
at Template.render (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modulesnunjuckssrcenvironment.js:552:10)
at C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modules@11tyeleventysrcEnginesNunjucks.js:236:14
at new Promise (<anonymous>)
at C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modules@11tyeleventysrcEnginesNunjucks.js:235:14
at Template.render (C:UsersriccaOneDriveDocumentiWebsitesrawriddimsnode_modules@11tyeleventysrcTemplateContent.js:199:28)
at runMicrotasks (<anonymous>)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
Copied 90 files / Wrote 0 files in 0.57 seconds (v0.12.1)
Watching…
[Browsersync] Reloading Browsers...

"但是通过下面的代码,我将在每个目录中获得两个集合中所有标签的唯一列表。">

你在这里的意思有点难以理解,但问题可能是这样的:

pagination:
data: collections

应该是collections.something,其中something是视觉或声音。

关于第二个问题,分页支持reverse值,记录在这里(https://www.11ty.dev/docs/pagination/#reverse-the-data)。它看起来像这样:

---
pagination:
data: testdata
size: 2
reverse: true
testdata:
- item1
- item2
- item3
- item4
---

最新更新