私が書いたDrupal 7 Webサイトで、フォーラム、ブログ、コメントのコアモジュールが有効で、カスタムモジュール(Flashゲームでブロックを生成し、プレーヤー評価でブロックを生成))を実行しました。
このウェブサイトはロシアのカードゲームに特化しており、ユーザーはカードのなぞなぞやゲームについてコメントするときにコメントに メンションカードの色 を使用することがよくあります。
ほとんどのユーザーは、HTMLタグのようなものを何も理解していない高齢者なので、プレーンテキストコメントのみを有効にしました。
私の質問は次のとおりです:プレーンテキストコメント-K♥や7♦のような文字列を認識して赤に着色する方法は?
PHPコードは次のようになります:
preg_replace(/(1?[0789JQKA][♥♦])/, '<font color="red">\1</font>', $str);
(後で正規表現を改善できます)-Drupal 7?
あなたが探しているのは テキストフィルターと入力形式 のようです。
ブラウザでの出力用のテキストコンテンツの処理は、Drupalの最も重要なタスクの1つです。このような処理がなければ、HTMLテキストを入力する際にすべてがマスターになる必要があります。ハンドブックのこのセクションでは、フィルターと入力形式とは何か、それらが重要な理由、それらの使用方法、およびサイトのセキュリティに影響を与える理由について説明します。
または、template.phpまたはcomment.tpl.phpに正規表現をダンプすることもできます。これは、はるかにシンプルでクリーンではありませんが、機能します。
Mołotが言ったように、構成可能/再利用可能にする必要がある場合は、カスタムフィルターが適しています。アイデアは、生データが常に保存され、フィルターが表示に適用されるというものです。これはすべてうまくいきますが、元のテキストが必要ない場合必要がある場合この方法は、不必要なパフォーマンスオーバーヘッドであることがわかります(特にほとんどのフィルターがそうであるように、正規表現を含みます)。
もう1つの方法は、保存する前にコメント本文をインターセプトし、フィルターを適用することです。このために hook_comment_presave()
を使用できます:
function MYMODULE_comment_presave($comment) {
$comment->comment_body[$comment->language][0]['value'] = string_replacement_function($comment->comment_body[$comment->language][0]['value']);
}
私はこの方法が「眉をひそめている」ことを知っています(データベースの内容を制御するために欲しいとしても、誰かの入力を変更することはできません!)、そして私は、少なくとも2人の人が、それを見たとき、または見たときにこれに反対票を投じることを考えることができます。
両方の方法の利点/欠点はかなりはっきりしていると思うので、使用例に基づいて決定することをお勧めします。これを行うために実装するモジュールが実際にリリースされていない場合、ここで追加のパフォーマンスヒットを得てもメリットはありません。
ただし、このメソッドを使用してサイトの他の場所(ノード本体など)でテキストをフィルター処理する場合は、カスタムフィルターの方が適しています。