Informática Numaboa - Tutoriais e Programação
Componente 1.5 MVC - Frontend
Dom 20 Jan 2008 23:37 |
- Detalhes
- Categoria: Joomla
- Atualização: Segunda, 02 Julho 2012 19:28
- Autor: vovó Vicki
- Acessos: 20936
Neste tutorial vamos criar nosso "novo" componente "Olá Pessoal" com seu ponto de entrada e, no melhor estilo MVC, seu modelo, vista e controlador.
O componente no frontend
No padrão MVC, o mínimo que o frontend (Aplicação do Site) precisa é de um controlador e de uma vista além de, obviamente, um ponto de entrada. Estes elementos precisam estar em diretórios específicos para que o componente funcione.
Os arquivos necessários são: ola.php (o ponto de entrada), controlador.php (o controlador), view.html.php (a vista) e default.php (o template da vista). Estes scripts ficam nos seguintes diretórios:
components | |- com_ola | |- ola.php |- controlador.php |- views | | ola | | view.html.php | tmpl | |- default.php
O nome dos diretórios views e tmpl não podem ser mudados. O diretório views precisa obrigatoriamente ter um subdiretório com o nome da vista, que no nosso caso será também ola.
Criando o ponto de entrada
O Joomla sempre é acessado através de um único ponto de entrada: index.php para a Aplicação do Site ou administrator/index.php para a Aplicação de Administração. A Aplicação vai carregar o componente solicitado baseada no valor de 'option' na URL e o componente vai realizar a tarefa 'view'. Para o nosso componente a URL é:
index.php?option=com_ola&view=ola
Se o diretório da nossa vista fosse abc ao invés de ola, a URL seria index.php?option=com_ola&view=abc.
Isto vai carregar nosso arquivo principal, que pode ser visto como o único ponto de entrada do nosso componente: components/com_ola/ola.php.
O código dos arquivos de entrada são muito parecidos, seja qual for o componente. O código do arquivo ola.php é o seguinte:
Seguem as explicações do código deste primeiro script:
- Como sempre, como medida de segurança, a primeira linha do código é para evitar acesso direto ao script. Isto evita que uma chamada http://www.seusite.com.br/components/com_ola/ola.php execute o script. A coisa só funciona com uma chamada como a mostrada acima.
- JPATH_COMPONENT é o caminho (path) absoluto para o componente em questão - no nosso caso, components/com_ola. Se você precisar especificamente do componente do Site ou do componente da Administração, você pode usar JPATH_COMPONENT_SITE ou JPATH_COMPONENT_ADMINISTRATOR.
- DS é um separador de diretório do sistema: pode ser '/' ou '\'. Isto é definido automaticamente pelo framework para que o programador não precise se preocupar com exigências de diferentes sistemas operacionais.
- Quando incluímos o controlador básico, na verdade incluímos uma classe. Uma classe nada mais é do que um modelo para que se possa criar um objeto. Como sabemos que vamos precisar do objeto controlador, este será nosso próximo passo.
- Decidimos que o nome da nossa classe controlador será OlaController. Este é um padrão de nome: um nome qualquer seguido por 'Controller'. Pode ser xyzController, 123Controller e até OlaController que, vamos e venhamos, é melhor porque identifica o componente
- Mais uma coisa sobre os nomes. O sistema não se importa com letras maiúsculas ou minúsculas, mas tome cuidado com espaços e letras acentuadas. Evite-as para não ter dor de cabeça.
- Escolhido o nome do controlador, este é atribuído a uma variável. Neste exemplo, $nomeclasse = 'OlaController'.
- A seguir, criamos o objeto controlador e o atribuímos a $controlador com $controlador = new $nomeclasse. Aí surge uma pergunta: porque não criar o objeto usando diretamente o nome que escolhemos? Porque $controlador = 'OlaController' não é aceito pelo sistema - o nome precisa ser comunicado através de uma variável.
- Como já dispomos de um objeto controlador, podemos botá-lo para trabalhar. Vamos usar um dos seus métodos para chamar uma função de um outro objeto, o JRequest. Isto é feito com $controlador->execute( ).
- JRequest::getVar( ) encontra uma variável numa URL. Se nossa URL for index.php?option=com_ola&view=ola, então esta função devolve a tarefa (task) 'view' cujo valor é 'ola'. O controlador guarda esta tarefa e está pronto para continuar.
- Agora é só pedir para o controlador que redirecione nosso código de acordo com a tarefa solicitada: $controlador->redirect().
Criando o controlador
Nosso componente, por enquanto, tem apenas uma função - colocar "Olá pessoal!" na tela. Para fazer apenas isto, vai precisar de um controlador muito simples. Como ainda não é necessário manipular dados, o controlador só precisa carregar a vista apropriada. Por este motivo, precisamos apenas do método display( ) e, como tudo o que precisamos já está na classe JController, a única coisa a ser feita é chamar o método JController::display( ).
Aqui está o código do controlador.php:
Depois do código de segurança testando _JEXEC, a primeira coisa a fazer é importar um arquivo do framework que é necessário para nosso componente. O arquivo em questão é libraries/joomla/application/component/controller.php que é incluído no nosso script através da função jimport. Os pontos '.' no parâmetro são usados como separadores de diretórios. Este arquivo contém todas as definições da classe JController, o que é necessário para poder estender esta classe.
O construtor JController sempre registra uma tarefa display( ) e, se não for especificado de outra forma (usando o método registerDefaultTask( ) do JController), esta tarefa é a default. Por este motivo, a função display( ), que apenas chama a mesma função da classe mãe, nem precisaria estar no nosso controlador... é chover no molhado. Mesmo assim, vamos deixá-la aí para mostrar o que o nosso controlador está fazendo.
O método JController::display( ) determina o nome da vista e do layout através da solicitação feita. Com esta informação ele carrega a vista apropriada e esta é arrumada de acordo com o que for especificado no layout. No nosso componente temos apenas uma vista chamada ola e apenas um layout, o default.
Criando a vista
A tarefa da vista também é muito simples: ela busca os dados que devem ser apresentados e os coloca no template usando o método JView::assignRef( ).
O código da vista view.html.php é:
Primeira providência: importar a classe JView para que possamos estendê-la.
Aqui novamente a convenção de nome da classe: nome do controlador (Ola) + tarefa (View) + nome (diretório) da vista (Ola) ou seja, nossa classe precisa chamar-se OlaViewOla (não existe diferença entre maiúsculas e minúsculas, mas não use espaços ou letras acentuadas!).
Nossa classe estende a classe JView com uma função display( ). Esta função pode receber um parâmetro, o $tpl. Se for chamada sem o parâmetro, $tpl será null e, se $tpl=null, o template default.php será utilizado.
Nesta função criamos a variável $falaOla e lhe atribuímos o valor 'Olá pessoal!'. A seguir, colocamos no OlaViewOla (que nada mais é do que o JView ampliado) a referência 'saudacao' cujo valor deve ser o mesmo da variável $falaOla com $this->assignRef( 'saudacao', $falaOla ). Esta referência é uma nova propriedade da classe.
Tudo pronto! Agora chamamos a classe mãe para jogar o template na tela com parent::display($tpl).
Criando o template
Templates (ou layouts) do Joomla são arquivos PHP usados para apresentar dados da vista numa determinada forma. As variáveis atribuídas através do método JView::assignRef podem ser acessadas pelo template através de $this->NomeDaPropriedade.
Nosso template default.php tem o seguinte código:
saudacao; ?>
Observe que código PHP acaba logo depois do código para evitar o acesso direto. Depois disto, é HTML puro.
Pondo a coisa para funcionar
Antes de querer instalar o componente, é bom testá-lo meio na raça. Acesse seu site e crie os diretórios e arquivos necessários conforme mostrado neste tutorial. Depois, abra seu browser e chame o componente com http://www.seusite.com.br/index.php?option=com_ola&view=ola. Se tudo estiver em riba, o resultado deve ser parecido com este:
Finalmentes
Considere-se diplomado em VC
Este é o primeiro grau do MVC porque ainda ficou faltando o model, mas tudo gira em torno deste princípio. Se você entendeu a mecânica da coisa, criar o frontend completo, assim como o backend, vai ser bico!
Índice da série de tutoriais Componente 1.5 MVC
- Componente 1.5 - Padrão MVCComponente 1.5 - Padrão MVC
- Componente 1.5 MVC - Frontend
- Componente 1.5 MVC - Frontend II
- Componente 1.5 MVC - A tabela
- Componente 1.5 MVC - Interface Admin
- Componente 1.5 MVC - Funcionalidade admin
- Componente 1.5 MVC - Funcionalidade admin II
Referências
Hello World MVC 1 Component - The frame