Estendendo Helpers no Kohana Framework

July 31st, 2008 by newton

Os helpers no Kohana Framework não passam de classes estáticas (que não precisam ser instanciadas), e você pode precisar adicionar funcionalidades à um método ou criar suas próprias funcionalidades. Para isso, você vai precisar criar uma extensão do Helper.

O primeiro passo é ir até o diretório da sua aplicação (por padrão ele é chamado application) e criar um diretório chamado helpers, caso ele ainda não exista, claro, e criar um arquivo chamado MY_form.php. É importante ressaltar que o prefixo MY_ pode ser configurado.

No primeiro exemplo, vamos estender o form helper do framework para criar o input date. Neste caso, utilizamos o plugin datePicker para jQuery (biblioteca javascript) onde, para colocar o seletor de data (calendário) ao lado do combo, basta definir uma classe “date-pick” para o elemento HTML. Vamos ao código:

<?php defined('SYSPATH') or die('No direct script access.');
class form extends form_Core
{
	/**
	 * Creates an HTML form input date tag.
	 *
	 * @param string|array input name or an array of HTML attributes
	 * @param string       input value, when using a name
	 * @param string       a string to be attached to the end of the attributes
	 * @return string
	 */
	public static function date($data, $value = '', $extra = '')
	{
		if ( ! is_array($data))
		{
			$data = array('name' => $data);
		}
		// Insere atributo class com valor date-pick
		$data['class'] = (isset($data['class'])) ? $data['class'].' date-pick' : 'date-pick';
		return form::input($data, $value, $extra);
	}
} // End form class

Dessa forma, ao usar o código abaixo, será gerado um input text com a classe “date-pick”, e o jQuery faria todo o serviço:

<?php echo form::date('dt_aniversario'); ?>

Você também não terá problemas caso passe outros atributos:

<?php echo form::date( array('name'=>'dt_aniversario', 'title'=>'Data de Aniversário') ); ?>

Na imagem abaixo segue um exemplo do funcionamento do campo data:

Trabalhando com Triggers no MySQL

April 3rd, 2008 by newton

Não ouço comentários a respeito do uso de Triggers e Stored Procedures no banco de dados MySQL. Talvez por que, quem conheça e utilize estas ferramentas, prefira trabalhar com outros bancos mais robustos como Oracle, SQL Server e há espaço até para o PostgreSQL.

Esses dias, enquanto migrava uma aplicação que uso no trabalho do framework Code Igniter para o Kohana, percebi que poderia poupar código se fizesse a implementação de algumas atividades direto no banco, com o uso de Triggers, que estão disponíveis no MySQL 5.

Minha aplicação possui a entidade Tarefa, com 4 campos de data descritos, de forma que eu consigo controlar quando eu deveria ter iniciado a atividade, e comparar com quando, realmente, isso foi realizado. Os campos são: data prevista de início; data de início realizada; data prevista de término; e data de término realizada.

O problema que eu tinha é que muitas vezes eu precisava replanejar as datas previstas, por um motivo qualquer, como um atraso em uma atividade anterior, que era de responsabilidade do cliente. Então eu simplesmente entrava no sistema e alterava as datas previstas, mas precisava guardar um histórico, armazenando as datas anteriores e o motivo deste replanejamento.

Para resolver isto via código na aplicação, teria que implementar um método “after_save” em tarefas, verificar se houve replanejamento das datas, carregar um objeto entidade Replanejamento, preenche-lo com os dados e salvá-lo. A outra opção foi criar esta trigger no banco de dados:

CREATE TRIGGER log_replanejamento AFTER UPDATE ON tarefas
  FOR EACH ROW
    BEGIN
      IF OLD.dt_inicio_previsto <> NEW.dt_inicio_previsto OR OLD.dt_fim_previsto <> NEW.dt_fim_previsto THEN
        INSERT INTO replanejamentos SET
          tarefa_id = OLD.id,
          dt_inicio_previsto = OLD.dt_inicio_previsto,
          dt_inicio_realizado = OLD.dt_inicio_realizado,
          dt_fim_previsto = OLD.dt_fim_previsto,
          dt_fim_realizado = OLD.dt_fim_realizado,
          dt_replanejamento = NOW(),
          observacao = OLD.observacao;
      END IF;
    END;

Pra quem não está acostumado com a sintaxe das Triggers, uma “tradução” do comando seria: Crie a trigger LOG_REPLANEJAMENTO após atualizações em TAREFAS. Para cada linha, se a data de inicio prevista for diferente da nova data de inicio prevista, OU se a data de fim prevista for diferente da nova data fim prevista, insira na tabela REPLANEJAMENTOS.

Está lá o meu histórico: simples, rápido e indolor. :)

Mais informações no próprio manual do MySQL.

Tutorial do Zend Framework em Português

May 7th, 2007 by newton

Uma das melhores referências do Zend Framework era o tutorial Getting Started With Zend Framework, disponibilizado no Akra’s DevNotes.

O Adler percebeu a dificuldade de muitos desenvolvedores em entender o tutorial, e resolveu traduzí-lo para nossa língua. Você pode baixar a versão traduzida, em PDF, na própria página do tutorial. Ainda não tive tempo de ler, mas parabéns pelo trabalho e iniciativa do Adler.

