Modification des balises HTML autorisées: @tags pour le champ de saisie de texte d'aide

11

Je souhaite afficher un tableau simple sous un champ de formulaire dans le cadre du texte d'aide pour ce champ (champ de fichier pour être exact). Suis-je totalement mental ou n'y a-t-il vraiment aucun moyen facile de changer les balises html autorisées pour cette zone de texte? Pour le moment, j'ai affiché:

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

S'il n'y a pas de moyen facile, quelle est la prochaine façon la plus simple de le faire?

MISE À JOUR:

Clive a trouvé un excellent moyen de le faire ci-dessous avec un module personnalisé. Vous pouvez également ajouter à cela à l'aide de ctools pour rendre le texte d'aide réductible comme suit:

// 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 merveilles
la source
Parlez-vous d'un champ de texte (titre de la question) ou d'un champ de fichier (description de la question).
googletorp
@ 7wonders Ce que vous avez ajouté à la question serait une bonne réponse.
kiamlaluno

Réponses:

7

Il n'y a pas vraiment de moyen facile de le faire, la liste des balises autorisées est codée en dur dans la _field_filter_xss_allowed_tags()fonction .

Ceci est à son tour appelé par field_filter_xss(), non pas lorsque les données sont enregistrées dans la base de données, mais plutôt lorsqu'elles sont affichées dans field_default_form().

Heureusement, il existe un moyen, mais il faudra un petit module personnalisé pour le faire. Vous cherchez essentiellement à implémenter un crochet de modification de formulaire pour le formulaire de widget du champ et à définir la description de l'élément à utiliser filter_xss()avec un ensemble de balises plus permissif.

Quelque chose dans ce sens:

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

C'est basé sur la prémisse que vous ne voulez autoriser que les nouvelles balises pour un élément appelé field_test, évidemment si vous voulez faire la même chose pour d'autres champs, vous devrez le changer pour qu'il corresponde à une condition différente. Je conseille d'utiliser l'excellente dpm()fonction incluse dans le Devel modulepour inspecter l'objet dans votre fonction de modification de formulaire.

Je viens de tester ce qui précède et cela fonctionne (j'ai maintenant une table où ma description de champ de fichier serait normalement), cela ressemble un peu à un piratage même s'il respecte techniquement les règles, mais j'espère que cela vous mettra sur la façon.

Clive
la source
Cela a parfaitement fonctionné. Quelqu'un devrait certainement créer un module pour le faire correctement (comment cela ne peut pas être une fonctionnalité de base, je ne sais pas!).
7wonders
@ 7wonders Oui, cela semble définitivement une occasion manquée, mais je suppose que du point de vue des développeurs, cela aurait vraiment signifié que le module de terrain conservait son propre format de texte et que cela aurait pu être jugé excessif. Une option personnalisée pour le changer aurait été bien cependant. Je pourrais transformer cela en un module plus utile et le publier sur drupal.org en fait, je vous tiendrai au courant :)
Clive
Ça semble être une bonne idée. Faites-moi savoir quand vous avez installé un bac à sable et je le testerai avec plaisir.
7wonders
2

Si vous utilisez D6, vous pouvez accéder à / admin / settings / filter. Là, vous devez cliquer sur l'option "configurer" de "HTML filtré". Cliquez ensuite sur l'onglet configurer. vous serez présenté avec une zone de texte intitulée "Balises HTML autorisées". Entrez les balises html que vous devez utiliser ici.

Dans le cas de D7, accédez à admin / config / content / formats / filter_html. Sous Paramètres de filtrage, cliquez sur l'onglet "Limiter les balises HTML autorisées". Saisissez les balises HTML que vous souhaitez utiliser dans la zone de texte.

aérozeppéline
la source
J'utilise D7 et croyez-moi, c'était la première chose que j'ai faite et j'ai été choqué quand cela n'a pas fonctionné! (oui j'ai aussi vidé le cache plusieurs fois). C'est vraiment déroutant et semble être le cas sur tous les champs de texte d'aide pour mon site. Même si j'ajoute le filtre html autorisé au texte brut et que j'ajoute le tableau tr td, cela ne fonctionne pas. Très ennuyant.
7wonders
Je viens d'ajouter une nouvelle installation d7 et je peux confirmer son comportement par défaut. Il ne permettra pas de changer de balises dans la section d'aide = folie! Quel crochet peut remplacer cela?
7wonders
1
Essayez de définir «Full html» comme format d'entrée par défaut, puis vérifiez.
aerozeppelin du
Je peux confirmer que j'ai pu modifier les balises autorisées pour HTML filtré avec Drupal 7.10, et le filtre a fonctionné ainsi que l'affichage des «balises autorisées». La réponse d'Aerozeppelin est donc correcte. :-)
paul-m
1
Mais si vous lisez la question Paul, elle concerne les balises autorisées dans le texte d'aide pour un champ, de sorte que la réponse n'est pas correcte.
7wonders