2012-09-07 44 views
0

我試圖爲要求各種細節的頁面創建編輯小部件,然後將這些細節存儲爲新創建的節點的屬性。創建新節點的小部件對話框 - Adob​​e CQ5

因此,例如: 讓 型號 里程

,我想那些存儲在/內容/汽車或類似的東西父節點下的一個節點。

如何獲得一個小部件在/ content/cars下創建一個新節點並在那裏存儲這些屬性?

我必須將數據發送到我創建的servlet嗎?或者有選擇來啓用它?

回答

2

你可能想要做的是在你想要創建節點的路徑的包含頁面中包含一個組件。例如,如果您有一個頁面/內容/汽車,並且您想在/ 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" />

1

基於從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

0

試試這個:

添加這個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中,但是你可以放置任何你想要的路徑。