Modifica dei tag HTML consentiti: @tags per il campo di immissione del testo della guida


11

Voglio visualizzare una semplice tabella sotto un campo modulo come parte del testo di aiuto per quel campo (campo file per l'esattezza). Sono totalmente mentale o non c'è davvero un modo semplice per modificare i tag html consentiti per questa area di testo? Al momento ho visualizzato:

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

Se non esiste un modo semplice, qual è il prossimo modo più semplice per farlo?

AGGIORNARE:

Clive ha trovato un ottimo modo per farlo di seguito con un modulo personalizzato. Puoi anche aggiungere a questo usando ctools per rendere il testo della guida pieghevole come segue:

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

Stai parlando di un campo di testo (titolo della domanda) o di un campo file (descrizione della domanda).
googletorp

@ 7wonders Quello che hai aggiunto alla domanda sarebbe buono come risposta.
kiamlaluno

Risposte:


7

Non c'è un modo semplice per farlo davvero, l'elenco dei tag consentiti è codificato nella _field_filter_xss_allowed_tags()funzione .

Questo è a sua volta chiamato da field_filter_xss(), non quando i dati vengono salvati nel database ma piuttosto quando vengono visualizzati in field_default_form().

Fortunatamente c'è un modo ma ci vorrà un piccolo modulo personalizzato per farlo. In pratica stai cercando di implementare un hook di modifica del form per il modulo del widget del campo e impostare la descrizione dell'elemento da utilizzare filter_xss()con un set di tag più permissivo.

Qualcosa del genere:

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

Questo si basa sul presupposto che si desidera consentire solo i nuovi tag per un elemento chiamato field_test, ovviamente se si desidera fare lo stesso per altri campi, è necessario modificarlo in modo che corrisponda a una condizione diversa. Vi consiglio di utilizzare l'eccellente dpm()funzione inclusa Devel modulenell'ispezionare l'oggetto nella vostra funzione di modifica della forma.

Ho appena testato quanto sopra e funziona (ora ho una tabella in cui la mia descrizione del campo file sarebbe normalmente), sembra un po 'un hack anche se tecnicamente si attacca alle regole ma speriamo che ti porti sul modo.


Ha funzionato perfettamente. Qualcuno dovrebbe sicuramente creare un modulo per farlo correttamente (come questo non può essere una caratteristica fondamentale che non conosco!).
7

@ 7wonders Sì, sembra sicuramente un'opportunità persa, ma immagino che dal punto di vista degli sviluppatori questo avrebbe significato che il modulo di campo mantenne il proprio formato di testo e che avrebbe potuto essere considerato eccessivo. Un'opzione personalizzata per cambiarla sarebbe stata carina comunque. Potrei trasformarlo in un modulo più utile e pubblicarlo su drupal.org in realtà, ti terrò informato :)
Clive

Sembra una buona idea. Fammi sapere quando hai installato un sandbox e lo testerò felicemente per te.
7

2

Nel caso in cui si utilizzi D6, è possibile accedere a / admin / settings / filter. Lì devi fare clic sull'opzione "configura" di "HTML filtrato". Quindi fare clic sulla scheda Configura. ti verrà presentata una casella di testo denominata "Tag HTML consentiti". Immettere i tag html che è necessario utilizzare lì.

Nel caso di D7 vai su admin / config / content / format / filtered_html. In Impostazioni filtro, fai clic sulla scheda "Limita tag HTML consentiti". Immettere i tag HTML che si desidera utilizzare nella casella di testo.


Sto usando D7 e fidati di me, questa è stata la prima cosa che ho fatto ed è stato scioccato quando non ha funzionato! (sì, ho anche cancellato la cache più volte). È davvero sconcertante e sembra essere il caso di tutti i campi di testo di aiuto per il mio sito. Anche se aggiungo il filtro html consentito al testo normale e aggiungo la tabella tr td, non funziona. Molto noioso.
7

Ho appena aggiunto una nuova installazione d7 e posso confermare il suo comportamento predefinito. Non consentirà di modificare i tag nella sezione di aiuto = follia! Quale gancio può ignorare questo?
7

1
Prova a impostare "Full HTML" come formato di input predefinito, quindi controlla.
Aerozeppelin,

Posso confermare che sono stato in grado di modificare i tag consentiti per HTML filtrato con Drupal 7.10 e che il filtro ha funzionato così come la visualizzazione dei "tag consentiti". Quindi davvero la risposta dell'aerozeppelin è corretta. :-)
paul-m

1
Ma se leggi la domanda Paul è relativa ai tag consentiti nel testo di aiuto per un campo, quindi la risposta non è corretta.
7
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.