Magnolia CMS 中的节点创建

Posted

技术标签:

【中文标题】Magnolia CMS 中的节点创建【英文标题】:Node Creation in Magnolia CMS 【发布时间】:2015-04-15 08:27:42 【问题描述】:

我正在从事一个已经开始的 Magnolia CMS 项目。一开始,我阅读了文档并关注了他们在网络上的学院课程。之后,我被委托构建一个新模块。最简单的方法是复制现有的。我这样做了,但没有按预期工作。我修改了路径,但仍然无法按预期工作。所以我发现我必须创建一个新模块必须指向的节点。我不知道如何创建[mgnl:content]。有人有这方面的经验,可以帮帮我吗?提前致谢!

【问题讨论】:

【参考方案1】:

您可以通过添加以下代码来创建新的节点类型:

<?xml version="1.0" encoding="UTF-8"?>
<nodeTypes xmlns:mgnl="http://www.magnolia.info/jcr/mgnl">

  <nodeType name="mgnl:navitem" isMixin="false" hasOrderableChildNodes="true" primaryItemName="">
    <supertypes>
      <supertype>mgnl:content</supertype>
    </supertypes>
  </nodeType>
</nodeTypes>

这应该在:

mgnl-root/mgnl-module-name/resources/mgnl-nodetypes/navitem.xml

【讨论】:

【参考方案2】:

要创建一个节点,您只需调用MgnlContext.getJCRSession("workspace name").getRootNode().addNode("path/to/my/node", "mgnl:content"),但这不是您想要在这里做的。

您需要做的就是正确编写模块描述符并将其放置在模块结构中的正确位置。在documentation 中阅读有关它的更多信息。

您帖子中的另一个误解是认为复制模块是制作模块的最简单方法。这是完全错误的。制作模块的最佳方式是使用 maven archetype mvn archetype:generate -DarchetypeCatalog=https://nexus.magnolia-cms.com/content/groups/public/ 在documentation 中再次有更多解释。

【讨论】:

Jan,谢谢你的及时回答,但由于我的无知,我瞎了眼。我试图了解它做了什么并包括我需要的东西。一个模块就完成了。它有子应用程序,每个子应用程序都有路径指向的 [mgnl:content]。我需要为新的子应用创建一个 [mgnl:content] 来指向。我很感激任何帮助。非常感谢! 听起来更像是在开发一个应用而不是模块(两者不一样,一个模块可以有多个应用)。甚至不是完整的应用程序,而是现有应用程序中的子应用程序。为此,只需通过 Magnolia UI 创建节点并配置所有必要的属性和子节点就足够了。也许您想通过编写完整应用程序的教程来熟悉应用程序开发的不同部分。您可以在documentation.magnolia-cms.com/display/DOCS/… 找到这样的教程 我按照教程的部分:以下是创建自己的内容应用程序的方法: 选项 1:复制应用程序 将现有内容应用程序的配置节点复制到新应用程序中。您可以复制 Magnolia 的本地应用程序之一,例如联系人。将复制的配置节点导出为 XML。在文本编辑器中打开 XML。搜索并替换项目名称。例如,如果您的应用管理的是苹果而不是橙子,请将苹果替换为橙子。将 XML 导入回 Magnolia。在模块描述符中注册一个新的工作区并创建一个新的节点类型。我无法注册应用程序。 是的,除非您还执行页面上提到的最后一步 - “在模块描述符中注册新工作区并创建新节点类型”,否则这将不起作用。 W/o that, no node type is registered and app is not created. 也许,只是也许,如果您安装了 groovy 模块,那么使用weblogs.java.net/blog/rah003/archive/2014/09/28/… 中描述的脚本来创建应用程序就足够了。或者,如果您使用的是最新版本的 Magnolia,我认为脚本也直接包含在 groovy 模块的示例中。【参考方案3】:

这是我对节点类型的定义:

<nodeTypes
    xmlns:rep="internal"
    xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
    xmlns:mix="http://www.jcp.org/jcr/mix/1.0"
    xmlns:mgnl="http://www.magnolia.info/jcr/mgnl"
    xmlns:jcr="http://www.jcp.org/jcr/1.0">
  <!-- custom node types -->
  <nodeType name="mgnl:(YOUR NODETYPE´S NAME)" isMixin="false" hasOrderableChildNodes="true" primaryItemName="">
    <supertypes>
      <supertype>mgnl:content</supertype>
    </supertypes>
  </nodeType>
</nodeTypes>

您文件夹中的此定义:\src\main\resources\mgnl-nodetypes

【讨论】:

以上是关于Magnolia CMS 中的节点创建的主要内容,如果未能解决你的问题,请参考以下文章

Magnolia CMS - 用于创建模板的模块创建技术

Magnolia CMS:继承的组件定制

在创建 Magnolia CMS 时访问当前表单

JCRExportCommand execute() 在 magnolia cms 中抛出异常错误

使用 Magnolia CMS 创建自定义类型的内容?

JcrExportCommand 过滤器以排除 magnolia cms 中的“mgnl:page”