Cambio de etiquetas HTML permitidas: @tags para el campo de entrada de texto de ayuda

11

Quiero mostrar una tabla simple debajo de un campo de formulario como parte del texto de ayuda para ese campo (campo de archivo para ser exactos). ¿Estoy siendo totalmente mental o realmente no hay una manera fácil de cambiar las etiquetas html permitidas para esta área de texto? Por el momento he mostrado:

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

Si no hay una manera fácil, ¿cuál es la siguiente forma más fácil de hacerlo?

ACTUALIZAR:

A Clive se le ocurrió una excelente manera de hacerlo a continuación con un módulo personalizado. También puede agregar a esto usando ctools para hacer que el texto de ayuda sea plegable de la siguiente manera:

// 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);
}
7 maravillas
fuente
¿Está hablando de un campo de texto (título de la pregunta) o un campo de archivo (descripción de la pregunta).
googletorp
@ 7wonders Lo que agregaste a la pregunta sería bueno como respuesta.
kiamlaluno

Respuestas:

7

No hay una manera fácil de hacerlo realmente, la lista de etiquetas permitidas está codificada en la _field_filter_xss_allowed_tags()función .

A su vez, esto se llama field_filter_xss(), no cuando los datos se guardan en la base de datos, sino cuando se muestran en field_default_form().

Afortunadamente, hay una manera, pero se necesitará un pequeño módulo personalizado para hacerlo. Básicamente está buscando implementar un formulario alter hook para el formulario del widget de campo y establecer la descripción del elemento para usar filter_xss()con un conjunto de etiquetas más permisivo.

Algo en este sentido:

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

Eso se basa en la premisa de que solo desea permitir las nuevas etiquetas para un elemento llamado field_test, obviamente, si desea hacer lo mismo para otros campos, deberá cambiarlo para que coincida con una condición diferente. Aconsejo usar la excelente dpm()función incluida en el Devel moduleobjeto para inspeccionar el objeto en su formulario alterar función.

Acabo de probar lo anterior y funciona (ahora tengo una tabla donde normalmente estaría la descripción de mi campo de archivo), se siente un poco como un truco a pesar de que técnicamente se adhiere a las reglas, pero espero que te ayude camino.

Clive
fuente
Funcionó perfectamente. Alguien definitivamente debería crear un módulo para hacer esto correctamente (¡cómo no puede ser una característica central, no lo sé!).
7wonders
@ 7wonders Sí, definitivamente parece una oportunidad perdida, pero supongo que desde el punto de vista de los desarrolladores, esto realmente habría significado que el módulo de campo mantuviera su propio formato de texto y que podría haberse considerado excesivo. Sin embargo, una opción personalizada para cambiarlo hubiera sido agradable. Podría convertir esto en un módulo más útil y publicarlo en drupal.org en realidad, lo mantendré informado :)
Clive
Suena como una buena idea. Avísame cuando hayas instalado un sandbox y felizmente lo probaré por ti.
7wonders
2

En caso de que esté utilizando D6, puede navegar a / admin / settings / filter. Allí debe hacer clic en la opción "configurar" de "HTML filtrado". Luego haga clic en la pestaña configurar. se le presentará un cuadro de texto con la etiqueta "Etiquetas HTML permitidas". Ingrese las etiquetas html que necesita usar allí.

En el caso de D7, vaya a admin / config / content / formatos / filter_html. En Configuración del filtro, haga clic en la pestaña "Limitar etiquetas HTML permitidas". Ingrese las etiquetas HTML que desea usar en el cuadro de texto.

aerozeppelin
fuente
Estoy usando D7 y confía en mí, eso fue lo primero que hice y me sorprendió cuando no funcionó. (Sí, he borrado el caché varias veces también). Es realmente desconcertante y parece ser el caso en todos los campos de texto de ayuda para mi sitio. Incluso si agrego el filtro html permitido al texto sin formato y agrego la tabla tr td, no funciona. Muy molesto.
7wonders
Acabo de agregar una nueva instalación de d7 y puedo confirmar su comportamiento predeterminado. No permitirá cambiar etiquetas en la sección de ayuda = ¡locura! ¿Qué gancho puede anular esto?
7wonders
1
Intente configurar "HTML completo" como formato de entrada predeterminado y luego verifique.
aerozeppelin
Puedo confirmar que pude cambiar las etiquetas permitidas para HTML filtrado con Drupal 7.10, y el filtro funcionó tan bien como la pantalla de 'etiquetas permitidas'. Así que realmente la respuesta de aerozeppelin es correcta. :-)
paul-m
1
Pero si lees la pregunta Paul, se trata de las etiquetas permitidas en el texto de ayuda para un campo, por lo que la respuesta no es correcta.
7wonders