Mais Zend Framework

April 5th, 2007 by newton

Continuo lendo sobre o Zend Framework internet à fora. Queria agradecer o Adler, que vez ou outra me dá uma força também. :). Bem, seguem dois links úteis para quem quiser, também, se aventurar no ZF:

Estou enfrentando um problema com POST vars e o mod_rewrite. Quando passo um formulário para um endereço tipo http://dominio/controle/metodo/, o array global $_POST vem sempre vazio. Se eu direciono pra http://dominio/index.php funciona normalmente. Até achei uma pessoa com o mesmo problema que eu, mas solução que é bom, até agora nada.

Estou subindo os arquivos pra um servidor Linux pra ver se o problema persiste, já que estou rodando o Apache em uma máquina Windows. Se você já teve algum problema parecido, deixe um comentário para trocarmos algumas idéias, principalmente se tiver a solução. rs.

[Update] No servidor Linux funcionou perfeitamente.

Palestra do grupo BrasilDotNet na Unieuro

March 21st, 2007 by newton

Ontem tive a oportunidade de assistir palestras sobre o Windows Vista, Imagine Cup, Microsoft .NET, ASP.NET e também um overview de Arquitetura de Software.

Porém, a motivação de escrever este post não veio do evento em si, mas sim de algumas das impressões sobre o evento do Daniel Costa.

A primeira é o fato da apresentação da codificação em ASP.NET 2.0 no Visual Studio. Concordo com o Daniel quando ele diz que este tipo de programa não garante qualidade de código. Porém, o mercado hoje está em busca de produtividade, afinal de contas, o usuário não se importa se você fez uma série de IFs aninhados, ou se separou a lógica do programa em métodos e etc. E aí o Visual Studio aparece como uma poderosa ferramenta de apoio ao desenvolvimento, assim como o Delphi para PHP, anunciado pela Borland, pode se tornar uma.

A segunda foi a leve crítica feita ao PHP-DF, que segundo ele está demorando pra sair. Não, não vou defender o grupo nem a posição do Daniel, mas é interessante notar que esse tipo de coisa a Microsoft e a Sun sempre saem na frente, até mesmo na produção de ferramentas de qualidade, que é o investimento. Os próprios integrantes do BrasilDotNet revelaram ter algum, pequeno, apoio da Microsoft, enquanto isso dezenas de empresas são parceiras da Sun pra divulgar o Java, mas a Zend não oferece nenhum tipo de incentivo pra eventos relacionados ao PHP.

Pra terminar, achei interessante as palestras, apesar de terem sido muito corridas. Os próximos eventos que pretendo ir é o 1º PHPDF Pocket e o CodeGear Delphi Tour 2007, onde será apresentado o Delphi for PHP dia 27.

Mais sobre o Lumine

February 8th, 2007 by newton

Eu falei do Lumine uns dias atrás, e acabei instalando para fazer uns testes. Consegui desenvolver uma aplicação de teste, sem dificuldades.

A Engenharia Reversa, pra criar os mapeamentos e classes a partir do Banco de Dados funcionou quase perfeitamente, pois faltaram apenas 2 arquivos de template, gerando 2 warnings na execução do script. Deixei uma mensagem pro Hugo Ferreira no fórum do MXStudio, e ele já disponibilizou uma nova versão no site, com o problema corrigido.

No site do Lumine, que inclusive ganhou um novo visual, existe uma documentação básica pra quem quiser entender o funcionamento básico e começar a trabalhar com ela.

1º Torneio de Desenvolvimento de Games da Microsoft

January 18th, 2007 by newton

Esta notícia passou desapercebida por muita gente, a Microsoft do Brasil abriu inscrições para o 1º Microsoft XNA Challenge Brasil. Não tenho muitos detalhes, mas você pode obter mais informações no site da Abragames para o concurso.

Agradeço o Túlio pela notícia. :).

Rapyd com Code Igniter

January 17th, 2007 by newton

Voltando aos meus estudos do Code Igniter, acabei encontrando no Blog do Deco uma espécie de estensão da framework, que é o Rapyd. Ele oferece uma série de componentes, agilizando ainda mais o desenvolvimento da sua aplicação.

Dei uma olhada rápida até aqui, mas achei bem interessante e já baixei a instalação pra testar mais tarde. Por enquanto você pode ir dando uma olhada também em alguns exemplos e no guia do usuário, que é bem prático, assim com a documentação do CI.

Participe do PHP Throwdown

January 9th, 2007 by newton

Se você programa em PHP e está procurando um pouco de diversão, participe do concurso PHP Throwdown. A tarefa é desenvolver uma aplicação em apenas 24 horas, e você pode se inscrever sozinho ou em equipe.

Se quiser encarar o desafio, é só se registrar e aguardar o dia 27 de Janeiro.

Otimizando pesquisas no MySQL

December 16th, 2006 by newton

Antes de otimizar seus scripts PHP, talvez seja interessante você otimizar o uso do banco de dados, onde, em muitos casos, estão os maiores problemas de performance que você pode encontrar.

No Wiki do MySQL forge, achei uma página com diversas dicas para melhorar a performance no uso do MySQL.

Fechar
Envie por e-mail