Изменение разрешенных тегов HTML: @tags для поля ввода текста справки

11

Я хочу отобразить простую таблицу под полем формы как часть текста справки для этого поля (точнее, поля файла). Я полностью псих, или действительно нет простого способа изменить разрешенные 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

Если нет простого пути, каков следующий легкий способ сделать это?

ОБНОВИТЬ:

Клайв придумал отличный способ сделать это ниже с помощью пользовательского модуля. Вы также можете добавить к этому, используя 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);
}
7wonders
источник
Вы говорите о текстовом поле (название вопроса) или файловом поле (описание вопроса).
googletorp
@ 7wonders То, что вы добавили в вопрос, будет хорошим ответом.
kiamlaluno

Ответы:

7

Нет простого способа сделать это, список разрешенных тегов жестко запрограммирован в _field_filter_xss_allowed_tags()функцию .

Это, в свою очередь, вызывается 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, очевидно, если вы хотите сделать то же самое для других полей, вам нужно изменить его, чтобы он соответствовал другому условию. Я советую использовать отличную dpm()функцию, включенную в, Devel moduleчтобы проверить объект в вашей функции изменения формы.

Я только что проверил вышеизложенное, и оно работает (теперь у меня есть таблица, в которой обычно описывается поле моего файла), это выглядит как хак, хотя технически оно соответствует правилам, но, надеюсь, оно поможет вам путь.

Клайв
источник
Это сработало отлично. Кто-то должен обязательно создать модуль, чтобы сделать это правильно (насколько это не может быть основной функцией, я не знаю!).
чудес
@ 7wonders Да, определенно кажется, что упущенная возможность упущена, но я думаю, с точки зрения разработчиков, это действительно означало бы, что полевой модуль поддерживал свой собственный текстовый формат, и это могло бы считаться излишним. Пользовательская опция, чтобы изменить это было бы хорошо, хотя. Я мог бы превратить это в более полезный модуль и опубликовать его на drupal.org на самом деле, будет держать вас в курсе :)
Клайв
Звучит как хорошая идея. Дайте мне знать, когда у вас будет песочница, и я с радостью протестирую ее для вас.
чудес
2

Если вы используете D6, вы можете перейти к / admin / settings / filter. Там вам нужно нажать «настроить» параметр «Фильтрованный HTML». Затем нажмите на вкладку конфигурации. Вам будет представлено текстовое поле с надписью «Разрешенные теги HTML». Введите HTML-теги, которые вам нужно использовать там.

В случае D7 перейдите в admin / config / content / format / Filter_html. В разделе «Параметры фильтра» перейдите на вкладку «Ограничить допустимые теги HTML». Введите теги HTML, которые вы хотите использовать в текстовом поле.

aerozeppelin
источник
Я использую D7 и поверь мне, это было первое, что я сделал, и был шокирован, когда он не сработал! (Да, я также несколько раз очищал кеш). Это действительно сбивает с толку и, похоже, относится ко всем текстовым полям справки для моего сайта. Даже если я добавлю разрешенный html-фильтр в обычный текст и добавлю таблицу tr td, это не сработает. Очень надоедливый.
чудес
Я только что добавил новую установку d7 и могу подтвердить ее поведение по умолчанию. Это не позволит изменить теги в разделе справки = безумие! Какой хук может это переопределить?
чудес
1
Попробуйте установить «Full html» в качестве формата ввода по умолчанию, а затем проверьте.
аэрозеппелин
Я могу подтвердить, что мне удалось изменить разрешенные теги для фильтрованного HTML с помощью Drupal 7.10, и фильтр работал так же, как и отображение «разрешенных тегов». Так что на самом деле ответ аэрозеппелина правильный. :-)
Пол-м
1
Но если вы прочитаете вопрос Пола, то это касается разрешенных тегов в тексте справки для поля, поэтому ответ неверен.
чудес