数据内容中的短代码不呈现

问题描述

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

为说明我要执行的操作,请考虑以下数据源:

./ 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,]
}

**注意**请注意,上面的代码中使用了{% 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 }}

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

是否有某种方法可以将article.content注入模板,以便将其视为模板代码

解决方法

我认为,目前不支持通过短代码本身插入的内容中的

嵌套短代码。这样的事情可能导致奇怪的无限递归,并且如果CMS输入没有像当前默认值那样正确地转义,则可能会增加XSS或注入漏洞的可能性。


要执行所需的操作,可以添加一个custom filter并将其用于njk文件中以对内容进行后处理。

{{ article.content1 }}

{% jumpto %}

{{ article.content2 }}


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

protected AmtAppender(String name,Filter filter,Layout<? extends Serializable> layout,boolean ignoreExceptions) {
    super(name,filter,layout,ignoreExceptions);
    // TODO Auto-generated constructor stub
}