XForms/CKEditor
外观
< XForms
您希望能够将 HTML 标记添加到 textarea 中。
我们将使用 CKEditor JavaScript 库。此演示使用的是版本 3.2。
步骤
- 从以下网站下载源代码:CKEditor 网站。
- 在您的本地文件系统上解压缩 zip 文件
- 将 HTML 文件中所有出现的 "&" 更改为 & a m p ; 并删除 & n b s p ; 和 & c o p y ;,以使文件成为格式良好的 XHTML 文件,以便 eXist 可以索引它们。3.2 版本中的以下文件需要修改
- ckeditor/CHANGES.html
- ckeditor/_source/plugins/wsc/dialogs/ciframe.html
- ckeditor/_source/plugins/wsc/dialogs/tmpFrameset.html
- ckeditor/plugins/wsc/dialogs/ciframe.html
- ckeditor/plugins/wsc/dialogs/tmpFrameset.html
- 将主 ckeditor 文件夹拖入 eXist。它应该立即索引所有 html 文件并将所有非 XML 文件(javascript、css 等)存储为二进制文件。
- 注意:这似乎不可能。更改配置文件以不编码 XML。
未遵循上述步骤 3 将导致以下错误消息
XMLDB exception caught: Failed to invoke method parse in class org.exist.xmlrpc.RpcConnection: org.xml.sax.SAXParseException: The entity name must immediately follow the '&' in the entity reference.
可以通过编辑 config.js 文件来尝试(参见 配置文件参数 )
- 在 config.js 中添加以下行
- config.HtmlEncodeOutput = 'false';
- 用以下 sample_postdata.xq 替换 sample_postdata.php
在 _samples 文件夹中,您会发现几个关于如何使用 CKEditor 的示例。这些 HTML 文件中的每一个都包含一个包含以下行的 HTML 表单
<form action="sample_posteddata.xq" method="post">
以下程序可用作 sample_postdata.php 文件的替代品。
sample_postdata.xq
xquery version "1.0";
declare option exist:serialize "method=xml media-type=text/xml omit-xml-declaration=yes indent=yes";
(: Get the content of the editor1 parameter :)
let $editor1 := request:get-parameter('editor1', '')
(: wrap the content in a div to make sure we have well-formed XML :)
let $wrapped-content := concat('<div>', $editor1, '</div>')
(: parse the escaped text so that we now have true XML markup :)
let $data-to-save := util:parse($wrapped-content)
return
<results>
{$data-to-save}
</results>
CKEditor 有很多 配置选项。它们通过编辑主 CKEditor 目录中的 config.js 文件来设置。
对 CKEditor 配置文件进行以下更改应该可以工作,但似乎没有正确的行为。
config.js
CKEDITOR.editorConfig = function( config )
{
// Define changes to default configuration here. For example:
// config.language = 'fr';
// config.uiColor = '#AADC6E';
// This should turn off encoding of the XML files as they are sent to the server
config.HtmlEncodeOutput = false;
config.entities = false;
};