it-swarm-ja.com

許可されたHTMLタグの変更:ヘルプテキスト入力フィールドの@tags

フォームフィールドの下に、そのフィールド(正確にはファイルフィールド)のヘルプテキストの一部として単純なテーブルを表示したいと思います。私は完全に精神的ですか、またはこのテキスト領域に許可されたHTMLタグを変更する簡単な方法は本当にありませんか?現在表示しているところ:

Instructions to present to the user below this field on the editing form. Allowed HTML tags: a b big code del em i ins pre q small span strong sub sup tt ol ul li p br img

簡単な方法がない場合、次に行う最も簡単な方法は何ですか?

更新:

Cliveは、カスタムモジュールを使用して以下の方法で優れた方法を考え出しました。次のようにctoolsを使用してこれに追加し、ヘルプテキストを折りたたみ可能にすることもできます。

// Implement hook_field_widget_form_alter()
function MYMODULE_field_widget_form_alter(&$element, &$form_state, &$context) {
  // If some condition is matched based on the element provided...
  if (isset($element[0]) && $element[0]['#field_name'] == 'field_test') {
    // Alter the description using your more permissive set of tags
    $reworked = filter_xss($context['instance']['description'], _MYMODULE_field_filter_xss_allowed_tags());
    $element[0]['#description'] = theme('ctools_collapsible', array('handle' => 'Help text', 'content' => $reworked, 'collapsed' => TRUE));
  }
}

// Provide a more permissive set of tags to be used with filter_xss()
function _MYMODULE_field_filter_xss_allowed_tags() {
  // Merge the new set of allowed tags with the less permissive defaults
  $new_tags = array('table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td');
  return array_merge(_field_filter_xss_allowed_tags(), $new_tags);
}
11
7wonders

実際には簡単な方法はありません。許可されたタグのリストは _field_filter_xss_allowed_tags() function にハードコードされています。

これは、次に、データがデータベースに保存されるときではなく、 field_filter_xss() に表示されるときに field_default_form() によって呼び出されます。

幸いなことに方法はありますが、そのためには小さなカスタムモジュールが必要です。基本的には、フィールドのウィジェットフォームにフォーム変更フックを実装し、より寛容なタグのセットでfilter_xss()を使用するように要素の説明を設定することを考えています。

これらの線に沿った何か:

_// Implement hook_field_widget_form_alter()
function MYMODULE_field_widget_form_alter(&$element, &$form_state, &$context) {
  // If some condition is matched based on the element provided...
  if (isset($element[0]) && $element[0]['#field_name'] == 'field_test') {
    // Alter the description using your more permissive set of tags
    $element[0]['#description'] = filter_xss($context['instance']['description'], _MYMODULE_field_filter_xss_allowed_tags());
  }
}

// Provide a more permissive set of tags to be used with filter_xss()
function _MYMODULE_field_filter_xss_allowed_tags() {
  // Merge the new set of allowed tags with the less permissive defaults
  $new_tags = array('table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td');
  return array_merge(_field_filter_xss_allowed_tags(), $new_tags);
}
_

これは、_field_test_と呼ばれる要素の新しいタグのみを許可するという前提に基づいています。他のフィールドでも同じことを行う場合は、別の条件に一致するように変更する必要があります。 _Devel module_ に含まれる優れたdpm()関数を使用して、フォーム変更関数のオブジェクトを検査することをお勧めします。

私は上記をテストしたところ、うまくいきました(現在、ファイルフィールドの説明が通常あるテーブルがあります)。技術的にはルールに固執していますが、ハックのように感じられますが、うまくいけば、仕方。

7
Clive

D6を使用している場合は、/ admin/settings/filterに移動できます。そこで、「フィルターされたHTML」の「構成」オプションをクリックする必要があります。次に、構成タブをクリックします。 「許可されたHTMLタグ」というラベルの付いたテキストボックスが表示されます。そこで使用する必要があるhtmlタグを入力します。

D7の場合は、admin/config/content/formats/filtered_htmlに移動します。 [フィルター設定]で、[許可されたHTMLタグを制限する]タブをクリックします。使用するHTMLタグをテキストボックスに入力します。

2
aerozeppelin