2023年04月28日
フィールドブロックビルダーでリッチテキストを使用する
PowerCMS 6.4 からブロック定義のパーツにリッチテキストを追加しました。
現在の PowerCMS 6.2 においてフィールドブロックビルダーのブロック定義のパーツの種類にリッチテキストはございませんが、リッチテキストを利用したいという要望を頂いたため、編集画面のテンプレートと JavaScript によって実現する方法を紹介いたします。
環境の条件
- PowerCMS 6.1 以上
本記事の方法では「編集画面テンプレート」「編集画面JavaScript」の変更が必要で、これらは PowerCMS 6.1 で追加された設定です。
導入の流れ
- Field Block Builder のプラグイン設定
- ブロック定義の設定
Field Block Builder のプラグイン設定
「編集画面テンプレート」を利用できるように Field Block Builder プラグインの設定「記事/ウェブページ編集画面のカスタマイズ」を「許可」にする必要があります。 設定「記事/ウェブページ編集画面のカスタマイズ」が既に有効となっている場合は下記の手順はスキップして「ブロック定義の設定」へ進んでください。
- ブロック定義を利用するワークスペース/スペースへ移動する
- 左メニューから「設定」>「プラグイン」をクリックして、プラグイン設定画面へ移動する
- プラグインの一覧から Field Block Builder を見つけてクリックし、名前のすぐ下に表示される「設定」をクリックし、設定欄を表示する
- [記事/ウェブページ編集画面のカスタマイズ]で「許可」をクリックし「保存」ボタンをクリックする

ブロック定義の設定
ブロック定義のパーツに「リッチテキスト」はありませんので、「複数行テキスト」のパーツを使って設定を行います。
- プラグイン設定をしたワークスペース/スペースへ移動する
- 左メニュー「ブロック定義」>「新規」をクリックし、ブロック定義の作成画面へ移動する
- 「+パーツ追加」をクリックする
- 「複数行テキスト」をクリックする

- 追加した「複数行テキスト」の右上、エンピツマークをクリックし、ベースネームを確認する
パーツのベースネームを変更したい場合はこのタイミングに変更してください。
本記事の手順ではベースネームへ「textarea_1」を設定した内容となっており、 ベースネーム「textarea_1」以外へ変更する場合は後の手順でテンプレートを書き替える必要があり、ポイントごとの案内を元にテンプレートを書き替えてください。

- 追加した「複数行テキスト」の右上、「<$>」をクリックする

- 「デフォルトのサンプル出力テンプレート」の内容をコピーする
コピーしたテンプレートは後の手順 13. で利用します。
- [出力テンプレート] にチェックを入れ、テンプレートの入力欄を表示する
- [出力テンプレート] へ手順 11. でコピーしたテンプレートを貼り付ける
- [出力テンプレート] の内容を書き替える
下記の修正後のテンプレートをコピーして使う場合、手順 9. でベースネームを変更している場合はテンプレート例と name の値が異なりますのでは name の値を書き替えてご利用ください。
修正の内容
- escape の指定を削除する
- nl2br の指定を削除する
- mt:var 前後の p タグを削除する
テンプレート例 (修正前)
<div>
<p><mt:var name="textarea_1" escape="html" nl2br="1"></p>
</div>
テンプレート例 (修正後)
<div>
<mt:var name="textarea_1">
</div>
- [編集画面テンプレート] にチェックを入れ、テンプレートの入力欄を表示する
- 「デフォルトテンプレート」をクリックして、ダイアログを開き、表示されたテンプレートの内容をコピーする
- [編集画面テンプレート] へ手順 16. でコピーした内容を貼り付ける
- [編集画面テンプレート] の内容を書き替える
手順 9. でベースネームを変更している場合はテンプレート例中の textarea_1 の値が異なりますので修正後のテンプレートを使う場合は変更したパーツのベースネームへ書き替えてください。 例えばベースネームを textarea_1 から richtext へ変更している場合は textarea_1 を書き替えるだけでなく、textarea_1_label なども richtext_label へ書き替えてください。
修正の内容
- div タグの class へ mt-editor-manager-wrap を追加する
- textarea へ name 属性を追加し、手順 9. で控えたパーツのベースネームを指定する
- textarea タグの class へ FieldBlockBuilder-editor_manual を追加する
テンプレート例 (修正前)
<mtapp:FieldBlockBuilderField part_id="$textarea_1_part_id" name="textarea_1" label="$textarea_1_label" required="$textarea_1_required" hint="$textarea_1_hint">
<div class="FieldBlockBuilder-item-input">
<textarea data-name="textarea_1" class="FieldBlockBuilder-item-input-edit text high full"></textarea>
</div>
</mtapp:FieldBlockBuilderField>
テンプレート例 (修正後)
<mtapp:FieldBlockBuilderField part_id="$textarea_1_part_id" name="textarea_1" label="$textarea_1_label" required="$textarea_1_required" hint="$textarea_1_hint">
<div class="FieldBlockBuilder-item-input mt-editor-manager-wrap">
<textarea name="textarea_1" data-name="textarea_1" class="FieldBlockBuilder-item-input-edit text high full FieldBlockBuilder-editor_manual"></textarea>
</div>
</mtapp:FieldBlockBuilderField>

- [編集画面JavaScript] へ下記のソースコードを貼り付ける
(function($,$block){
var target = 'textarea.FieldBlockBuilder-editor_manual';
// テキストエリアにエディタを適用する
$(target,$block).each(function(){
var id = this.id;
if(! id){
// name に ランダムな文字列を追加して id とする
var id = this.name + '-' + new Date().getTime().toString() + Math.floor(Math.random() * 10).toString();
this.id = id;
}
new MT.EditorManager(id);
// 保存時にエディタからテキストエリアに値をセットする
$(this).closest('form')
.off('submit.fbb_positionSave')
.on('submit.fbb_positionSave',function(){
$(target).each(function(){
this.value = tinymce.get(this.id).getContent();
});
// フィールドブロックビルダー用に値をセットする
FieldBlockBuilder.positionSave();
});
});
// 位置変更時にエディタを退避させる
$('.FieldBlockBuilder-item-handle-up,.FieldBlockBuilder-item-handle-down')
.off('mouseup.fbb_handle_mouseup')
.on('mouseup.fbb_handle_mouseup',function(){
$(this).closest('.FieldBlockBuilder-item').find(target).each(function(){
var manager = $(this).data('mt-editor');
if (manager) {
manager.currentEditor.powercmsStash();
}
});
})
.off('click.fbb_handle_click')
.on('click.fbb_handle_click',function(){
$(this).closest('.FieldBlockBuilder-item').find(target).each(function(){
var manager = $(this).data('mt-editor');
if (manager) {
manager.currentEditor.powercmsRestore();
}
});
});
})(jQuery,$block);

- ブロック定義の名前など他の項目を入力して、最後にブロック定義を保存してください。
動作確認
ブロックを追加する手順はかわりません。
標準のブロック定義と同様に、記事・ウェブページ編集画面で、プルダウンからブロック定義を選択し「追加」するとリッチテキストエディタが利用できます。

注意点
パーツのベースネームを手順 9. の後で変更する場合、「出力テンプレート」「編集画面テンプレート」の内容を書き替え、パーツのベースネームを反映する必要があります。
- カテゴリー
- PowerCMS 6



コメントを投稿する