A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Tutoriais e Programação

Componente 1.5 MVC - Funcionalidade admin

Ter

22

Jan

2008


14:10

(16 votos, média 4.13 de 5) 


A vista Ola

Já temos uma vista para listar todas as mensagens - falta uma vista para mostrar um formulário com apenas uma das mensagens. O propósito desta vista é:

  • buscar os dados no modelo,
  • criar a barra de ferramentas,
  • passar os dados para o template e
  • chamar o método display( ) para mostrar o template.

Como esta vista será usada tanto para inserir mensagens novas quanto para editar uma existente, a coisa fica um pouco mais complicada. Queremos que o usuário saiba se está adicionando ou editando através da barra de ferramentas. Por este motivo precisamos saber qual foi a tarefa solicitada.

Como estamos buscando o registro no modelo, podemos usar estes dados para determinar a tarefa. Se a tarefa for editar, o campo id do registro possui um valor; se a tarefa for adicionar, o campo id do registro é null.

Vamos adicionar dois botões à barra de ferramentas: salvar e cancelar. Se a tarefa for adicionar, o texto do botão cancelar será 'Cancelar'; se for editar, o mesmo botão (com a mesma funcionalidade) terá o texto 'Fechar'.

O código de /views/ola/view.html.php é o seguinte:

get('Dados'); $novo = ($ola->id < 1); $texto = $novo ? JText::_( 'Novo' ) : JText::_( 'Editar' ); JToolBarHelper::title( JText::_( 'Olá' ).': [ ' . $texto.' ]' ); JToolBarHelper::save(); if ($novo) { JToolBarHelper::cancel(); } else { // para itens existentes o botão é renomeado para 'fechar' JToolBarHelper::cancel( 'cancel', 'Fechar' ); } $this->assignRef('ola', $ola); parent::display($tpl); } } ?>

O modelo Ola

A vista Ola precisa de dados. Isto significa que precisamos criar um modelo que os forneça.

Nosso modelo terá duas propriedades: _id e _dados.

setId((int)$array[0]); } /** * Método para definir o identificador do olá * * @access public * @param int Identificador olá * @return void */ function setId($id) { // Define id e limpa os dados $this->_id = $id; $this->_dados = null; } /** * Método para obter um olá * @return objeto com dados */ function &getDados() { // Carrega os dados if (empty( $this->_dados )) { $query = ' SELECT * FROM #__ola '. ' WHERE id = '.$this->_id; $this->_db->setQuery( $query ); $this->_dados = $this->_db->loadObject(); } if (!$this->_dados) { $this->_dados = new stdClass(); $this->_dados->id = 0; $this->_dados->mensagem = null; $this->_dados->published = null; } return $this->_dados; } } ?>

Começamos com um construtor, function __construct( ), que vai tentar obter a id de uma query. Nesta função, o método JRequest::getVar( ) é usado para obter os dados da solicitação. O primeiro parâmetro ('cid') é o nome da variável do formulário; o segundo parâmetro ('0') é o valor default que deve ser atribuído se a variável não for encontrada; o terceiro parâmetro é o hash ('post', 'get', ect) do qual se quer obter o valor e o último ('array') é o tipo de dado que deve ser atribuído ao valor.

Nosso construtor vai pegar o primeiro valor do array cid e atribuí-lo à id. O método setId( ) pode ser usado para definir a id. Quando alteramos o valor da id igualando-o com o valor que o modelo forneceu, os dados ficam desatualizados. É por este motivo que "limpamos" os dados com $this->_dados = null.

Por fim, precisamos de um método para obter os dados. O getDados( ) checa se a propriedade _dados foi populada. Se foi, simplesmente devolve os dados; se não foi, vai buscar os dados na base de dados.

Informações adicionais