Custom Filter - criando suas tags HTML personalizadas

Enviado por Yukare em quinta-feira, 3 de Agosto de 2017 - 18:10
Importante: no site atualmente este módulo não esta instalado(a versão para Drupal 8 ainda esta incompleta), então o exemplo não irá funcionar corretamente.

O objetivo deste artigo é instalar o módulo Custom Filter, ele permite que você crie seu próprio filtro de texto. Um filtro de texto serve para que você escreva um node de uma maneira e ele seja alterado antes de ser apresentado ao usuário. por exemplo, o Drupal possui um filtro de texto por padrão para filtrar o conteúdo HTML inserido pelos usuários para um conjunto menor e mais seguro. Outro exemplo de utilização de filtros, você pode ver no manual do phpDocumentor, onde os códigos PHP possuem destaque de cor graças a utilização de filtros.

O exemplo que vou fazer é mais simples, mas no entanto abre caminho para qualquer modificação do gênero. O que vou mostrar é como criar uma tag personalizada, veja o que eu escrevo(sem o espaço entre o [ e aviso):

[aviso]Aviso!<br/>Exemplo de aviso[/aviso]

E é transformado em:

Aviso!
Exemplo de aviso

Você pode criar as suas próprias tags e mudar a saída para o que quiser, vamos então faze-lo, o primeiro passo é instalar o módulo necessário, ele pode ser obtido em https://drupal.org/project/customfilter, vamos copiar e instalar a versão 7.1. A instalação do módulo é feita da mesma maneira de todos os outros módulos do Drupal.

Agora a parte complicada, a configuração. No menu Configurações, vá em Criação de Conteúdo, Filtros Personalizados. Agora clique em Adicionar. Em "Tipo" preencha o nome do filtro, este será o nome usado internamente, então escolha algo simples. Em "Nome", é o nome conforme vai aparecer para o filtro, use algo descritivo. Deixe a caixa de cache desmarcada por enquanto. Ela indica quando fazer ou não cache do filtro. Deixe desmarcada para que as alterações feitas no filtro aparecem imediatamente. Depois que você já tenha testado o filtro e ele esteja funcionando corretamente você poderá marca-la. Os outros campos abaixo são opcionais. Salve agora este novo filtro. Você irá voltar agora a tela anterior, mas terá o novo filtro na lista.

Clique sobre o nome do filtro(não no link edit ao lado dele). Estamos na pagina de regras, são estas regras que indicaram qual texto iremos procurar e pelo que iremos substituir ele. Clique em Adicionar Regra. Prencha um nome e a descrição para esta regra. Em Pattern: iremos colocar qual texto ou expressão regular estamos procurando, neste caso, estou usando:

/\[aviso\]([.\s\S]*?)[\/aviso\]/

Esta parte pode ser bem complicada, porque é necessário conhecer expressões regulares para saber o que exatamente usar em patterm, mesmo para mim não foi fácil. Mas você pode usar o que eu fiz acima como exemplo, substitua a palavra aviso nos dois locais que ela aparece pela palavra que você quiser usar na tag.

Replacement text: é o texto pelo qual você quer que seja substituído, pode ser texto simples(ou HTML), ou então resultado de código PHP(Neste caso é necessário marcar a caixa de seleção onde diz Código PHP). No meu exemplo, irei utilizar PHP, então marquei a caixa. O que eu usei foi:

$result = '<div style="background-color:#FFF296;"> <img src="/sites/default/files/imagens/notice-note.png" style="float: left; margin-left: 5px; margin-right: 5px;" \>' . $matches[1] . '</div>'; return $result;

Detalhes importantes aqui. Coloque todo o conteúdo que será utilizado para a substituição na variavél $result, é necessário que ela tenha exatamente este nome. No final, use um return para retornar ela.

A variável $matches[1] contem o conteúdo que esta entre as tags.

Depois disso devemos salvar esta regra. Com os passos acima nós criamos o filtro, e também indicamos o que ele deveria fazer. Agora precisamos configurar o Drupal para que ele utilize este filtro.

O Drupal trabalha com o conceito de formatos de entrada. O conteúdo salvo no banco de dados é o mesmo, mas ele pode passar por filtros que alteram ele. Existem vários conjuntos de filtros, é exatamente um conjunto de filtros que é chamado um formato de entrada. Agora que nós criamos um filtro, precisamos modificar os formatos de entrada existentes para que nosso filtro seja executado neles. Vou mostrar como fazer no formato "Full HTML", mas o procedimento é igual para todos. No menu Configurações, Criação de Conteúdo, Formatos de Texto, Full HTML. Clique em Configurar ao lado do formato que você queira editar. Em Filtros Ativados, basta ativar o filtro que você criou e depois salvar as configurações. Os filtros funcionam em uma ordem determinada, sendo que cada um processa o resultado do filtro anterior. Dependendo do que seu filtro faça, ele pode ter os resultados alterados por um filtro posterior, ou então ter as suas tags alteradas antes que ele seja chamado, fazendo com que ele não funcione. O meu caso eu tive que modificar a ordem dos filtros para que ele fosse o primeiro a ser executado. Na local que for configurar o formato de entrada, clique em "rearranjar" para poder ordenar os filtros.

Caso você precise fazer várias modificações parecidas no texto, você pode usar o mesmo filtro e ir apenas adicionado regras. Um detalhe importante quando o seu filtro tiver mais de uma regra é que ele será executado sobre o resultado do filtro anterior, ou seja, a segunda regra irá trabalhar com o conteúdo do resultado da primeira regra, e assim por diante.

Com um pouco de trabalho e utilizando este módulo, você pode fazer algo como um filtro para interpretar código em bbcode por exemplo.