メインコンテンツに移動

FckEditorモジュールとGeShi Filterモジュール

このブログを記載するため、FckEditorモジュールを使用し、ソースプログラムなどの表示用にGeShi Filterを使用しています。
 
この組み合わせで使用すると、Geshi Filterで処理したいblockcodeタグで囲んだ箇所がFckEditorによっておかしなことになります。
 
例えば、
 

	1->2->3->4->5->
	6->7->8->9->0

をGeshiFilterで処理したい場合、以下の様に記述します。

<blockcode> 1->2->3->4->5-> 6->7->8->9->0 </blockcode>

しかし、FckEditorでこの記述が変換され、

<blockcode> </blockcode> 1->2->3->4->5->
6->7->8->9->0

となります。

この記述をそのまま保存すると、さらに入力書式のFilterにかけられ、


1->2->3->4->5-> 6->7->8->9->0

となります。

この場合は、結果的に一緒になりますが、blockcodeタグで囲まれていないため、GeShiFilterが動作せず、箱で囲んではくれません。
またHTMLソースなどをGeShi Filterで処理させたい場合は、blockcodeタグで囲まれない為、 HTMLソース自体が意味のあるものと認識されてしまい、表示が崩れます。
またそれを回避するため、保存する前にblockcodeタグで囲んでも、FckEditorの出力ですでにHTMLソースの一部が実体参照に自動変換されてしまっています。

FckEditorモジュールとGeShi Filterモジュールを使用したい場合にどうすればよいのでしょう。

まずその前に、FckEditorモジュール自体、Drupalの入力書式に対応できていないと思います。

Drupalのデフォルトの入力書式には、Filtered HTMLとFull HTMLがあります。

Filtered HTMLは、セキュリティ面を考慮して使用するタグを制限した入力書式で、次の4つのフィルターが設定されています。Drupalのデフォルト設定になるため、匿名ユーザも利用可能です。
・HTMLコレクタ : 不完全なHTMLの修復
・HTMLフィルタ : ユーザが投稿できるHTMLタグを制限し、許可されていないタグの除去やエンティティ表記への変換
・URLフィルタ  : ウェブとメールのアドレスをクリックできるリンクに変換
・改行コンバータ: 段落や改行をHTMLタグ(<p>と<br>)に変換します。

一方、Full HTMLは、使用できるHTMLタグの制限がないためすべてのHTMLタグを使用できます。次の2つのフィルターが設定されています。
・HTMLコレクタ
・URLフィルタ

登録したユーザロールがどの入力書式を使用できるかの設定が可能ですので、悪意のあるユーザが含まれる可能性のある匿名ユーザのロールは、一般的にFiltered HTML書式を設定し、入力の制限を行い、悪意のあるユーザが含まれない投稿ユーザやその他認証が必要なユーザロールには、Filtered HTML+Full HTML書式を設定します。

FckEditorでは、プロファイル設定が作成できます。
デフォルトとAdvancedの2つのプロファイルがすでに用意されており、デフォルトに匿名ユーザロールが割り当てられています。
その他のユーザロールについては、最初にプロファイルを割り当てる必要があります。

このプロファイル設定のSecurity欄に入力書式の設定が2つあります。
・HTMLコレクタ
・HTMLフィルタ

これはDrupalの入力書式ですが、Securityに関連するものだけしかリストされていません。
デフォルトプロファイルでは、HTMLフィルタのみ使用するようになっています。

使用するツールバーは入力書式にあわせて選択をすれば良いみたいで、Filtered HTMLにはDrupal Filtered、HTML フィルタを使用しない場合はDrupal Fullのツールバーが用意されています。
(どのツールバーでどのツールを表示するかの設定は、fckeditor.config.jsファイルが使用されていますので、好みでツールを追加・削除できます)

結局、FckEditorでツールバーをいろいろ表示して使っても、最終的には、Drupalの入力書式でタグが除去されます。
よって、FckEditorを使うのであれば、Drupalの入力書式をFull HTML書式にして記事を作成しないといけないことになります。

また、FckEditorで識別できないタグは、FckEditorの出力で上に書いたblockcodeの様に変な処理がされてしまいますので、FckEditorで処理させない様にするためには、fckeditor.config.jsファイルにFCKConfig.ProtectedSource.Addを追加しなければなりません。

これを追加することで、FckEditorの出力後もそのままblockcodeタグで囲まれた箇所はそのままになり思ったとおりの結果になります。

しかし、blockcodeタグ含む内容はすべて、FckEditor上では非表示になってしまいます。
まだ何か設定が足りないのでしょうか

また、ブログを記載する際は、毎回 入力書式をFull HTMLに変更しないといけないため面倒です。
※Full HTMLをデフォルトにすれば毎回変更せずにすみますが、デフォルトにするとすべてのユーザロールで使用できてしまいます。

一体どうすればよいのでしょう。

ユーザロールごとにDrupal内部共通で利用できるプロファイル設定モジュールを導入すれば悩まなくても済むのでしょうか

補足

この記事を記載中に、FckEditor用のGeShi Filter プラグインというものを見つけました。
これで解決すればいいのですが、単純にGeShi Filter用のツールアイコンが表示できるだけの様な気もします。
とりあえず使ってからまた、感想を書きたいと思います。

GeSHiProプラグインの結果

1->2->3->4->5->
6->7->8->9->0

※スタイルシートの設定の問題で、GeSHiFilterモジュールとGeSHiProとですみわけが必要なようです。GeShiPro側に枠線をつけるとGeSHiFilterモジュール側の枠線が二重になってしまいます。

Drupalバージョン
モジュール