Alterando tags HTML permitidas: @tags para o campo de entrada de texto de ajuda

11

Desejo exibir uma tabela simples sob um campo de formulário como parte do texto de ajuda para esse campo (campo de arquivo para ser exato). Estou sendo totalmente mental ou não há realmente nenhuma maneira fácil de alterar as tags html permitidas para esta área de texto? No momento eu tenho exibido:

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 não houver uma maneira fácil, qual é a próxima maneira mais fácil de fazer isso?

ATUALIZAR:

O Clive criou uma ótima maneira de fazer isso abaixo com um módulo personalizado. Você também pode adicionar isso usando ctools para tornar o texto de ajuda recolhível da seguinte maneira:

// 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);
}
7wonders
fonte
Você está falando de um campo de texto (título da pergunta) ou de arquivo (descrição da pergunta).
googletorp
@ 7wonders O que você adicionou à pergunta seria uma boa resposta.
Kiamlaluno

Respostas:

7

Na verdade, não existe uma maneira fácil de fazer isso, a lista de tags permitidas está codificada na _field_filter_xss_allowed_tags()função .

Por sua vez, isso é chamado field_filter_xss(), não quando os dados são salvos no banco de dados, mas quando são exibidos no field_default_form().

Felizmente, existe uma maneira, mas será necessário um pequeno módulo personalizado. Você basicamente procura implementar um alter hook de formulário para o formulário de widget do campo e definir a descrição do elemento para usar filter_xss()com um conjunto de tags mais permissivo.

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

Isso é baseado na premissa de que você deseja permitir apenas as novas tags para um elemento chamado field_test, obviamente, se você quiser fazer o mesmo para outros campos, precisará alterá-lo para corresponder a uma condição diferente. Aconselho o uso da excelente dpm()função incluída no Devel moduleobjeto para inspecionar na sua forma alter function.

Acabei de testar o que foi dito acima e funciona (agora tenho uma tabela onde normalmente seria a descrição do meu campo de arquivo), parece um hack, mesmo que tecnicamente atenda às regras, mas espero que você consiga maneira.

Clive
fonte
Funcionou perfeitamente. Alguém definitivamente deve criar um módulo para fazer isso corretamente (como isso não pode ser um recurso essencial que eu não conheço!).
7Maravilhas
@ 7wonders Sim, definitivamente parece uma oportunidade perdida, mas acho que, do ponto de vista dos desenvolvedores, isso realmente significaria que o módulo de campo manteria seu próprio formato de texto e que poderia ter sido considerado um exagero. Uma opção personalizada para alterá-lo teria sido legal. Eu poderia transformar isso em um módulo mais útil e postá-lo em drupal.org na verdade, vai mantê-lo informado :)
Clive
Parece uma boa ideia. Avise-me quando você tiver uma caixa de areia e terei prazer em testá-la.
7Maravilhas
2

Caso esteja usando o D6, você pode navegar para / admin / settings / filter. Lá você precisa clicar na opção "configurar" de "HTML filtrado". Em seguida, clique na guia configurar. você receberá uma caixa de texto chamada "Tags HTML permitidas". Digite as tags html que você precisa usar lá.

No caso do D7, vá para admin / config / content / formatos / filtrado_html. Em Configurações do filtro, clique na guia "Limitar tags HTML permitidas". Digite as tags HTML que você deseja usar na caixa de texto.

aerozeppelin
fonte
Estou usando o D7 e confie em mim, essa foi a primeira coisa que fiz e fiquei chocado quando não funcionou! (sim, eu limpei o cache várias vezes também). É realmente desconcertante e parece ser o caso em todos os campos de texto de ajuda do meu site. Mesmo se eu adicionar o filtro html permitido ao texto sem formatação e adicionar a tabela, ele não funcionará. Muito irritante.
7wonders
Acabei de adicionar uma instalação nova do d7 e posso confirmar seu comportamento padrão. Não permitirá alterar tags na seção de ajuda = loucura! Que gancho pode substituir isso?
7wonders
1
Tente definir "HTML completo" como formato de entrada padrão e verifique.
aerozeppelin
Posso confirmar que consegui alterar as tags permitidas para HTML filtrado com o Drupal 7.10, e o filtro funcionou bem como a exibição de 'tags permitidas'. Então, a resposta de verdade do aerozeppelin está correta. :-)
paul-m
1
Mas se você ler a pergunta Paul, é sobre as tags permitidas no texto de ajuda de um campo, para que a resposta não esteja correta.
7wonders