PowerCMS X ブログ
2024-07-26
PowerCMS Xのリッチテキストエディタ(TinyMCE)にはプラグインの機能があり、カスタムボタンを追加することができます。
カスタムボタンを追加している例としては、標準プラグインの「SimplifiedJapanese」「BannedWords」「MachineTranslator」「EditorDiff」などがありますので参考にしてください。
PowerCMS Xプラグインを作成してボタンを追加するほかに、TinyMCEそのもののプラグイン(JavaScriptで書きます)を作成してファイルを /powercmsx/assets/js/tinymce6/plugins/ 配下に設置するという方法もあります。
でも、もっと手軽にボタンを追加したいというケースに応えられるよう、次のバージョンのリリースでプラグイン「TinyMCE」をアップデートして管理画面でボタンを追加できるようになりましたので紹介します。
プラグインを差し替え後、スキーマのアップグレードを実行してください。
※ 次のバージョンではアップグレード時に自動で反映されるようになっています。
「プロフィールの編集」画面で「開発者モード」にチェックを入れて保存します。
モデル「boilerplate」の編集画面でカラム「snippet」の「詳細」をクリックして「エディタの高さ」欄の数字を大きくします。
モデルを保存します。保存後は「開発者モード」のチェックを外してください。
「見出しレベル2」は書式設定や「styles」メニューからも設定できますが、ボタンが出ていたほうがわかりやすいですし、圧倒的に使いやすいです(もちろん限られた領域にボタンを増やしすぎるとわかりにくくなりますが)。
各項目の設定値は以下のとおりです。
カラム名 | 値 |
---|---|
ラベル | <h2> |
説明 | Level-2 Heading(見出し2) |
ボタン | チェック有り |
アイコン | 空欄 |
ベースネーム | pt-h2 |
「スニペット」欄に次のコードを貼り付けます。
let editor = tinymce.activeEditor;
let html = editor.selection.getContent();
editor.insertContent( '<h2>' + html + '</h2>' );
「ツールバー」に指定したベースネーム(pt-h2)を追加します。
見出しを適用後、見出しを選択状態にするためにコードをDOMをベースにしたものに変更します。この修正をすることで、テキストの一部分を選択しているときや、要素内にカーソルがある状態でも見出しを適用できます。
let editor = tinymce.activeEditor;
let html = editor.selection.getContent();
let innerHTML = editor.selection.getNode().innerHTML;
let oldNode = editor.selection.getNode();
let newNode = document.createElement( 'h2' ); // H2要素を生成
newNode.innerHTML = innerHTML;
oldNode.parentNode.replaceChild( newNode, oldNode ); // ノードを置換する
editor.selection.select( newNode ); // 見出しを選択状態にする
H2要素を選択状態で、もう一度クリックすると見出しを解除するようにして完成です。
let editor = tinymce.activeEditor;
let oldNode = editor.selection.getNode();
let innerHTML = oldNode.innerHTML;
if ( oldNode.tagName == 'H2' ) { // 選択範囲がすでにH2要素だった時
let newNode = document.createElement( 'p' ); // P要素に置換する
newNode.innerHTML = innerHTML;
oldNode.parentNode.replaceChild( newNode, oldNode );
editor.selection.select( newNode ); // P要素を選択状態にする
} else {
let newNode = document.createElement( 'h2' );
newNode.innerHTML = innerHTML;
oldNode.parentNode.replaceChild( newNode, oldNode );
editor.selection.select( newNode ); // H2要素を選択状態にする
}
カテゴリー:プラグイン
投稿者:Junnama Noda