<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>HUFERSIL.WEBDEVELOPER - Soluções em desenvolvimento Web - Tecnologia - TI</title>
<description>PHP, Lumine Framework e afins</description>
<link>http://www.revistaphp.com.br</link>
<language>pt-br</language><item>
<title><![CDATA[Lumine 1.5.5]]></title>
<description><![CDATA[<p>Confira o changelog:</p>
<p>- se o usuario informou um tamanho minimo, mas nao o maximo, o maximo passa a ser o do campo (Lumine_Validator_PHPValidator::addValidation::requiredString)<br />
- adicionado evento para antes e depois de efetuar um fetch (Lumine_IteratorEvent)<br />
- complemento de enumeracao de validadores (Lumine_Validator)<br />
- no modelo da engenharia reversa, as aspas duplas dos campos foram substituidos por aspas simples<br />
- nos metodos save, update e insert, quando o valor do campo eh maior que o seu comprimento, o valor eh truncado<br />
- criado o metodo _initialize para models<br />
- Alterado para que no setFrom ele tambem atribua valores aos campos de relacionamentos estrangeiros (_foreign)<br />
- Bug corrigido: quando havia varios niveis de lazy, so estava trazendo o primeiro nivel (encontrado por Esdras Eduardo)<br />
- Bug corrigido: no form White, quando se vinculava um M-N em um novo registro dava problema de integridade referencial <br />
- Util alterado para utilizar preg_match ao inves de ereg para checar email</p>
<p><a href="http://www.hufersil.com.br/lumine/downloads">Est&aacute; dispon&iacute;vel na se&ccedil;&atilde;o de downloads</a>!</p>]]></description>
<lastBuildDate><![CDATA[Qui, 25 de fevereiro de 2010 - as 17h11]]></lastBuildDate>
<link>http://www.hufersil.com.br/post/lumine_1_5_5</link>
</item>
<item>
<title><![CDATA[Lumine e TCPDF]]></title>
<description><![CDATA[<p>Em v&aacute;rios projetos que participo, uma das coisas mais solicitadas  s&atilde;o relat&oacute;rios gerenciais. Em sua grande maioria, s&atilde;o solicitados em 3  formatos: HTML, PDF e Excel.</p>
<p>Vamos analisar como fazer os dois &uacute;ltimos: PDF e Excel. Neste post, estudaremos PDF, e em um post futuro, sobre Excel.</p>
<!-- more -->
<p>Para come&ccedil;ar, baixe as vers&otilde;es mais recentes de <a href="http://www.hufersil.com.br/lumine/downloads">Lumine </a>e da biblioteca <a href="http://sourceforge.net/projects/tcpdf/files/">TCPDF</a>. O banco de dados que vamos utilizar ser&aacute; o MySQL 5.</p>
<p>Iremos  trabalhar com uma estrutura de relat&oacute;rios de funcion&aacute;rios e  departamentos. Abaixo est&atilde;o as SQL's para criar as tabelas necess&aacute;rias:</p>
<pre class="brush: sql">
CREATE TABLE  `departamento` (
  `id_departamento` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id_departamento`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;


CREATE TABLE  `funcionario` (
  `id_funcionario` int(11) NOT NULL AUTO_INCREMENT,
  `id_departamento` int(11) NOT NULL,
  `nome` varchar(200) DEFAULT NULL,
  `data_nascimento` date DEFAULT NULL,
  `rg` varchar(12) DEFAULT NULL,
  `cpf` varchar(11) DEFAULT NULL,
  PRIMARY KEY (`id_funcionario`),
  KEY `id_departamento` (`id_departamento`),
  CONSTRAINT `funcionario_ibfk_1` FOREIGN KEY (`id_departamento`) REFERENCES `departamento` (`id_departamento`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=71 DEFAULT CHARSET=latin1;
</pre>
<p>Depois de criar as tabelas no banco, voc&ecirc; poder&aacute; criar as classes de Lumine a partir da <a href="http://www.hufersil.com.br/lumine/engenharia_reversa">engenharia reversa</a>. Preencha os dados conforme sua necessidade e clique em &quot;gerar classes&quot;, na aba &quot;tabelas&quot;:</p>
<p><img width="774" height="348" src="http://www.hufersil.com.br/imagens/tcpdf1.jpg?" alt="" /></p>
<p>Depois, abra a pasta onde voc&ecirc; selecionou para ser seu projeto, crie um arquivo de inicializa&ccedil;&atilde;o semelhante ao abaixo:</p>
<pre class="brush: php" name="code">
&lt;?php

// altera o timezone padrao
date_default_timezone_set('America/Sao_Paulo');
// carrega as configuracoes de lumine
require_once 'lumine-conf.php';
// carrega a biblioteca Lumine
require_once 'lumine/Lumine.php';
// carrega a biblioteca TCPDF
require_once 'tcpdf/tcpdf.php';

// inicializa lumine
$cfg = new Lumine_Configuration($lumineConfig);

// registra lumine para fechar a conexao quando terminar o script
register_shutdown_function(array($cfg-&gt;getConnection(),'close'));
// registra lumine para auto importar as classes quando nao estiverem carregadas
spl_autoload_register(array('Lumine', 'import'));
</pre>
<p>Este ser&aacute; o arquivo que vamos carregar sempre que quisermos utilizar em outras partes do projeto, pois ele j&aacute; ir&aacute; trazer todas as configura&ccedil;&otilde;es necess&aacute;rias para que possamos efetuar as tarefas que precisamos. Salve este arquivo com o nome de &quot;<strong>config.php</strong>&quot; na mesma pasta que o arquivo &quot;<strong>lumine-conf.php</strong>&quot;, que foi gerado pela engenharia reversa.</p>
<p>Para geramos o PDF, vamos dividir o arquivo PHP em duas partes: a primeira, ir&aacute; fazer a consulta no banco de dados, recuperar o resultado em HTML (que ser&aacute; gerado pelo segundo arquivo) e gerar o PDF utilizando a TCPDF. Separando desta forma, fica mais f&aacute;cil para darmos manuten&ccedil;&atilde;o em nosso arquivo que ser&aacute; o respons&aacute;vel por gerar o PDF.</p>
<p><strong>Parte 1</strong> - Arquivo &quot;report.php&quot;</p>
<pre class="brush: php" name="code">
&lt;?php

require_once 'config.php';

// instanciamos as classes
$funcionario = new Funcionario();
$dep = new Departamento();

// mudamos o alias de funcionario
$funcionario-&gt;alias('f')
	// unimos com departamento
	-&gt;join($dep,'inner','d')
	// selecionamos somente os campos de funcionario
	-&gt;selectAs()
	// adicionamos na selecao o nome do departamento
	-&gt;select('d.nome as departamento')
	// ordem dos resultados
	-&gt;order('d.nome, f.nome')
	// efetuamos a consulta
	-&gt;find();
	
// colocamos o resultado em um array
$result = $funcionario-&gt;allToArray();

// evitamos que qualquer saida va para o browser
ob_start();
// incluindo o HTML do relatorio
include 'report_result.php';
// pegamos o conteudo do buffer e limpamos
$html = ob_get_clean();
// encerramos e limpamos o buffer
ob_end_clean();

// inicia a classe de PDF
$pdf = new TCPDF('L');
// adicionamos uma pagina
$pdf-&gt;AddPage();
// escrevemos o html
$pdf-&gt;writeHTML($html);
// enviamos o PDF
$pdf-&gt;Output('relatorio.pdf','I');
</pre>
<p>Como &eacute; poss&iacute;vel notar, simplesmente executamos nesta primeira parte um script em PHP. Na segunda, iremos mesclar o PHP com HTML, por&eacute;m neste segundo teremos somente c&oacute;digos para gerar o conte&uacute;do din&acirc;mico, como aplicamos normalmente as p&aacute;ginas:</p>
<p><strong>Parte 2</strong> - Arquivo &quot;report_result.php&quot;</p>
<pre class="brush: php" name="code">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;?php
// estilos que ser&atilde;o usados nas tags TD
$style = 'style=&quot;font-size: 7pt&quot;';
?&gt;
&lt;table width=&quot;100%&quot; border=&quot;0&quot; cellspacing=&quot;1&quot; cellpadding=&quot;2&quot;&gt;
  &lt;tr&gt;
    &lt;td &lt;?php echo $style; ?&gt; width=&quot;6%&quot; bgcolor=&quot;#CCCCCC&quot;&gt;&lt;strong&gt;C&oacute;digo&lt;/strong&gt;&lt;/td&gt;
    &lt;td &lt;?php echo $style; ?&gt; width=&quot;35%&quot; bgcolor=&quot;#CCCCCC&quot;&gt;&lt;strong&gt;Funcion&aacute;rio&lt;/strong&gt;&lt;/td&gt;
    &lt;td &lt;?php echo $style; ?&gt; width=&quot;17%&quot; bgcolor=&quot;#CCCCCC&quot;&gt;&lt;strong&gt;Departamento&lt;/strong&gt;&lt;/td&gt;
    &lt;td width=&quot;14%&quot; align=&quot;center&quot; bgcolor=&quot;#CCCCCC&quot; &lt;?php echo $style; ?&gt;&gt;&lt;strong&gt;RG&lt;/strong&gt;&lt;/td&gt;
    &lt;td width=&quot;13%&quot; align=&quot;center&quot; bgcolor=&quot;#CCCCCC&quot; &lt;?php echo $style; ?&gt;&gt;&lt;strong&gt;CPF&lt;/strong&gt;&lt;/td&gt;
    &lt;td width=&quot;15%&quot; align=&quot;center&quot; bgcolor=&quot;#CCCCCC&quot; &lt;?php echo $style; ?&gt;&gt;&lt;strong&gt;Data de nascimento&lt;/strong&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;?php
  // cor da linha
  $cor = '';
  // para cada item do resultado
  foreach($result as $item): 
    // mudamos a cor para fazer zebrado
  	$cor = $cor == '#EFEFEF' ? '#FFFFFF' : '#EFEFEF';
  ?&gt;
  &lt;tr&gt;
    &lt;td &lt;?php echo $style; ?&gt; width=&quot;6%&quot; bgcolor=&quot;&lt;?php echo $cor; ?&gt;&quot;&gt;&lt;?php echo $item['idFuncionario']; ?&gt;&lt;/td&gt;
    &lt;td &lt;?php echo $style; ?&gt; width=&quot;35%&quot; bgcolor=&quot;&lt;?php echo $cor; ?&gt;&quot;&gt;&lt;?php echo $item['nome']; ?&gt;&lt;/td&gt;
    &lt;td &lt;?php echo $style; ?&gt; width=&quot;17%&quot; bgcolor=&quot;&lt;?php echo $cor; ?&gt;&quot;&gt;&lt;?php echo $item['departamento']; ?&gt;&lt;/td&gt;
    &lt;td width=&quot;14%&quot; align=&quot;center&quot; bgcolor=&quot;&lt;?php echo $cor; ?&gt;&quot; &lt;?php echo $style; ?&gt;&gt;&lt;?php echo $item['rg']; ?&gt;&lt;/td&gt;
    &lt;td width=&quot;13%&quot; align=&quot;center&quot; bgcolor=&quot;&lt;?php echo $cor; ?&gt;&quot; &lt;?php echo $style; ?&gt;&gt;&lt;?php echo $item['cpf']; ?&gt;&lt;/td&gt;
    &lt;td width=&quot;15%&quot; align=&quot;center&quot; bgcolor=&quot;&lt;?php echo $cor; ?&gt;&quot; &lt;?php echo $style; ?&gt;&gt;&lt;?php echo date('d/m/Y', strtotime($item['dataNascimento'])); ?&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;?php endforeach; ?&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Acesse o arquivo &quot;report.php&quot; via URL para ver o resultado!</p>
<p>Para baixar os arquivos, <a href="http://www.hufersil.com.br/lumine/exemplos">acesse a se&ccedil;&atilde;o de exemplos</a>.</p>
<p>@bra&ccedil;os e fique com Deus!</p>]]></description>
<lastBuildDate><![CDATA[Dom, 24 de janeiro de 2010 - as 18h24]]></lastBuildDate>
<link>http://www.hufersil.com.br/post/lumine_tcpdf</link>
</item>
<item>
<title><![CDATA[Exemplo da Loja Atualizado]]></title>
<description><![CDATA[<p>Atualizei os arquivos da loja de exemplo que utiliza Lumine.</p>
<p>Os arquivos est&atilde;o dispon&iacute;veis na <a href="http://www.hufersil.com.br/lumine/exemplos">sess&atilde;o de exemplos</a>.</p>]]></description>
<lastBuildDate><![CDATA[Ter, 19 de janeiro de 2010 - as 22h43]]></lastBuildDate>
<link>http://www.hufersil.com.br/post/exemplo_atualizado</link>
</item>
<item>
<title><![CDATA[De volta as atividades]]></title>
<description><![CDATA[<p>Fala galera!</p>
<p>Agora, um ano mais velho (fiz anivers&aacute;rio ontem, dia 06), estamos de volta as atividades.<br />
Lumine promete muitas coisas para este novo ano!</p>
<p>@bra&ccedil;os e fiquem com Deus!</p>]]></description>
<lastBuildDate><![CDATA[Qui, 07 de janeiro de 2010 - as 14h27]]></lastBuildDate>
<link>http://www.hufersil.com.br/post/de_volta_atividades</link>
</item>
<item>
<title><![CDATA[Lumine 1.5.4]]></title>
<description><![CDATA[<p>Fala galera!</p>
<p>Esta nova vers&atilde;o traz algumas melhorias beeeem bacanas e tamb&eacute;m um novo modelo de formul&aacute;rio de engenharia reversa. Bem melhor e mais bonito!<br />
Abaixo o changelog</p>
<p>- se o mapeamento tiver a opcao &quot;displayField&quot;, este campo sera usado para poder exibir o campo correspondente na classe que esta sendo unida no formulario &quot;White&quot;<br />
- opcao para poder marcar um campo como nulo no novo modelo de formulario de controle basico<br />
- novo modelo de formularios (White) ficou como padrao da engenharia reversa<br />
- novo modelo de formularios para engenharia reversa (White)<br />
- Metodo de analise de clausulas where, para prepared statements, aperfeicoada (gra&ccedil;as ao Juliano Polito que n&atilde;o fez nada mas encheu o saco para fazer isso!)<br />
- Alterado no dialeto do mysql para que mude de timestamp para datetime no mapeamento quando gerando pelo engenharia reversa<br />
- Adicionada a opcao de formatar o nome da classe com sprintf, assim pode-se colocar prefixo/sufixo</p>
<p><br />
<a href="/lumine/downloads">Baixe agora a nova vers&atilde;o!</a><br />
&nbsp;</p>
<p>@bra&ccedil;os e fiquem com Deus!</p>]]></description>
<lastBuildDate><![CDATA[Seg, 30 de novembro de 2009 - as 21h15]]></lastBuildDate>
<link>http://www.hufersil.com.br/post/lumine_154</link>
</item>
<item>
<title><![CDATA[Lumine 1.5.3]]></title>
<description><![CDATA[<p>Est&aacute; dispon&iacute;vel a <a href="/documentacao/downloads">nova vers&atilde;o de Lumine</a>.</p>
<p>Confira o que mudou:</p>
<p>1.5.3<br />
- correcao no metodo Lumine::factory - para poder adicionar os itens default e sequence quando existirem<br />
- correcao na engenharia reversa do postgres - nao duplicar registros na consulta<br />
- correcao para poder pegar o valor do campo quando for inserir e o valor nao foi definido<br />
- adicionado o metodo Lumine_Configuration::loadModel<br />
- bug corrigido no selectAs</p>
<p>&nbsp;</p>
<p>@bra&ccedil;os e fiquem com Deus!</p>]]></description>
<lastBuildDate><![CDATA[Dom, 22 de novembro de 2009 - as 14h23]]></lastBuildDate>
<link>http://www.hufersil.com.br/post/lumine_153</link>
</item>
<item>
<title><![CDATA[Artigo sobre Lumine e Smarty na SQL Magazine]]></title>
<description><![CDATA[<p>Foi publicado na edi&ccedil;&atilde;o 69 da revista SQL Magazine um artigo abordando um estudo de caso para demonstrar a utiliza&ccedil;&atilde;o do framework Lumine e da biblioteca de templates Smarty. O artigo &eacute; focado nas principais funcionalidades e o benef&iacute;cio de utilizar em conjunto essas tecnologias. Foi desenvolvido por Em&iacute;lio Nicolau Rossini de Oliveira (<a href="mailto:emiliorossini@gmail.com">emiliorossini@gmail.com</a>) e Lucas Sobrinho Teixeira (<a href="mailto:sobrinho1@gmail.com">sobrinho1@gmail.com</a>) ambos P&oacute;s-Graduandos em Ger&ecirc;ncia de Projetos em Engenharia de Software pelo o CES de Juiz de Fora-MG e utilizadores do Lumine e Smarty h&aacute; um ano e meio. Tamb&eacute;m por Marco Ant&ocirc;nio Pereira Ara&uacute;jo (<a href="mailto:maraujo@acessa.com">maraujo@acessa.com</a>), Doutor e Mestre em Engenharia de Sistemas e Computa&ccedil;&atilde;o pela COPPE/UFRJ.</p>
<p>Link para a revista <a href="http://migre.me/bxLo">http://migre.me/bxLo</a></p>]]></description>
<lastBuildDate><![CDATA[Seg, 16 de novembro de 2009 - as 09h41]]></lastBuildDate>
<link>http://www.hufersil.com.br/post/lumine_sqlmagazine</link>
</item>
<item>
<title><![CDATA[Lumine 1.5.2]]></title>
<description><![CDATA[<p>Fala galera,</p>
<p>Depois de muito tempo, voltei com mais uma atualiza&ccedil;&atilde;o de Lumine.</p>
<p>Abaixo algumas mudan&ccedil;as:</p>
<p>- correcao de bug no metodo Lumine_Util::buildOptions <br />
- bug no tokenizer: quando se colocava uma string na select logo no inicio era disparado um erro<br />
- bug ao adicionar um formatador para o campo. Ele adicionava o valor na consulta mesmo quando vc nao colocava nada (depois de colocar um format para o campo)<br />
- correcao ao salvar objetos relacionados<br />
- criado metodo para destruir um objeto e todos os relacionados<br />
- aceita um array associativo para setar valores no construtor da classe<br />
- agora eh criado somente uma instancia de Lumine_Dialect para consultas<br />
- metodo destroy funciona em cascata, liberando memoria<br />
- pega o nome da sequencia na engenharia reversa<br />
- correcao na classe Lumine_Model para delete, update, save e insert (pegar chave primaria)</p>
<p>&nbsp;</p>
<p><a href="http://www.hufersil.com.br/lumine/downloads">Confiram na p&aacute;gina de downloads</a>!</p>]]></description>
<lastBuildDate><![CDATA[Qui, 15 de outubro de 2009 - as 00h57]]></lastBuildDate>
<link>http://www.hufersil.com.br/post/lumine_152</link>
</item>
<item>
<title><![CDATA[É isso aeh: g-mail fora]]></title>
<description><![CDATA[<p>O que ser&aacute; de nossas vidas? :-)</p>
<p><a href="http://www.hufersil.com.br/imagens/gmail_error.jpg?" target="_blank"><img width="450" height="342" border="0" src="http://www.hufersil.com.br/imagens/gmail_error.jpg?" alt="" /></a></p>]]></description>
<lastBuildDate><![CDATA[Ter, 01 de setembro de 2009 - as 17h18]]></lastBuildDate>
<link>http://www.hufersil.com.br/post/gmail_fora</link>
</item>
<item>
<title><![CDATA[Lumine 1.5.1]]></title>
<description><![CDATA[<p>Muitas coisas legais est&atilde;o rolando em paralelo, tanto na parte de desenvolvimento do Lumine quanto de clientes.</p>
<p>Hoje, mais uma atualiza&ccedil;&atilde;o com v&aacute;rias coisas bacanas de Lumine.</p>
<p>Gostaria de destacar algumas:</p>
<ul>
    <li><strong>Carregamento do arquivo de configura&ccedil;&atilde;o para engenharia reversa</strong>: j&aacute; fez a engenharia reversa uma vez e precisa fazer de novo? Agora ficou mais f&aacute;cil! Basta selecionar o arquivo de configura&ccedil;&atilde;o gerado na primeira vez para que as configura&ccedil;&otilde;es sejam carregadas!</li>
    <li><strong>Gera&ccedil;&atilde;o de Models para MVC - CodeIgniter</strong>: Agora voc&ecirc; pode escolher um modelo de desenvolvimento na engenharia reversa, e ele j&aacute; cria a estrutura, Models e um arquivo de contexto para adicionar ao autoload e carregar as configura&ccedil;&otilde;es de Lumine, para voc&ecirc; poder come&ccedil;ar a trabalhar com o CodeIgniter. Facilmente adapt&aacute;vel para outros frameworks.</li>
    <li><strong>Modelos pr&eacute;-definidos de engenharia reversa</strong>: Voc&ecirc; escolhe o template e informa somente as configura&ccedil;&otilde;es de conex&atilde;o. </li>
</ul>
<p>As demais novidades voc&ecirc; <a href="/lumine/downloads">pode conferir na p&aacute;gina de Downloads</a>, onde tem o changelog da vers&atilde;o.</p>
<p>@bra&ccedil;os e fiquem com Deus!</p>]]></description>
<lastBuildDate><![CDATA[Seg, 31 de agosto de 2009 - as 11h16]]></lastBuildDate>
<link>http://www.hufersil.com.br/post/lumine_151</link>
</item>
</channel>
</rss>