CKEditor に機能を追加して、ユーザーがドキュメントに「#」と入力したときに提案を提供する必要があります。提案は、ページの他のフィールドに応じてその場で変更できます。助けてください
1 に答える
提案ボックスを作成するには、コンテキスト メニューを提案ボックスとして使用するカスタム プラグインを作成する必要があります。ここから ckeditor プラグインを作成するための基本的な知識については、リンクを参照してください。
これを config.js に追加します。オートコンプリートはプラグインの名前です
config.extraPlugins = 'autocomplete';
次に、ckeditorフォルダーに次のディレクトリ構造/ファイルを作成します
ckeditor->plugins->autocomplete->plugin.js
次の内容を plugin.js ファイルに入れます
CKEDITOR.plugins.add('autocomplete',
{
init : function(editor) {
var autocompleteCommand = editor.addCommand('autocomplete', {
exec : function(editor) {
表示されるメニューの現在の位置を計算するには、ドキュメントにダミーのスパンを作成する必要があります。
var dummyElement = editor.document
.createElement('span');
editor.insertElement(dummyElement);
var x = 0;
var y = 0;
var obj = dummyElement.$;
while (obj.offsetParent) {
x += obj.offsetLeft;
y += obj.offsetTop;
obj = obj.offsetParent;
}
x += obj.offsetLeft;
y += obj.offsetTop;
dummyElement.remove();
位置を計算した後、要素を削除し、メソッドを呼び出して提案を表示します (コンテキスト メニューに配置され、次の関数で構成されます)。
editor.contextMenu.show(editor.document
.getBody(), null, x, y);
}
});
},
これは、現在のキーが # かどうかを確認するエディターのリスナー バインドです。CKEDITOR.SHIFT + 51 は # のキーの組み合わせです。
afterInit : function(editor) {
editor.on('key', function(evt) {
if (evt.data.keyCode == CKEDITOR.SHIFT + 51) {
editor.execCommand('autocomplete');
}
});
reloadSuggetionBoxコマンドは、ckeditor の準備が整った直後にメニューを生成するために、外部 jquery から呼び出されます。
var firstExecution = true;
var dataElement = {};
editor.addCommand('reloadSuggetionBox', {
exec : function(editor) {
if (editor.contextMenu) {
dataElement = {};
editor.addMenuGroup('suggestionBoxGroup');
$.each(Suggestions,function(i, suggestion)
{
var suggestionBoxItem = "suggestionBoxItem"+ i;
dataElement[suggestionBoxItem] = CKEDITOR.TRISTATE_OFF;
editor.addMenuItem(suggestionBoxItem,
{
id : suggestion.id,
label : suggestion.label,
group : 'suggestionBoxGroup',
icon : null,
onClick : function() {
var data = editor.getData();
var selection = editor.getSelection();
var element = selection.getStartElement();
var ranges = selection.getRanges();
ranges[0].setStart(element.getFirst(), 0);
ranges[0].setEnd(element.getFirst(),0);
editor.insertHtml(this.id + ' ');
},
});
});
if(firstExecution == true)
{
editor.contextMenu.addListener(function(element) {
return dataElement;
});
firstExecution = false;
}
}
}
});
delete editor._.menuItems.paste;
},
});
ここで「提案」は、ページのどこかに存在する変数であり、提案に表示される「id」と「ラベル」を持つオブジェクトのリストを保持します。
これらの提案を構成するには、次の jquery コードを実行してください。この後、「#」が押されるたびに提案が表示されます。
$('textarea').ckeditor();
CKEDITOR.on( 'instanceReady', function( evt ) {
CKEDITOR.instances.contractData.execCommand('reloadSuggetionBox');
});
これは ckeditor (contractData は私の ckeditor インスタンスの名前です) をロードし、「Suggestions」変数に現在存在する提案を表示するようにプラグインを構成します。 " 変数
CKEDITOR.instances.contractData.execCommand('reloadSuggetionBox');
これを機能させる上で問題が発生した場合はお知らせください。
私のレポでダウンロード可能なプラグインを見つけてください
http://navalgandhi1989.github.io/ckeditor-autocomplete-suggestions-plugin/