Использование Confluence REST API для публикации сгенерированной HTML-таблицы (PHP) без получения кода состояния http 400?
Моя цель состоит в том, чтобы создать страницу с таблицей в вики слияния, используя предоставляемый REST API, который может быть легко отредактирован пользователями вики с помощью редактора WYSIWYG после создания страницы.
Я разобрал тексты и поместил их в разные категории в массив массивов, а затем сгенерировал из этого 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-таблицу на странице, однако это не соответствует легко редактируемому требованию WYSIWYG, так как пользователи вики увидят HTML-код, содержащийся в макросе впоследствии.
Заранее большое спасибо.
2 ответа
Вам нужно изменить таблицу, чтобы использовать разметку Confluence Wiki для разметки таблицы. Как пример, 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 обрабатывать любые преобразования для вас.
После долгой борьбы нашел исправление.
Добавьте код макроса поверх содержимого 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
Несмотря на предупреждения, включите упомянутый модуль (html (html-xhtml))
Обработайте вызовы API и проверьте содержимое. Надеюсь, что вы сделали. После завершения работы отключите модули, чтобы предотвратить кросс-скриптовые атаки.