baserCMS CKEditor 4.x エディタテンプレート選択画面の「現在のエディタの内容と置き換えます」のデフォルトチェックを外したい。

baserCMS CKEditor 4.x エディタテンプレート選択画面の「現在のエディタの内容と置き換えます」のデフォルトチェックを外したい。
-2021/10/24 以下について、追記
まず、本件対応の方法は、先に提案したヘルパーファイルに記載したオプション設定よりも、もっと合理的な方法で実現するものでした。 お詫びして内容を再度整理します。

管理テーマの違いによる設定ファイルの優先関係

そもそものbaserCMSにおけるjsファイル読み込みの優先関係を踏まえて、もう一度整理しました。 もちろん、先に提案したヘルパーファイルに記載したオプション設定も、結果として本件を(最も優先的に)実現するのですが、 結論から言いますと、CKEditorのconfig.jsに今回のオプションを記述することで、デフォルトの設定を上書きして問題なく反映させることができます。

とはいえ、どんな設定でもconfig.jsへの記述で反映されるかと言うと、そうではありません。つまり、設定を上書きする優先関係が存在するからです。例をあげると、スキンファイルを指定するオプション(別のskinファイルを適用させたいケース)などは、もともとヘルパーファイル内で指定されているため、config.jsで新たに指定してもヘルパーファイル側の設定(最も優先的)で上書きされてしまうためconfig.jsの指定が反映されません。 この辺りの事情を加味して、適切な場所にオプションの設定をする必要があります。 画像の説明

設定を反映させるために必要な措置

  1. サーバーキャッシュのクリア
  2. ブラウザキャッシュのクリア(スーパーリロードでは初期化できません。履歴削除からキャッシュの削除が必要です。)
  3. baserCMS管理画面から、設定>ユーティリティ>ユーティリティトップ>アセットファイル>アセットファイルの削除(あるいは、アセットファイルを再配置)

1、2までで反映されれば、特に3のアセットファイルの削除(および再配置)は必要ありませんが、admin-secondを利用している場合は、「アセットファイルの削除」をしないと反映されないと思います。

実のところ、当初、今回のオプションの記述をckeditorのconfig.jsに行っていたのですが、いっこうに設定が反映されなかったため、ckeditorのconfig.jsはカスタムコンフィグファイルとして利用されていないんだと、勝手に考えてしまっていたというのが事情(言い訳)です。


CKEditorのエディタテンプレートは、実際、とても使いでのある機能なので、もっと脚光を浴びてもいいと思うんですが、どうもバーガーエディターに押され気味。 これからもエディタテンプレート推しでいきたいと思っているんですが、どうしても不満なところがこの「現在のエディタの内容と置き換えます」のデフォルトチェック。これをなんとかデフォルトで外したい! 画像の説明 というのも、エディタテンプレートを使ったことがある人だと経験があると思いますが、このチェックがデフォルトでついていることで、うっかり、テンプレートを適用して、これまで書いてきた記事を全部上書きしてしまうという事故がしょっちゅう。(command+Zで戻るっちゃー戻るんですけど。。。) 実際、テンプレートの利用シーンを考えると、部分的にテンプレートの要素を記事内に挿入するケースがほとんどで、「エディタの内容(つまり記事)と置き換える」なんてケースはほとんどなく、というかそんな人いるの?!って感じなのです。 と言うわけで、この忌まわしいデフォルトチェックをなんとか外したい訳です。

さて、本題に戻しますと、baserCMS4系(4.5時点)でCKEditorのバージョンをチェックしてみたところ、4.5.2(2015年リリース)と判明。これは、どうもずいぶん前から変わっていない様なので、もしかすると本TIPSは、baserCMS3系でも使えるかもしれません。(すいません、チェックしてないので確かではありません。)

ということで、CKEditor 4.xのドキュメント を見ると、

config.templates_replaceContent = false;

を設定することで「現在のエディタの内容と置き換えます」がデフォルトチェックオフになるみたい。ただ、baserCMSの場合にこれをどこに書けば良いのか、なかなかわからずあちこちを探索し、いろいろ試行錯誤した結果、以下の二通りのいずれか。 参考にさせていただいた記事:Senchan Office.com - baserCMSのCKEditorをカスタマイズ

ということで、方法①は以下。 lib/Baser/webroot/js/admin/vendors/ckeditor/フォルダをまるっとtheme/インストールテーマ/js/admin/vendors/ckeditor/にコピーし、config.jsファイルに以下の様に追記。

CKEDITOR.editorConfig = function( config ) {
  config.templates_replaceContent = false;
};

あるいは、ヘルパーファイルをコピーして、以下のオプションを追記する方法②。 lib/Baser/View/Helper/BcCkeditorHelper.phpapp/View/Helper/BcCkeditorHelper.phpにコピーし、BcCkeditorHelper.php内の314行目辺りに$jscode .= "CKEDITOR.config.templates_replaceContent = false;"; のコードを追記。

      if ($editorUseTemplates) {
         $jscode .= "CKEDITOR.config.templates_files = [ '" . $this->url(['admin' => true, 'plugin' => null, 'controller' => 'editor_templates', 'action' => 'js']) . "' ];";
         $jscode .= "CKEDITOR.config.templates_replaceContent = false;";
      }

UIの文章を修正

ここまでで、本題は終了なのですが、今回の改修で「(現在のエディタの内容は失われます):」は、失われなくなるので、テンプレート選択画面のこの文章を是非削除したい!しかし、CKEさん、そもそもどうしてこんなところにこんなことを書くんです? あと、テンプレート選択画面タイトルの「内容テンプレート」部分。ついでに、ハテナな英訳を「コンテンツテンプレート一覧」(baserCMS的には、「エディタテンプレート一覧」の方がいいかもですが)に変更しようと思います。

画像の説明

修正するための対象ファイルは、便宜的に翻訳ファイルを訂正することで、日本語表記上は運用上問題なしということで、 theme/インストールテーマ/js/admin/vendors/ckeditor/lang/ja.jsファイルをテキストエディタ等で開き、「内容テンプレート」などの記述を検索し、訂正します。

以上で作業終了。

と言うわけで、一番右が実現したかった最終形です。

コメント


コメントする


dWVCbY