【问题标题】:Eleventy shortcodes in data content not rendering数据内容中的 11 个简码未呈现
【发布时间】:2021-01-01 23:21:45
【问题描述】:

我需要能够在使用分页从全局数据返回的内容中使用自定义简码。

为了说明我想要做什么,请考虑以下数据源:

./site/data/article.js

module.exports = () => {
  return [
    {
      "title": "Page 1",
      "description": "Description for page 1",
      "permalink": "/sample/page1",
      "content": `## Sample Page 1
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
    Nam dignissim. 
    
    {% jumpto %}

    Cras faucibus at mauris 
    varius imperdiet. `
    },
    {
      "title": "Page 2",
      "description": "Description for page 2",
      "permalink": "/sample/page2",
      "content": `## Sample Page 2
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
    Nam dignissim. 
    
    {% jumpto %}

    Cras faucibus at mauris 
    varius imperdiet. `
    },
  ]
}

** 注意 ** 注意上面代码中{% jumpto %} 的使用

这里是文章数据的模板...

./site/articles.njk

---
pagination:
  data: articles
  size: 1
  alias: article
  addAllPagesToCollections: true
layout: article
permalink: "{{ article.permalink }}/"
templateEngineOverride: md, njk
eleventyComputed:
  title: "{{ article.title }}"
  description: "{{ article.description }}"
---

{{ article.content }}

渲染时,它不会处理从article.content 返回的{% jumpto %} 短代码。

有没有办法将article.content 注入到模板中,以便将其视为模板代码?

【问题讨论】:

    标签: shortcode eleventy


    【解决方案1】:

    我相信目前不支持通过简码插入的内容中的嵌套简码。如果 CMS 输入没有像当前默认值那样正确转义,这样的事情可能会导致奇怪的无限递归,并且会增加 XSS 或注入漏洞的可能性。


    要做你想做的事,可以添加一个custom filter 并在你的 njk 文件中使用它来对内容进行后处理。

    {{ article.content | processNestedShortcodes}}
    

    或者,如果您的实际用例与您上面提供的示例代码一样简单,则将您的内容输入分成两部分会更简单,并将您的 njk 模板定义为:

    {{ article.content1 }}
    
    {% jumpto %}
    
    {{ article.content2 }}
    
    

    【讨论】:

    • 遗憾的是,我的用例并不像示例那么简单。我所有的内容都存储在与 11ty 项目分开的数据库中。我也无法像您那样分解内容,因为内容已经创建(数千个文件)并且大量散布了短代码。 @LukeStorry
    • 创建过滤器甚至我自己的标签的概念仍然是可能的,但没有很好的记录。理想情况下,我想在 nunjucks 中使用 renderString 功能来完成此任务,但它需要我以某种方式连接到 111 环境的整体状态才能真正工作(例如注册的短代码、过滤器等)
    • 您需要继续引用该数据库吗?一种方法是运行数据的第一个 110 通道以输出 _site,然后将其复制到另一个 110 项目作为输入文件,最终获得输出。可能是一次性构建的干净解决方案。
    • 这不是一个坏主意。我有一个类似的想法,使用 gulp 将内容拉入构建目录,然后与项目合并......并在组合构建目录上调用十一。我的优势是源内容都是带有 nunjuck 短代码的降价。
    猜你喜欢
    • 2014-01-02
    • 1970-01-01
    • 2020-03-02
    • 2019-01-19
    • 2021-08-12
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多