Zulässige HTML-Tags ändern: @tags für das Hilfetext-Eingabefeld

11

Ich möchte eine einfache Tabelle unter einem Formularfeld als Teil des Hilfetextes für dieses Feld anzeigen (Dateifeld um genau zu sein). Bin ich total mental oder gibt es wirklich keine einfache Möglichkeit, die zulässigen HTML-Tags für diesen Textbereich zu ändern? Im Moment habe ich angezeigt:

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

Wenn es keinen einfachen Weg gibt, was ist der nächst einfachere Weg, dies zu tun?

AKTUALISIEREN:

Clive hat unten eine großartige Möglichkeit gefunden, dies mit einem benutzerdefinierten Modul zu tun. Sie können dies auch mithilfe von ctools hinzufügen, um den Hilfetext wie folgt zusammenklappbar zu machen:

// 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 Wunder
quelle
Sprechen Sie über ein Textfeld (Titel der Frage) oder ein Dateifeld (Beschreibung der Frage).
googletorp
@ 7wonders Was Sie der Frage hinzugefügt haben, wäre eine gute Antwort.
Kiamlaluno

Antworten:

7

Es gibt keine einfache Möglichkeit, dies wirklich zu tun. Die Liste der zulässigen Tags ist fest in die _field_filter_xss_allowed_tags()Funktion codiert .

Dies wird wiederum aufgerufen field_filter_xss(), nicht wenn die Daten in der Datenbank gespeichert werden, sondern wenn sie in angezeigt werden field_default_form().

Glücklicherweise gibt es einen Weg, aber es wird ein kleines benutzerdefiniertes Modul benötigen, um dies zu tun. Grundsätzlich möchten Sie einen Formularänderungs-Hook für das Widget-Formular des Felds implementieren und die Beschreibung des Elements so festlegen, dass sie filter_xss()mit einem zulässigeren Satz von Tags verwendet wird.

Etwas in diese Richtung:

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

Dies basiert auf der Prämisse, dass Sie nur die neuen Tags für ein aufgerufenes Element zulassen möchten. field_testWenn Sie dasselbe für andere Felder tun möchten, müssen Sie es natürlich ändern, um es an eine andere Bedingung anzupassen. Ich empfehle die Verwendung der hervorragenden dpm()Funktion, die in der Funktion Devel modulezum Überprüfen von Objekten in Ihrem Formular enthalten ist.

Ich habe gerade das Obige getestet und es funktioniert (ich habe jetzt eine Tabelle, in der sich normalerweise meine Dateifeldbeschreibung befindet). Es fühlt sich ein bisschen wie ein Hack an, obwohl es sich technisch an die Regeln hält, aber hoffentlich bringt es Sie auf die Weg.

Clive
quelle
Es hat perfekt funktioniert. Jemand sollte auf jeden Fall ein Modul erstellen, um dies richtig zu machen (wie dies keine Kernfunktion sein kann, weiß ich nicht!).
7 Wunder
@ 7wonders Ja, es scheint definitiv eine verpasste Gelegenheit zu sein, aber ich denke, aus Sicht der Entwickler hätte dies wirklich bedeutet, dass das Feldmodul sein eigenes Textformat beibehält, und das könnte als übertrieben angesehen worden sein. Eine benutzerdefinierte Option zum Ändern wäre allerdings schön gewesen. Ich könnte dies in ein nützlicheres Modul verwandeln und es tatsächlich auf drupal.org veröffentlichen, um Sie auf dem Laufenden zu halten :)
Clive
Klingt wie eine gute Idee. Lassen Sie mich wissen, wenn Sie einen Sandkasten haben und ich werde ihn gerne für Sie testen.
7 Wunder
2

Wenn Sie D6 verwenden, können Sie zu / admin / settings / filter navigieren. Dort müssen Sie auf die Option "Konfigurieren" von "Gefiltertes HTML" klicken. Klicken Sie dann auf die Registerkarte Konfigurieren. Sie erhalten ein Textfeld mit der Bezeichnung "Zulässige HTML-Tags". Geben Sie die HTML-Tags ein, die Sie dort verwenden müssen.

Im Falle von D7 gehen Sie zu admin / config / content / formats / filtered_html. Klicken Sie unter Filtereinstellungen auf die Registerkarte "Zulässige HTML-Tags begrenzen". Geben Sie die HTML-Tags, die Sie verwenden möchten, in das Textfeld ein.

Aerozeppelin
quelle
Ich benutze D7 und vertraue mir, das war das erste was ich tat und war schockiert als es nicht funktionierte! (Ja, ich habe den Cache auch mehrmals geleert). Es ist wirklich verwirrend und scheint in allen Hilfetextfeldern für meine Site der Fall zu sein. Selbst wenn ich den zulässigen HTML-Filter zu einfachem Text hinzufüge und die Tabelle tr td hinzufüge, funktioniert dies nicht. Sehr nervig.
7 Wunder
Ich habe gerade eine d7-Neuinstallation hinzugefügt und kann deren Standardverhalten bestätigen. Es wird nicht erlaubt, Tags im Hilfebereich zu ändern = Wahnsinn! Welcher Haken kann dies überschreiben?
7 Wunder
1
Versuchen Sie, "Full html" als Standardeingabeformat festzulegen, und überprüfen Sie es dann.
Aerozeppelin
Ich kann bestätigen, dass ich die zulässigen Tags für gefiltertes HTML mit Drupal 7.10 ändern konnte, und der Filter funktionierte ebenso wie die Anzeige der zulässigen Tags. Die Antwort von Aerozeppelin ist also wirklich richtig. :-)
Paul-m
1
Wenn Sie jedoch die Frage Paul lesen, bezieht sich dies auf die zulässigen Tags im Hilfetext für ein Feld, sodass die Antwort nicht korrekt ist.
7 Wunder