Ver código-fonte no GitHub
João Paulo Cercal

Software Engineer na Spectrm em Berlim, Alemanha

  • 420 palavras
  • 2 min de leitura
  • PHP

Campos Customizados no painel do Joomla

Olá, hoje tive a necessidade de adicionar um campo personalizado no painel de administração do Joomla 1.6 para uso de um componente que estava desenvolvendo, decidi compartilhar aqui em meu blog a “receita do bolo”.

Este tutorial foi desenvolvido tendo como base a Documentação Oficial do Joomla.

Para criar um tipo de campo customizado para o Joomla 1.6 você deve criar uma classe que extenda de um tipo de campo já definido pelo próprio Joomla (media, text, etc), ou então, a classe base para esta funcionalidade que é “JFormField”.

Os tipos de campos definidos pelo próprio Joomla estão presentes no seguinte diretório:

  • joomla/libraries/joomla/form/fields/

Iremos criar um campo específico para resgatar três cidades, para isso, crie um arquivo chamado “cidade.php” dentro de administrator/components/nome-do-seu-componente/models/fields/cidade.php e adicione o seguinte código:

O nome da classe deve ser prefixado com “JFormField” seguindo do seu nome de arquivo físico que neste caso chama-se “cidade.php”, logo, o nome da classe será “JFormFieldCidade” utilizando o padrão CamelCase.

Dois métodos podem ser implementados pela nossa classe “Cidade”, são eles:

  • getLabel()
  • getInput()

Ambos devem retornar um HTML.

O método protegido getLabel() retornará o label para o nosso campo customizado, ele em muitos casos não é necessário, pois a classe de que extendemos já escreve essa funcionalidade. Em contrapartida, o método getInput(), deve retornar o html do campo, podendo ser por exemplo um input(text, radio, etc), ou select.

Veja como ficou nossa classe:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

// Importa a classe JFormField, da qual iremos extender
jimport('joomla.form.formfield');

class JFormFieldCidade extends JFormField
{
  // O valor da propriedade $type deve conter
  // o sufixo da classe nesse caso "Cidade"
  protected $type = 'Cidade';

  protected function getInput()
  {
    return '<select name="'.$this->name.'">'.
      '<option value="1" >Joinville</option>'.
      '<option value="2" >São Francisco do Sul</option>'.
      '<option value="3" >Itajaí</option>'.
      '</select>'
    ;
  }
}
?>

Dentro do seu código, você terá que processar os atributos definidos pelo usuário na definição do formulário XML. Alguns desses atributos são acessíveis através de variáveis membros protegidas de JFormField.

Por exemplo, o atributo name está disponível em seu código da seguinte forma $this->name. Da mesma maneira está: label, description, default, multiple e class.

Outros parâmetros que você pode ter definido podem ser acessados através de $this->element sendo que este é um array, as chaves desse array são associativas e recebem o nome da propriedade. Por exemplo o atributo size seria acessado assim: $this->element[‘size’].

O seu XML ficaria dessa forma:

1
<field name="cidade" type="cidade" label="Cidade" description="Cidades disponíveis" />