<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog do Gilberto Albino</title>
	<atom:link href="http://gilbertoalbino.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://gilbertoalbino.com</link>
	<description>Blog sobre desenvolvimento PHP, jQuery, Zend Framework e outros</description>
	<lastBuildDate>Wed, 16 May 2012 17:40:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<div id='fb-root'></div>
					<script type='text/javascript'>
						window.fbAsyncInit = function()
						{
							FB.init({appId: null, status: true, cookie: true, xfbml: true});
						};
						(function()
						{
							var e = document.createElement('script'); e.async = true;
							e.src = document.location.protocol + '//connect.facebook.net/pt_BR/all.js';
							document.getElementById('fb-root').appendChild(e);
						}());
					</script>	
						<item>
		<title>[ Dica Zend ] &#8211; Baixar Arquivos com Zend Framework</title>
		<link>http://gilbertoalbino.com/dica-zend-baixar-arquivos-com-zend-framework/</link>
		<comments>http://gilbertoalbino.com/dica-zend-baixar-arquivos-com-zend-framework/#comments</comments>
		<pubDate>Mon, 09 Apr 2012 06:47:12 +0000</pubDate>
		<dc:creator>Giba</dc:creator>
				<category><![CDATA[Dica]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[baixar arquivo]]></category>
		<category><![CDATA[header]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://gilbertoalbino.com/?p=1032</guid>
		<description><![CDATA[Estava fazendo um site para uma comunidade que precisava oferecer informativos para download. De onde veio a necessidade de criar um link para download http://projeto.localhost/baixar/arquivo/nome/:ARQUIVO Peguei um código que tinha em PHP puro e portei para o Zend. A solução &#8230; <a href="http://gilbertoalbino.com/dica-zend-baixar-arquivos-com-zend-framework/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Estava fazendo um site para uma comunidade que precisava oferecer informativos para download.<br />
De onde veio a necessidade de criar um link para download http://projeto.localhost/baixar/arquivo/nome/:ARQUIVO<br />
Peguei um código que tinha em PHP puro e portei para o Zend.<br />
A solução ficou como segue:<br />
<span id="more-1032"></span></p>
<p>É preciso criar o arquivo controlador BaixarController.php e seguir o padrão conhecido do ZF1 e adicionar o método arquivoAction() que não precisa de um arquivo correspondente na pasta script/views/baixar pois não estamos retornando nada no View da aplicação.</p>
<pre class="brush: php; title: ;">
class BaixarController extends Zend_Controller_Action
{
	public function arquivoAction()
	{
            $arquivo = $this-&gt;getRequest()-&gt;getParam('nome);
	    header('Content-Type: application/pdf');
	    header('Content-Disposition: attachment; filename=&quot;$arquivo&quot;');
	    readfile('arquivos/' . $arquivo);

	    $this-&gt;view-&gt;layout()-&gt;disableLayout();
	    $this-&gt;_helper-&gt;viewRenderer-&gt;setNoRender(true);
	}	

}
</pre>
<p>Nas linhas:</p>
<pre class="brush: php; title: ;">
    $this-&gt;view-&gt;layout()-&gt;disableLayout();
    $this-&gt;_helper-&gt;viewRenderer-&gt;setNoRender(true);
</pre>
<p>Nós desabilitamos o Layout e não exibimos nada, por isto não precisamos criar o arquivo view/scripts/baixar.phtml.</p>
<p>Note que eu utilizei &#8220;application/pdf&#8221; pois estou tenho certeza que os arquivos estão em PDF.</p>
<p>Neste caso, eu recomendo que você faça a validação utilizando alguma função ou método próprio. Neste link <a href="http://snipplr.com/view/11451/" title="Link com exemplo de função para obter o MIME_TYPE dos arquivos" target="_blank">http://snipplr.com/view/11451/</a> há um exemplo de como obter MIME_TYPE do arquivo baseado numa lista passada pelo usuário. No seu caso, você pode utilizar as que você tem certeza que estão no teu sistema.</p>
<p><strong>IMPORTANTE:</strong><em>Como você deve ter notado, eu utilizei o parametro &#8220;nome&#8221; para obter o arquivo neste exemplo. Na minha aplicação eu criei uma rota. Então sinta-se à vontade para construir o URL e a Rota que melhor se encaixa com seu projeto</em></p>
<p>Bom é isto ai!</p>
<p>Abraço do Giba!</p>
<div class='wpfblike' ><fb:like href='http://gilbertoalbino.com/dica-zend-baixar-arquivos-com-zend-framework/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://gilbertoalbino.com/dica-zend-baixar-arquivos-com-zend-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[ Dica PHP ] &#8211; Como chamar classes dinamicamente como PHP</title>
		<link>http://gilbertoalbino.com/dica-php-como-chamar-classes-dinamicamente-como-php/</link>
		<comments>http://gilbertoalbino.com/dica-php-como-chamar-classes-dinamicamente-como-php/#comments</comments>
		<pubDate>Fri, 30 Mar 2012 03:10:38 +0000</pubDate>
		<dc:creator>Giba</dc:creator>
				<category><![CDATA[Dica]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[call_user_func_array]]></category>
		<category><![CDATA[classe]]></category>
		<category><![CDATA[dinamicamente]]></category>

		<guid isPermaLink="false">http://gilbertoalbino.com/?p=1027</guid>
		<description><![CDATA[E lá estava eu inventando moda, quando de repente, ao programar o CMS de minha empresa e após ter passado 5 horas estudando o Zend Framework 2, eu pensei: &#8220;Porque não colocar eventos no meu CMS?&#8221; E foi ai que &#8230; <a href="http://gilbertoalbino.com/dica-php-como-chamar-classes-dinamicamente-como-php/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>E lá estava eu inventando moda, quando de repente, ao programar o CMS de minha empresa e após ter passado 5 horas estudando o Zend Framework 2, eu pensei: &#8220;Porque não colocar eventos no meu CMS?&#8221;<br />
E foi ai que surgiu a necessidade de se instanciar classes dinamicamente.<br />
Apesar de eu ja ter feito isto, a necessidade foi passar vários argumentos.<br />
<em>Eu utilizei recursos nativos do PHP, mas veja como eu procedi&#8230;</em><br />
<span id="more-1027"></span></p>
<p>O PHP tinha uma função interessante <strong>call_user_method()</strong> que está deprecada e agora deve ser substituida por <strong>call_user_func_array()</strong>.</p>
<p>Esta bichinha ai faz milagres. Vamos la!</p>
<p>Considerando as classes::</p>
<pre class="brush: php; title: ;">
class Classe1 {
    public function metodo1( $a, $b, $c ) {
        echo &quot;Eu sou a Classe1 &quot;
            .&quot;e meu método metodo1 vai retornar: $a, $b, $c&quot;;
    }
}
// e
class Classe2 {
    public function metodo2( $a, $b, $c ) {
        echo &quot;Eu sou a Classe2 &quot;
            .&quot;e meu método metodo2 vai retornar: $a, $b, $c&quot;;
    }
}
</pre>
<p>Até ai tudo bem.<br />
Agora para a mágica acontecer basta passar os valores, que neste caso você teria um algoritmo fodão processando isto e aquilo, arrays, funções, métodos e um monte de firulas&#8230;</p>
<pre class="brush: php; title: ;">
$classe = 'Classe1';
$metodo = 'metodo1';
$parametros = array( 1, 2, 3 );
call_user_func_array(
    // passamos classe e metodo
    array( $classe, $metodo),
    // e os valores num array
    $parametros
);
</pre>
<p>Se você trocar os valores das variáveis $classe, $metodo e $parametros para:</p>
<pre class="brush: php; title: ;">
$classe = 'Classe2';
$metodo = 'metodo2';
$parametros = array( 4, 5, 6 );
...
</pre>
<p>O resultado será o esperado!</p>
<p>Se você quiser saber mais sobre o método call_user_func_array() acesse a documentação disponível em <a href="http://br2.php.net/manual/pt_BR/function.call-user-func-array.php" title="Documentação de call_user_func_array()" target="_blank">http://br2.php.net/manual/pt_BR/function.call-user-func-array.php</a></p>
<p>Bom é isto ai!<br />
Abraço do Giba!!!</p>
<div class='wpfblike' ><fb:like href='http://gilbertoalbino.com/dica-php-como-chamar-classes-dinamicamente-como-php/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://gilbertoalbino.com/dica-php-como-chamar-classes-dinamicamente-como-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como Recuperar Arquivos Excluídos Pelo Netbeans</title>
		<link>http://gilbertoalbino.com/como-recuperar-arquivos-excluidos-pelo-netbeans/</link>
		<comments>http://gilbertoalbino.com/como-recuperar-arquivos-excluidos-pelo-netbeans/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 21:32:09 +0000</pubDate>
		<dc:creator>Giba</dc:creator>
				<category><![CDATA[Dica]]></category>
		<category><![CDATA[Utilidades]]></category>
		<category><![CDATA[arquivos excluídos]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[Recuperar]]></category>

		<guid isPermaLink="false">http://gilbertoalbino.com/?p=1025</guid>
		<description><![CDATA[Pois é!!! Estava eu testando códigos e apaguei o arquivo errado. Foi quando desesperadamente descobri que os arquivos excluídos pelo netbeans não estão integrados ao sistema operacional, logo a Lixeira estaria fora de contexto. Felizmente, ainda havia uma solução&#8230; Para &#8230; <a href="http://gilbertoalbino.com/como-recuperar-arquivos-excluidos-pelo-netbeans/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Pois é!!!<br />
Estava eu testando códigos e apaguei o arquivo errado.<br />
Foi quando desesperadamente descobri que os arquivos excluídos pelo netbeans não estão integrados ao sistema operacional, logo a Lixeira estaria fora de contexto.</p>
<p>Felizmente, ainda havia uma solução&#8230;</p>
<p><span id="more-1025"></span></p>
<p>Para sua felicidade ou infelicidade, se você ainda não fechou o Netbeans, o projeto não foi compilado então o JAR que contém o histórico do programa permitirá restaurar os arquivos excluídos.</p>
<p>Para tal, clique com o botão direito no nome do projeto e passe o mouse sobre o item &#8220;Histórico Local&#8221; para que apareça e escolha a opção &#8220;Reverter Exclusão&#8221;.</p>
<p>Uma janela irá aparecer com a lista dos últimos arquivos excluídos.</p>
<p><strong>IMPORTANTE:</strong><em> Para quem programa em Java que o projeto é compilado o tempo todo eu não sei como o NetBeans se comporta, para o meu caso, que programo na maior parte em PHP, eu fechei o software várias vezes e o histórico ficou disponível.</em></p>
<div class='wpfblike' ><fb:like href='http://gilbertoalbino.com/como-recuperar-arquivos-excluidos-pelo-netbeans/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://gilbertoalbino.com/como-recuperar-arquivos-excluidos-pelo-netbeans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[ Dica PHP ] &#8211; Como extrair emails de arquivos, strings, textos em PHP</title>
		<link>http://gilbertoalbino.com/dica-php-como-extrair-emails-de-arquivos-strings-textos-em-php/</link>
		<comments>http://gilbertoalbino.com/dica-php-como-extrair-emails-de-arquivos-strings-textos-em-php/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 17:23:45 +0000</pubDate>
		<dc:creator>Giba</dc:creator>
				<category><![CDATA[Dica]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[dica php]]></category>
		<category><![CDATA[expressoes regulares]]></category>
		<category><![CDATA[extrair emails]]></category>
		<category><![CDATA[phpit]]></category>
		<category><![CDATA[preg_match]]></category>

		<guid isPermaLink="false">http://gilbertoalbino.com/?p=1022</guid>
		<description><![CDATA[Olha só, estes dias eu pensei com meus botões&#8230; &#8220;Eu tenho tantos emails na minha caixa de entrada do Windows Live, mas não os tenho salvos&#8230; Gostaria de extrair os emails e colocá-los numa lista de mala direta automaticamente&#8221; Foi &#8230; <a href="http://gilbertoalbino.com/dica-php-como-extrair-emails-de-arquivos-strings-textos-em-php/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Olha só, estes dias eu pensei com meus botões&#8230;<br />
&#8220;Eu tenho tantos emails na minha caixa de entrada do Windows Live, mas não os tenho salvos&#8230;<br />
Gostaria de extrair os emails e colocá-los numa lista de mala direta automaticamente&#8221;<br />
<em>Foi onde achei esta expressão a seguir&#8230;</em><br />
<span id="more-1022"></span><br />
<strong>IMPORTANTE:</strong> <em>Não me responsabilizo pela má utilização deste post e do seu respectivo código!!!</em></p>
<pre class="brush: php; title: ;">
$string = file_get_contents( $seu_arquivo );
// poderia ser um string ao invés de file_get_contents().

$list = preg_match_all(
    '/([\w\d\.\-\_]+)@([\w\d\.\_\-]+)/mi',
    $string,
    $matches
);
print '&lt;pre&gt;';
print_r( $matches );
print '&lt;/pre&gt;';
</pre>
<p>Não vou explicar o que significa a expressão regular, mas se você quiser saber mais sobre expressões regulares há um tutorial bem interessante disponível no site PHPiT disponível em <a href="http://www.phpit.com.br/artigos/entendendo-as-expressoes-regulares.phpit" title="Tutorial Expressões Regulares em PHP" target="_blank">http://www.phpit.com.br/artigos/entendendo-as-expressoes-regulares.phpit</a><br />
É isso aí! Abraço do Giba!</p>
<div class='wpfblike' ><fb:like href='http://gilbertoalbino.com/dica-php-como-extrair-emails-de-arquivos-strings-textos-em-php/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://gilbertoalbino.com/dica-php-como-extrair-emails-de-arquivos-strings-textos-em-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[ Dica PHP ] &#8211; Como informar ao PHP se o URL é HTTP ou HTTPS</title>
		<link>http://gilbertoalbino.com/dica-php-como-informar-ao-php-se-o-url-e-http-ou-https/</link>
		<comments>http://gilbertoalbino.com/dica-php-como-informar-ao-php-se-o-url-e-http-ou-https/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 16:49:16 +0000</pubDate>
		<dc:creator>Giba</dc:creator>
				<category><![CDATA[Dica]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[$_SERVER]]></category>
		<category><![CDATA[dica php]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[request]]></category>
		<category><![CDATA[solicitação]]></category>

		<guid isPermaLink="false">http://gilbertoalbino.com/?p=1019</guid>
		<description><![CDATA[Curiosamente, descobri que o PHP é cheio de mistérios. Eu estava criando uma função para filtrar o URL de um sistema em MVC e surgiu a questão: Como saber que o URL solicitado está em HTTP ou HTTPS? Quando estamos &#8230; <a href="http://gilbertoalbino.com/dica-php-como-informar-ao-php-se-o-url-e-http-ou-https/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Curiosamente, descobri que o PHP é cheio de mistérios.<br />
Eu estava criando uma função para filtrar o URL de um sistema em MVC e surgiu a questão:<br />
<em>Como saber que o URL solicitado está em HTTP ou HTTPS?</em><br />
<span id="more-1019"></span><br />
Quando estamos solicitando uma página em HTTP e executamos a função print_r() para obtermos as chaves desta superglobal: </p>
<pre class="brush: php; title: ;">
print_r( $_SERVER );
</pre>
<p>Não vemos a chave HTTPS disponível.</p>
<p>Agora se executarmos a mesma função em uma página rodando HTTPS, o resultado já é outro e veremos HTTPS disponível.</p>
<p>Então, quando precisarmos saber se a solicitação é HTTP ou HTTPS podemos verificar da seguinte forma:</p>
<pre class="brush: php; title: ;">
if( isset($_SERVER['HTTPS']) &amp;&amp; $_SERVER['HTTPS'] == 'on' ) {
    // faço algo aqui
}
</pre>
<p>Para saber mais sobre a superglobal $_SERVER, acesse a documentação disponível em <a href="http://php.net/manual/pt_BR/reserved.variables.server.php" title="Documentação Super Global $_SERVER" target="_blank">http://php.net/manual/pt_BR/reserved.variables.server.php</a></p>
<p>É isto ai!</p>
<div class='wpfblike' ><fb:like href='http://gilbertoalbino.com/dica-php-como-informar-ao-php-se-o-url-e-http-ou-https/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://gilbertoalbino.com/dica-php-como-informar-ao-php-se-o-url-e-http-ou-https/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[ Dica PHP ] &#8211; Como substituir o último caractere de um string em PHP</title>
		<link>http://gilbertoalbino.com/dica-php-como-substituir-o-ultimo-caractere-de-um-string-em-php/</link>
		<comments>http://gilbertoalbino.com/dica-php-como-substituir-o-ultimo-caractere-de-um-string-em-php/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 15:03:57 +0000</pubDate>
		<dc:creator>Giba</dc:creator>
				<category><![CDATA[Dica]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[caractere]]></category>
		<category><![CDATA[dica php]]></category>
		<category><![CDATA[string]]></category>
		<category><![CDATA[substituir]]></category>
		<category><![CDATA[substr]]></category>

		<guid isPermaLink="false">http://gilbertoalbino.com/?p=1015</guid>
		<description><![CDATA[Hoje, me deparei com uma necessidade básica e interessante. Eu precisei substituir o último caractere de um string. Para resolver isto é facil, veja a solução a seguir&#8230; $string = 'ABCDEF'; $last_char = &#34;Z&#34;; $new_string = substr($string, 0, -1) . &#8230; <a href="http://gilbertoalbino.com/dica-php-como-substituir-o-ultimo-caractere-de-um-string-em-php/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hoje, me deparei com uma necessidade básica e interessante.</p>
<p>Eu precisei substituir o último caractere de um string.</p>
<p>Para resolver isto é facil, veja a solução a seguir&#8230;<br />
<span id="more-1015"></span></p>
<pre class="brush: php; title: ;">
$string = 'ABCDEF';
$last_char = &quot;Z&quot;;
$new_string = substr($string, 0, -1) . $last_char;
echo $new_string;
</pre>
<h3>Explicando</h3>
<p>A função substr é utilizada para retornar parte de um string.<br />
O protótipo dela é o seguinte:</p>
<pre class="brush: php; title: ;">
string substr ( string $string , int $start [, int $length ] )
</pre>
<p>Ela aceita um string($string), um ponto de início($start) e um tamanho($length).<br />
Quando passamos o string com início em &#8220;0&#8243; ele vai retornar o string iniciando pelo caractere &#8220;0&#8243;, que neste caso é &#8220;A&#8221;. Passando um length de &#8220;-1&#8243;, ele vai diminuir o tamanho do string em -1, o que significa remover 1 caractere de trás pra frente, que no nosso caso é o caractere &#8220;F&#8221;.<br />
Como o string retornado ficou &#8220;ABCDE&#8221;, na linha:</p>
<pre class="brush: php; title: ;">
$new_string = substr($string, 0, -1) . $last_char;
</pre>
<p>O que aconteceu foi concatenar o valor de &#8220;$last_char&#8221;, que neste caso é &#8220;Z&#8221; à $new_string.</p>
<p>Simples, mas interessante. Não é?</p>
<p>Se quiser aprender mais sob a função &#8220;substr&#8221; leia a documentação do PHP disponível em <a href="http://br2.php.net/manual/pt_BR/function.substr.php" title="Documentação PHP para substr" target="_blank">http://br2.php.net/manual/pt_BR/function.substr.php</a></p>
<p>É isto ai! Abraço do Giba!!!</p>
<div class='wpfblike' ><fb:like href='http://gilbertoalbino.com/dica-php-como-substituir-o-ultimo-caractere-de-um-string-em-php/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://gilbertoalbino.com/dica-php-como-substituir-o-ultimo-caractere-de-um-string-em-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como eliminar reuniões desnecessárias e turbinar as mais necessárias</title>
		<link>http://gilbertoalbino.com/como-eliminar-reunioes-desnecessarias-e-turbinar-as-mais-necessarias/</link>
		<comments>http://gilbertoalbino.com/como-eliminar-reunioes-desnecessarias-e-turbinar-as-mais-necessarias/#comments</comments>
		<pubDate>Tue, 27 Mar 2012 17:15:36 +0000</pubDate>
		<dc:creator>Giba</dc:creator>
				<category><![CDATA[Negócios]]></category>
		<category><![CDATA[planejamento]]></category>
		<category><![CDATA[reunião]]></category>
		<category><![CDATA[turbinar]]></category>

		<guid isPermaLink="false">http://gilbertoalbino.com/?p=992</guid>
		<description><![CDATA[É verdade. As pessoas odeiam reuniões. Para a maioria das pessoas de negócio, reuniões são um mal necessário. Porque elas são tão odiadas e o que pode ser feito a respeito disto? De acordo com a revista Forbes®, uma pesquisa &#8230; <a href="http://gilbertoalbino.com/como-eliminar-reunioes-desnecessarias-e-turbinar-as-mais-necessarias/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img align="left" src="http://blogs.extremeexperts.com/wp-content/uploads/2012/02/boring-meeting3.png" alt="Reunião chata" style="margin-right: 15px; margin-bottom: 15px" /><br />
É verdade. As pessoas odeiam reuniões. Para a maioria das pessoas de negócio, reuniões são um mal necessário. Porque elas são tão odiadas e o que pode ser feito a respeito disto?<br />
<span id="more-992"></span><br />
De acordo com a revista <a title="Forbes Magazine" href="http://www.forbes.com/" target="_blank">Forbes®</a>, uma pesquisa recente reportou que gritantes 80% dos executivos afirmam que eles estão insatisfeitos com a eficiência e efetividade de reuniões em suas empresas. E ainda, muitos destes homens e mulheres do nível de gestão passam mais do que metade de suas vidas em reuniões.</p>
<p>Considere algumas destas alarmantes estatísticas a respeito de reuniões:</p>
<ul>
<li>Há uma estimativa de mais de 11 milhões de reuniões de negócios a cada dia nos EUA</li>
<li>A maioria dos executivos participam de cerca de 62 reuniões cada mês</li>
<li>Uma média de 5,6 horas por semana gasta em reuniões</li>
<li>Pesquisas constatou que cerca de 50% do tempo de reuniões é desperdiçado, equivalente a certa de um dia por semana  de tempo desperdiçado por empregado</li>
</ul>
<p>Então como fazemos para eliminar o &#8220;mal&#8221; &#8211; das reuniões desnecessárias &#8211; enquanto turbinamos as &#8220;necessárias&#8221; que nós devemos ter?</p>
<p>Eis algumas formas para que sua empresa tenha reuniões menores, melhores e mais produtivas.</p>
<h2>Eliminar reuniões desnecessárias</h2>
<p>Assuma uma visão honesta e objetiva nas reuniões de sua empresa. Você provavelmente descobrirá que muitas reuniões não são necessárias. Faça estas perguntas a respeito de suas reuniões:</p>
<ul>
<li>É apenas um hábito? &#8211; <em>Muitas reuniões regulares não possuem um objetivo.</em></li>
<li>Há um propósito específico para esta reunião?</li>
<li>Há uma agenda definida com um objetivo declarado?</li>
<li>A reunião terá um resultado mensurável?</li>
<li>Existem uma ou mais decisões que precisam ser tomadas?</li>
<li>Os tomadores de decisão estarão presentes?</li>
</ul>
<p>Considere colocar esta lista ou algo similar em salas ou locais de reunião!<br />
Eliminar as reuniões desnecessárias permitirá que você tenha mais tempo para se focar melhor no planejamento das realmente necessárias.</p>
<h2>Fazer reuniões eficientes e eficazes</h2>
<p>Certas reuniões são necessárias. Projetos devem ser gerenciados, decisões devem ser  tomadas e pessoas precisam ser munidas de importantes informações. Se somente 15% de suas reuniões são efetivas, como você pode ter certeza que as suas fazem parte deste grupo?<br />
A melhor forma é utilizar recursos visuais. Ferramentas, como SmartDraw, PowerPoint, etc. melhorarão a produtividade de suas reuniões. A comunicação utilizando ferramentas visuais tem mostrado reduzir o tempo das reuniões em mais de 25%. Reuniões efetivas utilizam uma agenda visual que permite que você construa ações e items em tempo real. Este processo é conhecido como captura de informação em tempo real e produzirá resultados que são mais de seis vezes mais efetivos do que a comunicação com palavras por si só.<br />
Eis algumas dicas simples que ajudarão você tornar suas reuniões mais efetivas e eficientes.</p>
<ol>
<li>Para comunicar-se efetivamente &#8211; visualmente &#8211; utilize uma sala de conferência com projetor ou conecte os participantes através de computadores utilizando uma plataforma de reuniões online tais ocmo <a href="http://www.webex.com.br/" title="WebEx" target="_blank">WebEx</a> e <a href="http://www.gotomeeting.com/fec/" title="Go To Meeting">GoToMeeting</a></li>
<li>Tenha uma agenda preparada antecipadamente. De acordo com  uma pesquisa realizada pela Microsoft, 63% das reuniões nos EUA não possuem uma agenda preparada. Tenha certeza que uma agenda está estruturada a cerca daquilo que você deseja cumprir, mais do que seguir um padrão habitual. Faça uma agenda interativa através do uso de recursos visuais. Abaixo um exemplo de uma agenda visual interativa .<br /><img src="http://gilbertoalbino.com/images/como-eliminar-reunioes-desnecessarias-e-turbinar-as-mais-necessarias-1.jpg" alt="Agenda Interativa" /></li>
<li>Compartilhe antecipadamente a agenda com outros participantes. Extraia feedback e tenha certeza que cada um está certo do propósito e objetivo da reunião. Na agenda acima, os items da discussão estão claramente definidos. Os que participam da reunião já terão conhecimento &#8211; antecipadamente &#8211; que decisões serão tomadas, responsabilidades a serem atribuídas e data s para execução serão definidas.</li>
<li>Documente as decisões, tarefas e atribuições durante a reunião. Atribua  items de ação para cada pessoa diretamente na agenda visual em tempo real. Cada um na reunião vê o item da ação ser atribuído. Não há espaço para diferentes interpretações da ação tomada e é espera-se que a pessoa designada para uma tarefa  cumpra a mesma. Eis uma visão de atribuição de tarefas de uma agenda visual sendo criada em tempo real.<br />
<img src="http://gilbertoalbino.com/images/como-eliminar-reunioes-desnecessarias-e-turbinar-as-mais-necessarias-2.jpg" alt="Atribuição de Tarefas" /><br />
<br />
<img src="http://gilbertoalbino.com/images/como-eliminar-reunioes-desnecessarias-e-turbinar-as-mais-necessarias-3.jpg" alt="Visão Geral do Projeto" /><br />
Na medida que você adiciona data para o início e a conclusão de cada tarefa, pode ser gerado uma linha do tempo para o projeto contando que cada um na reunião possa ver. A reunião produziu um resultado mensurável. Você pode facilmente alternar entre os recursos visuais do projeto e da reunião em si.</p>
<li>Tente manter as reuniões breves sem sacrificar a qualidade. O objetivo é eliminar reuniões desnecessárias mas ter certeza que as que você tem são altamente produtivas.<br />
<br />
<img src="http://gilbertoalbino.com/images/como-eliminar-reunioes-desnecessarias-e-turbinar-as-mais-necessarias-4.jpg" alt="Linha do Tempo" />
</li>
</ol>
<h2>Certificar-se que as pessoas certas participem</h2>
<p>Se decisões, particularmente as mais críticas, precisam ser tomadas, então tenha certeza que os tomadores de decisão estejam lá. Se eles não puderem, então a reunião será uma perca de tempo para todos e  precisa ser cancelada ou reagendada.<br />
Muitas reuniões envolve pessoas que não tem nenhuma participação no resultado. Os participantes devem ser cruciais nas decisões que precisam ser tomadas ou atribuições que precisam serem feitas.</p>
<h2>Estar consciente do fator moral</h2>
<p></p>
<p>Para muitas pessoas no local de trabalho há um certo status atrelado ao ser incluído em reuniões. Eles constroem suas agendas de compromisso ao redor deles e podem não ficar felizes com poucas reuniões e poucos convites.<br />
Permitir que cada um saiba antecipadamente que a empresa vai reduzir o número total de reuniões com um foco em tornar as reuniões mais produtivas permitirá que eles saibam que eles não estão sendo deixados de lado.<br />
<img src="http://gilbertoalbino.com/images/como-eliminar-reunioes-desnecessarias-e-turbinar-as-mais-necessarias-5.jpg" alt="Funcionários Satisfeitos" /></p>
<div class='wpfblike' ><fb:like href='http://gilbertoalbino.com/como-eliminar-reunioes-desnecessarias-e-turbinar-as-mais-necessarias/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://gilbertoalbino.com/como-eliminar-reunioes-desnecessarias-e-turbinar-as-mais-necessarias/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[ WordPress ] Como Remover Spam dos contatos</title>
		<link>http://gilbertoalbino.com/wordpress-como-remover-spam-dos-contatos/</link>
		<comments>http://gilbertoalbino.com/wordpress-como-remover-spam-dos-contatos/#comments</comments>
		<pubDate>Mon, 26 Dec 2011 01:32:43 +0000</pubDate>
		<dc:creator>Giba</dc:creator>
				<category><![CDATA[Dica]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[akismet]]></category>
		<category><![CDATA[contact form 7]]></category>
		<category><![CDATA[formulário de contato]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://gilbertoalbino.com/?p=970</guid>
		<description><![CDATA[Olá, pessoal. Estou com um assunto bem popular para todo mundo SPAM! Quem disser que não sofreu um ataquezinho qualquer que seja de spam está mentindo. Bom, a solução a seguir é destinada a quem utiliza o Contact Form 7. &#8230; <a href="http://gilbertoalbino.com/wordpress-como-remover-spam-dos-contatos/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Olá, pessoal. Estou com um assunto bem popular para todo mundo SPAM!<br />
Quem disser que não sofreu um ataquezinho qualquer que seja de spam está mentindo.</p>
<p>Bom, a solução a seguir é destinada a quem utiliza o Contact Form 7.<br />
<span id="more-970"></span><br />
Após instalado o plugin, para se criar um formulário você acessa a página através do menu &#8220;Contato&#8221; que é gerado pelo plugin e ao clicar na opção criar novo ele já gera para você o código.</p>
<p>Para evitar spams, instale o plugin &#8216;akismet&#8217;, caso você o tenha removido, pois ele vem instalado no wordpress.</p>
<p>Após instalado e ativado o Akismet, vá no site e crie uma conta gratuita para obter uma chave.</p>
<p>Acesse a página de configuração do Akismet no seu wordpress e insira a chave que foi enviada para o seu email.</p>
<p>Agora vá no Contact Form que você criou e insira as opções:</p>
<p><strong>akismet:author</strong><br />
Adicione esta opção para o campo que aceita o nome do remetente.<br />
Exemplo: [<code>text* your-name akismet:author</code>]</p>
<p><strong>akismet:author_email</strong><br />
 Adicione esta opção para o campo que aceita o email do remetente.<br />
 Exemplo: [<code>email* your-email akismet:author_email</code>]</p>
<p><strong>akismet:author_url</strong><br />
 Adicione esta opção no campo que aceita o URL do remetente.<br />
Exemplo: [<code>text your-url akismet:author_url</code>]</p>
<p>Salve e para testar, no nome do remetente coloque &#8216;viagra-test-123&#8242;.</p>
<p>Preencha todos os demais campos normalmente e envie.</p>
<p>Uma mensagem com a borda laranja vai ser exibida, isto que dizer que o plugin bloqueou o envio pois identificou como SPAM.</p>
<p>Logo, SPAM enviados automaticamente sofrerão o mesmo bloqueio.</p>
<p>É isto ai!</p>
<div class='wpfblike' ><fb:like href='http://gilbertoalbino.com/wordpress-como-remover-spam-dos-contatos/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://gilbertoalbino.com/wordpress-como-remover-spam-dos-contatos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[ Tutorial ] Zend Framework &#8211; Parte 06</title>
		<link>http://gilbertoalbino.com/tutorial-zend-framework-parte-06/</link>
		<comments>http://gilbertoalbino.com/tutorial-zend-framework-parte-06/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 01:03:50 +0000</pubDate>
		<dc:creator>Giba</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[db-table]]></category>
		<category><![CDATA[delete]]></category>
		<category><![CDATA[fetchrow]]></category>
		<category><![CDATA[INSERT]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[zend_db_table_abstract]]></category>

		<guid isPermaLink="false">http://gilbertoalbino.com/?p=900</guid>
		<description><![CDATA[Models, CRUD, Zend_Db_Table Sumário Na parte anterior aprendemos como criar Forms e enviar emails utilizando o Zend_Mail. Vamos agora aprender a trabalhar com banco de dados e ver o conceito de Models dentro do Zend Framework utilizando o DbTable e &#8230; <a href="http://gilbertoalbino.com/tutorial-zend-framework-parte-06/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h4>Models, CRUD, Zend_Db_Table </h4>
<h3>Sumário</h3>
<p>Na parte anterior aprendemos como criar Forms e enviar emails utilizando o Zend_Mail.<br />
Vamos agora aprender a trabalhar com banco de dados e ver o conceito de Models dentro do Zend Framework utilizando o DbTable e as operações básicas com o paradigma CRUD.<br />
<span id="more-900"></span></p>
<div style="border: solid 1px orange; padding: 10px; margin-bottom: 15px">
<a href="/tutorial-zend-framework" title="Todos os tutoriais Zend Framework" target="_blank">Clique aqui para ver todos os tutoriais disponíveis</a> e<br />
<a href="http://gilbertoalbino.com/downloads/tutorial-zend-parte-06.zip" target="_blank">Aqui para baixar os arquivos do projeto usados neste tutorial</a>
</div>
<h3>Models</h3>
<p>Basicamente, quando falamos de Models falamos de Banco de Dados ou uma coleção de Métodos dentro de uma Classe Model que permite agilizar processos relacionados a banco de dados.<br />
O Model é manipulado pelo Controller e os dados retornados ficam disponíveis para você utilizar em qualquer lugar de sua aplicação.<br />
Apesar de Model estar relacionado com banco de dados, na verdade, qualquer operação que modele dados pode ser considerado um model, como por exemplo, uma classe de Manipulação de Imagens.</p>
<h3>CRUD</h3>
<p>Com o sistema de Models do Zend é possível criar um sistema CRUD facilmente, pois ele possui métodos disponíveis através da classe Zend_Db_Table_Abstract. Para quem não conhece o significado de CRUD, o mesmo é um acrônimo para as quatro operações básicas em bancos de dados relacionais:</p>
<ul>
<li><strong>Create </strong>- Criar ou adicionar novas entradas</li>
<li><strong>Read </strong>(Retrived) &#8211; Ler, recuperar ou ver entradas existentes</li>
<li><strong>Update </strong>- Atualizar ou editar entradas existentes</li>
<li><strong>Delete </strong>(Destroy) &#8211; Remover entradas existentes</li>
</ul>
<h4>Criando o Model</h4>
<p>Para criar um Model basta digitar a linha de comando abaixo</p>
<pre class="brush: plain; title: ;">
zf create model NOME_DO_MODEL
</pre>
<p>Isto criará o arquivo <strong>NOME_DO_MODEL.php</strong> dentro da pasta <strong>/application/models</strong>.</p>
<p>Mas para trabalhar com bancos de Dados e utilizar a class Zend_Db_Table_Abstract é preciso adicionar o parametro &#8216;<strong>db-table</strong>&#8216; ao invés de <strong>model</strong>:</p>
<pre class="brush: plain; title: ;">
zf create db-table NOME_DO_MODEL NOME_TABElA_NO_BANCO
</pre>
<p>Isto criará uma pasta dentro de models chamada DbTable e dentro dela o arquivo NOME_DO_MODEL.php.</p>
<p>Vamos ver isto na prática criando o Model &#8220;Usuario&#8221; que vamos utilizar para criar nosso Sistema de Autenticação.</p>
<p>Digite a linha abaixo:</p>
<pre class="brush: plain; title: ;">
zf create db-table Usuario usuarios
</pre>
<p>E acesse o arquivo gerado em /application/models/DbTable/Usuario.php.<br />
Ele deve conter:</p>
<pre class="brush: php; title: ;">
class Application_Model_DbTable_Usuario extends Zend_Db_Table_Abstract
{
    protected $_name = 'usuarios';
}
</pre>
<p>Como você pode ver o ZF Tool criou uma classe <strong>Application_Model_DbTable_Usuario</strong> que é estendida de <strong>Zend_Db_Table_Abstract</strong> e dentro da classe a propriedade <strong>$_name</strong>. Esta propriedade é o nome da tabela no banco de dados que passamos na linha de comando. Você pode alterar manualmente, caso precise futuramente. E também pode chamar <strong>$this->_name</strong> dentro dos métodos para trocar de tabela caso necessário.</p>
<h3>Métodos CRUD</h3>
<p>O Zend_Db_Table_Abstract é uma interface orientada a objetos para as tabelas do banco de dados. Ela oferece métodos para muitas operações comuns em tabelas. A classe é extensível, por isto fica fácil modificar e adaptar conforme nossas necessidades.</p>
<p>Esta interface foi desenvolvida como implementação do Padrão de Projeto &#8220;Table Data Gateway&#8221; e também inclui uma classe que implementa o Padrão &#8220;Row Data Gateway&#8221;.</p>
<p>Os métodos mais comuns são:</p>
<ul>
<li>insert()</li>
<li>update()</li>
<li>delete()</li>
<li>find()</li>
<li>fetchAll()</li>
<li>fetchRow()</li>
</ul>
<p>Nós poderíamos utilizar diretamente estes métodos ou inventar moda e criar métodos do tipo:</p>
<ul>
<li>getUsuario()</li>
<li>addUsuario</li>
<li>updateUsuario</li>
<li>deleteUsuario</li>
</ul>
<p>Mas para mantermos as coisas no lugar, vamos utilizar diretamente os métodos da interface.</p>
<h3>Conexão Com o Banco de Dados</h3>
<p>Pois é! Antes de mais nada precisamos informar ao Zend como se conectar ao banco de dados.<br />
Isto é algo fácil, relativamente.<br />
Para configurar uma conexão utilizaremos o nosso arquivo de configuração <strong>application.ini</strong>.<br />
Abra o arquivo e na seção [production] insira as linhas:</p>
<pre class="brush: plain; title: ;">
[production]
resources.db.adapter = &quot;Pdo_Mysql&quot;
resources.db.params.host = &quot;localhost&quot;
resources.db.params.username = &quot;root&quot;
resources.db.params.password = &quot;&quot;
resources.db.params.dbname = &quot;tutorial-zend&quot;
resources.db.params.charset = utf8
</pre>
<p><strong>NOTA</strong> <em>Creio que não preciso dizer para você colocar as suas configurações ai!</em></p>
<p>As linhas acima são bem intuitivas, mas a mais interessante é a primeira onde informamos ao Zend que vamos utilizar o PDO. Nesta linha está o poder da abstração. Se amanhã ou depois você quiser trocar de banco de dados, basta modificar o valor de resources.db.adapter e você não precisará fazer mais nada, caso você tenha utilizado somente as interfaces do Zend para manipulação de banco de dados.</p>
<h3>Tabela de Usuários</h3>
<p>Antes de prosseguirmos com os experimentos, vamos criar a tabela que o zend irá se comunicar para realizar as operações CRUD que vamos aprender logo abaixo.</p>
<p>Eu utilizei o MySQL, mas se você tem experiencia com outro banco de dados, sinta-se à vontade para utilizar o mesmo. Apenas não modifique os nomes dos campos ainda, para que não haja incompatibilidades com os passos do tutorial.</p>
<pre class="brush: plain; title: ;">
CREATE TABLE IF NOT EXISTS `usuarios` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nome` varchar(120) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(120) NOT NULL,
  `login` varchar(120) NOT NULL,
  `senha` varchar(30) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
</pre>
<p><strong>IMPORTANTE:</strong> <em>A tabela acima é simples justamente para facilitar no aprendizado e não tomar tempo desnecessário.</em></p>
<h3>Método insert()</h3>
<p>Para inserir um novo registro utilizamos o método insert() juntamente com um array contendo os campos da tabela e os valores a serem registrados.</p>
<h4>Administração de Usuários</h4>
<p>Vamos então criar agora um controller dentro do módulo <strong>admin</strong> a fim de manipularmos os usuários de nossa aplicação.</p>
<p>Abra o Prompt de Comando do DOS ou o Terminal, acesse a pasta do projeto e digite:</p>
<pre class="brush: plain; title: ;">
zf create controller usuario 1 admin
</pre>
<p>Esta linha de comando irá gerar os arquivos do Controller e View para UsuarioController.<br />
Vale a pena notar que o nome da classe apareceu agora prefixado com &#8216;Admin_&#8217; e para acessar o nosso controller temos que utilizar &#8216;admin&#8217; ao invés de &#8216;default&#8217;.</p>
<pre class="brush: php; title: ;">
class Admin_UsuarioController extends Zend_Controller_Action
{

    public function init()
    {
        /* Initialize action controller here */
    }

    public function indexAction()
    {
        // action body
    }
}
</pre>
<p>Você pode testar acessando: http://zend.localhost/admin/usuario. Neste caso, o action será &#8216;<strong>index</strong>&#8216; e o controller &#8216;<strong>usuario</strong>&#8216;.</p>
<p>Note que o layout carregado é o mesmo do módulo default.</p>
<p>Por ora deixe como está, mais adiante veremos como trocar de layout.</p>
<p>Feito isto, vamos informar ao zend que queremos utilizar nosso Model. Para tal, dentro do método init() do Controller Usuario, vamos criar um objeto a partir de nossa classe Model.</p>
<pre class="brush: php; title: ;">
...
    public function init()
    {
        // Não preciso explicar não eh?
        $this-&gt;_db = new Application_Model_DbTable_Usuario();
    }
...
</pre>
<p>E para testar, vamos criar um action dentro do controller Usuario do módulo Admin.</p>
<pre class="brush: plain; title: ;">
zf create action add usuario 1 admin
</pre>
<p>Creio que você já sabe o que a linha acima significa!</p>
<p>Feito isto, vamos criar o código para controlar a criação de um novo usuário.</p>
<pre class="brush: php; title: ;">
...
    public function addAction()
    {
        $dados = array(
	        'id' =&gt; null,
	        'nome' =&gt; 'Zé Ninguém',
	        'email' =&gt; 'zeninguem@teste.com',
	        'login' =&gt; 'zeninguem',
	        'senha' =&gt; md5('123456'),
        );
        $res = $this-&gt;_db-&gt;insert( $dados );
    }
...
</pre>
<p>Fácil, né? Pois é, nós criamos um array e passamos ele como valor para o método insert().<br />
Note que foi utilizado o tipo null para o campo &#8216;id&#8217;.<br />
Isto precisa ser feito assim para que o método <strong>insert()</strong> retorne o último ID inserido CASO você precise.<br />
<strong></strong><em>Como estamos utilizando uma interface, o Zend já se encarregou de fazer a conexão com o banco de dados que configuramos no arquivo de configuração. Para que a conexão aconteça, basta chamar o Model desejado. Por isto que criamos a propriedade $_db em nossa classe controladora de usuários, para deixar a conexão disponível em todo o controller.</em></p>
<p>Acesse agora a página do action que criamos para processar o código que criamos para inserir um novo usuário.</p>
<p>O URL ficou assim: <strong>http://zend.localhost/admin/usuario/add</strong></p>
<p>Verifique no banco de dados que foi inserido um registro contendo as informações passadas no vetor acima.</p>
<h3>O Método update()</h3>
<p>Se você gostaria de atualizar alguma informação, você utilizará o método <strong>update()</strong>. Este método também precisará de um array contendo os campos e valores.</p>
<p>Este método espera que você passe um ID e como estamos trabalhando com CRUD que normalmente somente atualiza um registro por vez, há uma limitação para este método, que é justamente funcionar somente para um registro por vez.<br />
Apesar de ter formas de atualizar mais de um registro utilizando o método update(), é mais interessante utilizar o método query() do Zend_Db, conforme veremos mais adiante.</p>
<p><strong>NOTA: </strong><em>Nós poderíamos utilizar um formulário de cadastro para realizar estas operações CRUD, mas vamos deixar para ver isto mais adiante na autenticação e controle de usuário, pois até lá você vai ter tempo para fuçar e descobrir coisas sozinho.</em></p>
<p>Para atualizar o nosso usuário vamos primeiro criar um novo action:</p>
<pre class="brush: plain; title: ;">
zf create action update usuario 1 admin
</pre>
<p>E no método updateAction():</p>
<pre class="brush: php; title: ;">
...
    public function updateAction()
    {
        $dados = array(
	        'nome' =&gt; 'Seu Nome Aqui',
	        'email' =&gt; 'seu@email.com',
	        'login' =&gt; 'seu_login',
	        'senha' =&gt; md5('sua_senha'),
        );

        $this-&gt;_db-&gt;update( $dados, 'id = 1' );
    }
...
</pre>
<p>Modifique as informações e abra a página: <strong>http://zend.localhost/admin/usuario/update</strong>. Verifique no banco de dados que as informações foram atualizadas!</p>
<p>Simples, né?<br />
O Método update() possui um parâmetro adicional que aceita o que seria as clausulas para filtrar a atualização. Se você não passar nada, ele exibirá uma mensagem de Erro mas fará a alteração em todas as linhas da tabela. </p>
<h3>O Método delete()</h3>
<p>Para excluir um usuário é tão fácil quando as demais operações, e o método delete() aceita um único parametro que deve conter o ID a ser excluido.</p>
<p>Crie outro usuário teste para termos outro ID além do 1 e não perdemos nosso querido usuário criado anteriormente.<br />
Feito isto, vamos criar o action para excluir este usuário.</p>
<pre class="brush: plain; title: ;">
zf create action delete usuario 1 admin
</pre>
<p>e no método deleteAction():</p>
<pre class="brush: php; title: ;">
...
    public function deleteAction()
    {
        $this-&gt;_db-&gt;delete( 'id = 2' );
    }
...
</pre>
<p>Nem vou comentar! Muito fácil de entender!</p>
<h3>O Método fetchRow()</h3>
<p>Para obter um resultado da tabela, nós utilizamos o método fetchRow() e em casos mais específicos vamos chamar o método select() que está disponível dentro de nossa classe DbTable.</p>
<p>Para listar um usuário, vamos criar um action:</p>
<pre class="brush: plain; title: ;">
zf create action list usuario 1 admin
</pre>
<p>E no método listAction():</p>
<pre class="brush: php; title: ;">
...
    public function listAction()
    {
        $usuario = $this-&gt;_db-&gt;fetchRow( 'id = 1' );
        $this-&gt;view-&gt;usuario = $usuario;
    }
...
</pre>
<p>Basicamente, o resultado foi passado para a variável $usuario que vamos passar para o nosso View usuario a fim de recuperar as informações no arquivo view script list.phtml.</p>
<p>Abra o arquivo <strong>/modules/admin/views/scripts/usuario/list.phtml</strong> e insira o código abaixo:</p>
<pre class="brush: php; title: ;">
&lt;h2&gt;Informações do Usuário&lt;/h2&gt;
&lt;table&gt;
	&lt;tr&gt;
		&lt;th&gt;Nome&lt;/th&gt;
		&lt;td&gt;&lt;?= $this-&gt;usuario-&gt;nome; ?&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;Login&lt;/th&gt;
		&lt;td&gt;&lt;?= $this-&gt;usuario-&gt;login; ?&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;th&gt;E-mail&lt;/th&gt;
		&lt;td&gt;&lt;?= $this-&gt;usuario-&gt;email; ?&gt;
	&lt;/tr&gt;
&lt;/table&gt;
</pre>
<p>Acesse a página http://zend.localhost/admin/usuario/list e você verá as informações do usuário com ID 1 listadas na tela.</p>
<p><strong>NOTA: </strong><em>O método fetchRow() retorna um objeto. Se você desejar utilizar um array, faça a modelagem adicionando toArray(), conforme abaixo:</em></p>
<pre class="brush: php; title: ;">
...
$usuario = $this-&gt;_db-&gt;fetchRow( 'id = 1')-&gt;toArray();
...
</pre>
<h3>Conclusão</h3>
<p>Nesta parte de nosso tutorial você conhece o Zend_Db_Table_Abstract e aprendeu a trabalhar com banco de dados e a criar Models através do ZF Tool. Também aprendeu como realizar as operações básicas de um CRUD.<br />
Nas proximas partes vamos ver como criar um sistema de autenticação e conhecer outros métodos de manipulação de banco de dados.<br />
É isto aí! Abraços do Giba!</p>
<div class='wpfblike' ><fb:like href='http://gilbertoalbino.com/tutorial-zend-framework-parte-06/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://gilbertoalbino.com/tutorial-zend-framework-parte-06/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>[ WordPress ] Adicionar suporte a sidebar em posts e pages no Twenty Eleven</title>
		<link>http://gilbertoalbino.com/wordpress-adicionar-suporte-a-sidebar-em-posts-e-pages/</link>
		<comments>http://gilbertoalbino.com/wordpress-adicionar-suporte-a-sidebar-em-posts-e-pages/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 23:20:43 +0000</pubDate>
		<dc:creator>Giba</dc:creator>
				<category><![CDATA[Dica]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[get_footer]]></category>
		<category><![CDATA[get_sidebar]]></category>
		<category><![CDATA[sidebar]]></category>
		<category><![CDATA[suporte]]></category>
		<category><![CDATA[twenty eleven]]></category>

		<guid isPermaLink="false">http://gilbertoalbino.com/?p=909</guid>
		<description><![CDATA[Estava brincando aqui como Twenty Eleven, pois ate o presente momento somente utiliza o Twenty Ten, e deparei-me com algo interessante. Quando eu acessei o post a barra lateral não apareceu e o mesmo com as páginas. Logo fui verificar &#8230; <a href="http://gilbertoalbino.com/wordpress-adicionar-suporte-a-sidebar-em-posts-e-pages/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Estava brincando aqui como Twenty Eleven, pois ate o presente momento somente utiliza o Twenty Ten, e deparei-me com algo interessante. Quando eu acessei o post a barra lateral não apareceu e o mesmo com as páginas.<br />
Logo fui verificar os arquivos e descobri de cara o que estava acontecendo com este maledito.<br />
<span id="more-909"></span><br />
Removeram a chamada à função get_sidebar().<br />
Bom para resolver isto é facil.<br />
Basta abrir os arquivos single.php e page.php e inserir a linha de codigo:</p>
<pre class="brush: php; title: ;">
&lt;?php get_sidebar(); ?&gt;
</pre>
<p>Logo acima de get_footer():</p>
<pre class="brush: php; title: ;">
&lt;?php get_sidebar(); ?&gt;
&lt;?php get_footer(); ?&gt;
</pre>
<p>Até ai tudo bem. Agora se você for acessar o post ou página. Vai ver que o CSS tá todo quebrado na página.</p>
<p>Bom, ai isto são outros quinhentos. ( risos )</p>
<p>Abraço do Giba!</p>
<div class='wpfblike' ><fb:like href='http://gilbertoalbino.com/wordpress-adicionar-suporte-a-sidebar-em-posts-e-pages/' layout='default' show_faces='true' width='400' action='like' colorscheme='light' send='false' /></div>]]></content:encoded>
			<wfw:commentRss>http://gilbertoalbino.com/wordpress-adicionar-suporte-a-sidebar-em-posts-e-pages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

