木兰从自由文本的儿童页面获取内容

时间:2019-07-24 12:18:46

标签: magnolia

我有一个树状结构,并希望将其用作基于类别的常见问题解答。 我知道有一个分类模块,但是我想使用文件树结构。

所以我有以下内容:

faq
  - first category
    - first entry
    - second entry
  - second category
    - first entry
  ...

每个页面都有一个带有标题和描述的对话框。那就是我要为每个页面获取的内容。

所以目前我得到当前页面,并遍历子页面

[#local currentPage=cmsfn.page(content) /]
[#local pageChildren = cmsfn.children(currentPage,  "mgnl:page")]

[#list pageChildren as page ]
{
    "category": "${page.title}",

    [#local pageContent = cmsfn.contentById(page)]
    "headline": "${pageContent.headline!?json_string}",
    "description": "${pageContent.description!?json_string}"
 } [#if page?has_next],[/#if]
 [/#list]

现在,我获得每个条目的类别(页面标题)。没关系。但是标题和说明未填写。

我知道,page是一个节点。 page是页面,可以访问每个页面属性(标题,模板)。

我没有找到任何东西可以通过cmsfn从页面中获取内容。 contentByIdcontentByPathpage()都有一些方法来获取内容页面。

但是我如何从页面获取内容?

更新

我迈出了一大步。 我从contentByPath获取pageContent,并在此处使用页面的路径。 之后,我将其转换为JCR节点。

[#local pageContent = cmsfn.contentByPath(page.@path)]
[#local jcr = cmsfn.asJCRNode(pageContent)]

现在转储显示我的jcr。

Node (/my-website/faqs/kategorie1/question1)
  footer = Node (/my-website/faqs/kategorie1/question1/footer)
    mgnl:activationStatus = true (Boolean)
    [...]
    jcr:uuid = "a09d13da-3549-4b2a-8609-3b635e6f1c59" (String)
  layers = Node (/my-website/faqs/kategorie1/question1/layers)
    mgnl:activationStatus = true (Boolean)
    [...]
    jcr:uuid = "08b52c64-7327-4300-884c-047e42f560d0" (String)
  overlays = Node (/my-website/faqs/kategorie1/question1/overlays)
    mgnl:activationStatus = true (Boolean)
    [...]
    jcr:uuid = "9a78479b-0d25-4acf-9554-b9d626a7cc61" (String)
  content = Node (/my-website/faqs/kategorie1/question1/content)
    0 = Node (/my-website/faqs/kategorie1/question1/content/0)
      description = "something" (String)
      headline = "my example" (String)
      mgnl:activationStatus = true (Boolean)
      mgnl:created = Jul 24, 2019 11:20:40 AM UTC (Date)

我真正需要的是内容节点,描述和标题。

但是如何访问它,是否有更好的方法来获取此内容?

1 个答案:

答案 0 :(得分:0)

您已经获得页面的标题,并且页面节点上的任何其他属性的行为与title属性相同。因此,page.description将为您提供给定页面节点/对象的description属性。

我们还要弄清楚#contentById()方法的作用。它负责通过其标识符获取节点并返回ContentMap,例如

ContentMap (think as a Node object but mere Map) contentById(String identifierOfRequestedNode)

更新:

通过contentById方法,您可以直接访问描述和名称,而无需将其转换为Node对象。

例如

pageContent.description
pageContent.name

希望有帮助,

干杯