2015-06-18 23 views
1

我的目標是使用所提供的REST API在合流wiki中創建一個包含表格的頁面,該頁面創建後,可以使用WYSIWYG編輯器輕鬆編輯。使用Confluence REST API發佈生成的html表(PHP)而無需獲取http 400狀態代碼?

我已經分解了文本,並將其放入不同的類別中放入一個數組數組中,然後生成一個html表(字符串),這很好用。

然而張貼這原始的HTML表($ HTMLTABLE)爲內容的REST API

$data = array("type" => "page", "title" => someTitle, 
     "space" => array("key" => "$uploadSpace"), 
     "body" => array("storage" => array("value" => "$htmlTable", "representation" => "storage"))); 

返回一個400的StatusCode錯誤。很顯然,因爲使用htmlspecialchars將輸入的字符串編碼爲html,輸入沒有正確地轉義,但是如何創建一個結構化輸入來轉換爲html表格呢?

我試圖通過我的HTML表格與呈現HTML輸入到表中進行查看合流宏:

$data = array("type" => "page", "title" => someTitle, 
     "space" => array("key" => "$uploadSpace"), 
     "body" => array("storage" => array("value" => "<ac:structured-macro ac:name=\"html\"><ac:plain-text-body><![CDATA[$htmlTable]]></ac:plain-text-body></ac:structured-macro>", "representation" => "storage"))); 

這使得在頁面上我的HTML表格,但是這未能在易於編輯所見即所得的要求作爲wiki的用戶之後會看到宏中包含的HTML代碼。

非常感謝您提前。

回答

0

您需要修改表格才能使用Confluence Wiki Markup來標記表格。舉個例子,HTML表:

$data = "<table> 
     <tr><th>First Name</th><th>Last Name</th><th>GPA</th></tr> 
     <tr><td>Bob</td><td>Jones</td><td>3.52</td></tr> 
     <tr><td>Fred</td><td>Smith</td><td>2.89</td></tr> 
     </table>"; 

應該寫成:

$data = "||First Name||Last Name||GPA|| 
     |Bob|Jones|3.52| 
     |Fred|Smith|2.89|"; 

然後,當您在執行更新/通過REST插入,從「存儲」改變「表示」 「維基」。 (並刪除html宏包裝)

$data = array("type" => "page", "title" => someTitle, 
      "space" => array("key" => "$uploadSpace"), 
      "body" => array("**wiki**" => array("value" => "$htmlTable", "representation" => "**wiki**"))); 

這會給你一個本地,wysiwyg Confluence表。

「存儲」表示表示身體測試已轉換爲Confluence內部用於存儲內容的格式。你想用'wiki'插入,並讓Confluence爲你處理任何轉換。

0

經過漫長的鬥爭,找到了解決辦法。

在您的HTML內容中添加宏代碼。

$bodyFormatted = '<ac:structured-macro ac:name="html"><ac:plain-text-body><![CDATA['.$bodyFormatted.']]></ac:plain-text-body></ac:structured-macro>'; 

$ bodyFormatted變量包含HTML內容。

$data['type'] = 'page'; 
$data['title'] = $articleData["title"].time(); 
$data['space']['key'] = $articleData["container"]; 
$data['body']['storage']['value'] = $bodyFormatted; 
$data['body']['storage']['representation'] = 'storage'; 

編碼到json並通過REST。在那之前一個重要的過程中,我失敗了。

「啓用HTML宏」 參考:https://confluence.atlassian.com/conf55/confluence-user-s-guide/creating-content/using-the-editor/working-with-macros/html-macro警告

Inspite,使所提及模塊(HTML(HTML,XHTML))

處理您的API調用,現在檢查的內容。希望你完成了。一旦工作完成,禁用模塊,以防止交叉腳本攻擊。