ajax

Criando selects dinâmicos com Ajax no Drupal

Recentemente precisei fazer um select dinâmico em ajax usando a API de formulário do Drupal, inicialmente tinha feito um javascript que fazia a chamada para um path do tipo callback onde retornava em JSON os options do select e via javascript mesmo eu alterava o conteúdo dos selects. Porém quando eu submetia o formulário o Drupal dava erro dizendo que a opção escolhida éra inválida.

Isso porque o Drupal faz um cache do formulário assim que você o acessa, e quando submetido ele testa os valores informados com os possíveis valores existentes no cache e não permite que seja diferente, isso é uma proteção muito boa, pois evita que usuários altere uma opção do select utilizando firebug.

Para contornar isso tive que escrever uma função que no momento em que retorna as opções via JSON que serão adicionadas no select também altera formulário cacheado. Veja função artigo_getoptionsforselect.

Abaixo segue o código parcial do meu módulo para entendimento.

Inicialmente somente o primeiro select é populadol com as tags no nível 1.

Divulgar conteúdo