| Índice do Artigo |
|---|
| Componente 1.5 MVC - Funcionalidade admin |
| Controlador Ola |
| Vista e Modelo Ola |
| Formulário Ola |
| Todas as páginas |
Neste ponto terminou o "lifting" do template. Pois prepare-se, porque agora é que começa o trabalho realmente pesado.
O controlador Ola
Para os olás na área administrativa já temos um controlador, mas este consegue apenas mostrar a lista das mensagens existentes na base de dados. Agora precisamos de um novo controlador que mostre um olá específico indicado pelo usuário e que coordene as ações de adicionar novos olás além de editar e remover olás existentes.
Adicionar e editar olás são tarefas muito parecidas - ambas apresentam uma tela com um formulário de edição. A diferença é que um novo olá precisa de um formulário em branco e um olá existente que esteja sendo editado mostre o mesmo formulário preenchido. Como as duas tarefas são semelhantes, vamos mapear a tarefa adicionar (novo) para o manipulador de edição. Isto será especificado no construtor do nosso controlador que vai se chamar ola.php e será uma extensão do controlador principal, o OlasController. Crie um novo diretório, /administrator/com_ola/controllers e coloque neste diretório o novo controlador:
<?php /** * @package Joomla.Tutoriais * @subpackage Componentes * administrator/components/com_ola/controllers/ola.php * @link http://www.numaboa.com/ * @license Creative Commons by-nc-sa */ // evitar acesso direto defined( '_JEXEC' ) or die( 'Acesso restrito' ); jimport('joomla.application.component.controller'); /** * Controlador do Componente Ola */ class OlasControllerOla extends OlasController { /** * constructor (registra tarefas adicionais em métodos existentes) * @return void */ function __construct() { parent::__construct(); // Registrar tarefas extras $this->registerTask( 'add', 'edit' ); }
/** * Método para mostrar a vista * * @access public */ function display() { parent::display(); } /** * mostrar o formulário de edição * @return void */ function edit() { JRequest::setVar( 'view', 'ola' ); JRequest::setVar( 'layout', 'formulario' ); JRequest::setVar( 'hidemainmenu', 1); parent::display(); } ?>
Este construtor registra tarefas adicionais em métodos existentes. O primeiro parâmetro de JController::registerTask( ) é a tarefa que deve ser mapeada, o segundo é o método para o qual deve ser mapeado.
Começamos apenas com a tarefa edit e por isso o trabalho do controlador é bastante simples. Tudo o que ele precisa fazer é especificar a vista e o template que devem ser carregados (a vista ola e o layout do formulário que ainda precisamos fazer). Também dizemos ao Joomla que desative o menu principal enquanto estivermos editando. Isto é para evitar que o usuário saia da tela de edição sem salvar alterações que possa ter feito.
Trazendo o novo controlador para a cena
Antes de criarmos o novo controlador ola.php, nosso componente possuía apenas um controlador (o principal). Quem chama os controladores é o script de entrada do nosso componente (administration/components/com_ola/admin.ola.php). Acontece que, como está no momento, ele desconhece a presença de outros controladores além do principal. Precisamos informá-lo de que existe um segundo, o ola.php que acabamos de produzir. Veja como fazer isto:
<?php /** * @package Joomla.Tutoriais * @subpackage Components * administration/components/com_ola/admin.ola.php * @link http://www.numaboa.com/ * @license Creative Commons by-nc-sa */ // evitar acesso direto defined( '_JEXEC' ) or die( 'Acesso restrito' ); // Requer o controlador base require_once( JPATH_COMPONENT.DS.'controlador.php' );
Inserir - Quando houver mais controladores, basta obter seus nomes através do método JRquest::getVar('controller'). Se nenhum 'controller' for especificado na URL, então o principal será acionado. Caso seja especificado outro controlador, então precisamos obter sua localização com:
// Requerer controlador específico se solicitado if($controlador = JRequest::getVar('controller')) { require_once (JPATH_COMPONENT.DS.'controllers'.DS.$controlador.'.php'); }
Alterar - Caso exista outro controlador estendendo o controlador principal, buscar o nome da classe para depois acioná-la:
// Criar o controlador $nomeclasse = 'OlasController'.$controlador;
$controlador = new $nomeclasse( ); // Obtém a tarefa solicitada $controlador->execute( JRequest::getVar( 'task' ) ); // Redireciona de acordo com a tarefa $controlador->redirect(); ?>






3642 registros
2 hoje
12 nesta semana
19 neste mês