创建新节点的小部件对话框 - Adob​​e CQ5

问题描述:

我试图为要求各种细节的页面创建编辑小部件,然后将这些细节存储为新创建的节点的属性。创建新节点的小部件对话框 - Adob​​e CQ5

因此,例如: 让 型号 里程

,我想那些存储在/内容/汽车或类似的东西父节点下的一个节点。

如何获得一个小部件在/ content/cars下创建一个新节点并在那里存储这些属性?

我必须将数据发送到我创建的servlet吗?或者有选择来启用它?

你可能想要做的是在你想要创建节点的路径的包含页面中包含一个组件。例如,如果您有一个页面/内容/汽车,并且您想在/ content/cars/jcr:content/chevy下创建一个雪佛兰节点,那么您将包含具有以下片段的组件:

<cq:include path="chevy" resourceType="myapp/components/manufacturer" />

这将包括内容,并使其和允许它与位于/应用/ MyApp的/组件/制造商的部件进行编辑。

如果你愿意,你甚至可以在节点处于一个绝对路径,例如,如果要引用在/内容/数据/汽车/另一页上雪佛兰的内容,你可以使用:

<cq:include path="/content/data/cars/chevy" resourceType="myapp/components/manufacturer" />

基于从Adobe提供的cheatsheet:

http://dev.day.com/content/ddc/blog/2008/07/cheatsheet/_jcr_content/par/download/file.res/cheatsheet.pdf

默认吊带POST的servlet认识什么JCR特性通过检查inpu的name属性更新t标签包含在ExtJS对话框中。要配置像文本字段或下拉字段这样的小部件来定位和更新特定属性,您需要在小部件定义中指定该属性的名称。例如,如果您使用XML文件在/ content/cars中定义页面对话框,并且希望在那里存在让用户将模型,制作和年份存储到jcr:content节点的小组件,汽车页面。您的一个关联的对话框定义将包含看起来像节点:

<make 
    jcr:primaryType="cq:Widget" 
    xtype="textfield" 
    name="./make"/> 
<model 
    jcr:primaryType="cq:Widget" 
    xtype="textfield" 
    name="./model"/> 
<year 
    jcr:primaryType="cq:Widget" 
    xtype="textfield" 
    name="./year"/> 

要改变小工具类型,你会调整的xtype属性并更改属性来定位你会调整属性。请注意,它与调用对话框的页面/组件的内容节点相关(在本例中,相对于/ content/cars/jcr:内容)。

又如:说你要拍一个属性的叫“化妆”的值存储像/内容/汽车/ JCR的节点上:内容/品牌,那么你的定义是这样的:

<make 
    jcr:primaryType="cq:Widget" 
    xtype="textfield" 
    name="./brands/make"/> 

有关可用xtypes参考,请查阅: http://dev.day.com/docs/en/cq/current/widgets-api/index.html

试试这个:

添加这个js函数到您的网页

function doOpenDlg(url, path) { 
    var d = CQ.WCM.getDialog(url); 
    var reloadPage = true; 
    if(d) { 
     if(reloadPage) { 
      d.success = function(form, action) { 
       CQ.Util.reload(CQ.WCM.getContentWindow()); 
      }; 
     } 
     d.show(); 
     d.loadContent(path); 
    } 
} 

然后创建一个类似文件的对话框。在本例:

/apps/myapp/components/page/mypage/myxmlfile.xml

那么你就可以打开一个对话框,匹配该文件与:

<input type="button" value="Open my dialog" style="font-size: 14px;font-weight: bold;" 
      onclick="doOpenDlg('/apps/myapp/components/page/mypage/myxmlfile.infinity.json', '<%=currentNode.getPath() %>');" /> 

这一点,您的对话框数据将被保存在currentNode中,但是你可以放置任何你想要的路径。