更改允许的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

如果没有简单的方法,那么下一个最简单的方法是什么?

更新:

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);
}

您是在谈论文本字段(问题标题)还是文件字段(问题描述)。
googletorp

@ 7wonders您在问题中添加的内容将作为答案。
kiamlaluno

Answers:


7

确实没有简单的方法,允许的标签列表被硬编码到_field_filter_xss_allowed_tags()function中

反过来field_filter_xss(),这是由调用的,不是将数据保存到数据库时而是在中显示时field_default_form()

幸运的是,有一种方法,但是需要一个小的自定义模块来完成。您基本上是在寻求为该字段的窗口小部件表单实现表单alter hook,并设置元素的描述以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来检查表单更改功能中的对象。

我刚刚测试了上面的内容,并且可以正常工作(我现在有一个表,通常我的文件字段描述会在该表中出现),即使从技术上讲它遵循规则,但感觉还是有点像hack,但希望它能使您了解办法。


效果很好。肯定有人应该创建一个模块来正确执行此操作(这不是我不知道的核心功能!)。
7

@ 7wonders是的,绝对似乎错失了机会,但我认为从开发人员的角度来看,这确实意味着字段模块保持其自己的文本格式,并且可能被认为是过大了。一个自定义选项来更改它会很好。我可能会将其变成一个更有用的模块,并实际上将其发布在drupal.org上,让您发布消息:)
Clive

听起来是一个好主意。当您启动沙箱时,请告诉我,我会很乐意为您测试。

2

如果您使用的是D6,则可以导航到/ admin / settings / filter。在那里,您需要单击“过滤的HTML”的“配置”选项。然后单击配置选项卡。您将看到一个标有“允许的HTML标签”的文本框。在此处输入您需要使用的html标签。

如果是D7,请转到admin / config / content / formats / filtered_html。在“过滤器设置”下,单击“限制允许的HTML标签”标签。在文本框中输入要使用的HTML标记。


我使用D7并相信我,这是我做的第一件事,当它不起作用时,我感到非常震惊!(是的,我也多次清除了缓存)。它确实令人困惑,似乎在我网站的所有帮助文本字段中都是如此。即使我将允许的html过滤器添加到纯文本并添加表tr td,它也不起作用。很烦人。
7wonders 2012年

我刚刚添加了d7全新安装,并可以确认其默认行为。不允许在帮助部分=疯狂中更改标签!哪个钩子可以覆盖此?
7

1
尝试将“完整html”设置为默认输入格式,然后进行检查。
aerozeppelin 2012年

我可以确认使用Drupal 7.10可以更改Filtered HTML的允许标签,并且过滤器的工作方式与“ allowed tags”显示相同。因此,真正的aerozeppelin的答案是正确的。:-)
paul-m

1
但是,如果您阅读Paul的问题,则是关于字段帮助文本中允许使用的标签的,因此答案不正确。
2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.