链接到Magnolia CMS中的自定义内容类型



我为事件创建了一个自定义内容类型,并且可以在页面中列出活动事件及其摘要。我想为每个事件创建一个详细信息页面,目前为每个事件生成的链接指向事件名称,就好像它是一个单独的页面。如何创建一个名为view-event的页面来捕获事件名称并显示其内容

<ul>
[#assign events = cmsfn.contentByPath("/", "events") ]
[#list cmsfn.children(events, "ev:event") as event ]
[#assign active = event.isActive!false]
[#if active]
<li>${event.name} - <a href="${cmsfn.link(event)}">details</a></li>
[/#if]
[/#list]
</ul>

我不认为这是可行的。如果要链接到显示事件的页面,则必须创建这样的页面。然后,您可以通过选择器、虚拟子页面或请求参数传递页面应该显示的事件。例如,请查看如何显示旅游演示行程或目的地。这是相同的概念。

在Travel演示中,内容保存在自定义类型中(分别为tour或destination)。然而,如果你打开pages app,你会看到在/travel website下,有一个页面是旅游(/travel/tour),一个是目的地(/travel/destination)。在演示中,选择器用于传递有关您想要显示的旅行或目的地的信息。您可以通过观察顶层导航看到它指向/travel/tour~active~.html,其中~之间的部分是选择器,tour页面的页面模板随后使用该选择器来解析要显示的具体内容。

您可以使用虚拟子页面和虚拟uri映射构建相同的内容,但最终需要有一个页面模板和关联页面,该页面模板和关联页面能够理解您传入的信息以及如何呈现自定义内容类型。仅传递链接到自定义内容类型项将不会呈现页面。

或者,如果您开发SPA,您也可以通过交付端点请求自定义内容类型并以JSON形式获得它,但随后由您的SPA负责将JSON呈现为html,以便浏览器呈现给用户。

在您粘贴到问题中的元素中,您可以直接列出所有事件及其详细信息。但是,如果您想通过超链接指向事件的详细信息,并让该页面显示创建页面和模板所需的内容。例如,在你的网站树中创建一个名为/view-event的页面。创建名为view-event的模板,并将其分配给页面。然后在事件概述页面中更改上面的代码片段,使其链接到视图事件,看起来像<a href="/view-event~${event.name}~">details</a>。通过这种方式,您可以获得传递到view-event页面的事件名称(或id或您需要的内容),并能够通过state.selector在那里检索它,并使view-event页面呈现所需的内容。更多关于Magnolia文档

最新更新