<?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>Jaime Neto</title>
	<atom:link href="http://blog.jaimeneto.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.jaimeneto.com</link>
	<description>desenvolvimento para web</description>
	<lastBuildDate>Mon, 29 Apr 2013 20:36:29 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Palestra: Certificação Zend Framework</title>
		<link>http://blog.jaimeneto.com/2013/03/palestra-certificacao-zend-framework/</link>
		<comments>http://blog.jaimeneto.com/2013/03/palestra-certificacao-zend-framework/#comments</comments>
		<pubDate>Mon, 11 Mar 2013 10:44:16 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[certificação]]></category>

		<guid isPermaLink="false">http://blog.jaimeneto.com/?p=287</guid>
		<description><![CDATA[Neste sábado, 09 de Março de 2013, apresentei uma palestra online via Google Hang Out falando sobre minha experiência ao tirar a certificação Zend Framework. Para quem tiver interesse, o vídeo pode ser visto logo abaixo, ou na página do PHP-PB (php-pb.net). E disponibilizei os slides da palestra no meu slideshare: http://www.slideshare.net/jaimecpn. Link direto para [...]]]></description>
				<content:encoded><![CDATA[<p>Neste sábado, 09 de Março de 2013, apresentei uma palestra online via Google Hang Out falando sobre minha experiência ao tirar a certificação Zend Framework.</p>
<p><a href="http://blog.jaimeneto.com/wp-content/uploads/2013/03/phppb-hangout.jpg"><img class="aligncenter size-medium wp-image-288" alt="ProPHP" src="http://blog.jaimeneto.com/wp-content/uploads/2013/03/phppb-hangout-300x260.jpg" width="300" height="260" /></a></p>
<p>Para quem tiver interesse, o vídeo pode ser visto logo abaixo, ou na página do PHP-PB (<a title="php-pb.net" href="http://www.php-pb.net/" target="_blank">php-pb.net</a>). E disponibilizei os slides da palestra no meu slideshare: <a href="http://www.slideshare.net/jaimecpn" target="_blank">http://www.slideshare.net/jaimecpn</a>.<br />
Link direto para esta palestra: <a href="http://www.slideshare.net/jaimecpn/certificao-zend-framework" target="_blank">http://www.slideshare.net/jaimecpn/certificao-zend-framework</a>.</p>
<p><span id="more-287"></span><br />
<iframe src="http://www.youtube.com/embed/g3kOPrhlO-w" height="315" width="560" allowfullscreen="" frameborder="0"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jaimeneto.com/2013/03/palestra-certificacao-zend-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kindle Fire vs iPad Mini</title>
		<link>http://blog.jaimeneto.com/2013/02/kindle-fire-vs-ipad-mini/</link>
		<comments>http://blog.jaimeneto.com/2013/02/kindle-fire-vs-ipad-mini/#comments</comments>
		<pubDate>Thu, 28 Feb 2013 03:50:05 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Tablets]]></category>
		<category><![CDATA[iPad Mini]]></category>
		<category><![CDATA[Kindle Fire]]></category>

		<guid isPermaLink="false">http://blog.jaimeneto.com/?p=271</guid>
		<description><![CDATA[Eu sei, eu sei&#8230; Parece uma comparação bem injusta, afinal, o correto seria comparar o Kindle Fire HD, que é mais recente. Porém o motivo dessa comparação é bem simples: eu tinha um Kindle Fire e, recentemente, comprei um iPad mini. ;D Bom, como não há como compará-los em relação ao hardware, já que o [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.jaimeneto.com/wp-content/uploads/2013/02/DSC00035.jpg"><img src="http://blog.jaimeneto.com/wp-content/uploads/2013/02/DSC00035.jpg" alt="Kindle Fire vs iPad Mini" width="300" height="230" class="alignright size-full wp-image-278" /></a><br />
Eu sei, eu sei&#8230; Parece uma comparação bem injusta, afinal, o correto seria comparar o Kindle Fire HD, que é mais recente. Porém o motivo dessa comparação é bem simples: eu tinha um Kindle Fire e, recentemente, comprei um iPad mini. ;D</p>
<p>Bom, como não há como compará-los em relação ao hardware, já que o iPad Mini é bem mais recente, vou focar nos aspectos mais gerais, e no sistema operacional.</p>
<p><span id="more-271"></span></p>
<p>A primeira coisa que me chamou atenção no iPad Mini e que finalmente me fez querer ter um produto da Apple (explico isso mais adiante&#8230;) foi o tamanho da tela, a espessura e o peso do tablet. Eu nunca gostei do tamanho o iPad tradicional, 10 polegadas  pode ser um tamanho ótimo pra quem só usa ele em casa, mas é muito grande pra quem gosta de estar sempre com seu tablet onde quer que vá.</p>
<p>Quanto a nunca ter tido vontade de ter produtos da Apple, não é que ache que os produtos sejam ruins. Longe disso, sempre soube que são excelentes, mas nunca gostei da filosofia da empresa e de como ela faz pra prender seus consumidores, obrigando você a usar os produtos (sempre caros) dela se quiser ter o máximo do que oferecem. Darei alguns exemplos mais a frente quando for falar sobre os sistemas operacionais.</p>
<p>Um dos pontos que os fanboys da Apple sempre gostam de argumentar é da quantidade de aplicativos disponíveis na iTunes Store em comparação com os aplicativos para Android da Play Store do Google. OK, realmente tem bem mais coisas, não se pode negar. Porém, pelo menos pra mim, nunca teve nada que eu tenha procurado para Android que não tenha achado, então, no fim das contas, não adianta existirem bilhões de aplicativos se você só usa uma centena. Se o Android também tem essa mesma centena de aplicativos, então esse argumento não vale de muita coisa.</p>
<p>Falando em aplicativos, vem aqui a minha maior crítica aos produtos da Apple: iTunes. Como era bom poder passar arquivos de qualquer computador para meu Kindle Fire simplesmente plugando ele no computador e usando como se fosse um pendrive, sem a necessidade de instalar nada. É um saco você só poder passar arquivos através do iTunes, além de muitas vezes inconveniente. Como se não bastasse, o Bluetooth não se conecta com outros aparelhos que não os da Apple, pois é um Bluetooth próprio. Mas nem vou falar muito do Bluetooth, pois o Kindle Fire nem Bluetooth tem (tem no KFHD). Outra personalização que incomoda um pouco é o conector, que não segue os padrões do mercado. Novamente a Apple faz tudo diferente, quando o Kindle Fire usa o já corriqueiro micro USB.</p>
<p>O iPad é mais bonito, sem dúvida, mais atraente e mais fácil de usar. Apesar que a Amazon fez um ótimo trabalho na personalização do Android pro Kindle Fire, tornando ele bem mais prático que o visual padrão do Android, que é legal também, mas é menos atraente e menos prático. Acredito que esse seja um argumento bom pra um usuário comum ou que tenha dificuldade com tecnologia, mas não é bem o caso, já que trabalho com isso.</p>
<p>Um argumento forte em favor do Android, é o leque de opções na hora de escolher seu tablet, você pode mudar do Kindle Fire pra um Samsung Galaxy (ou para um Tablet da Sony, ou qualquer outra marca que use Android, até mesmo um xingue-lingue chinês) e seus aplicativos comprados (na Play Store, não na loja da Amazon) irão servir em qualquer um desses (se o hardware permitir). Isso te permite comprar tablets mais em conta e ainda assim usar os mesmos aplicativos. Já o iPad, você só muda pra outro iPad mais novo, ou perde o que comprou na iTunes Store, sem falar dos preços absurdos, especialmente no Brasil.</p>
<p>Até esse ponto, parece até que me arrependi de comprá-lo, certo? Bom, eu estava decidido a comprar o Kindle Fire HD, até ver pessoalmente o iPad mini&#8230; Como falei antes, fiquei super atraído pelo tamanho, espessura e peso dele, e nem cheguei a vê-lo ligado, mas já fui pesquisar o preço na internet, vi que custava o equivalente ao KFHD, e resolvi dar uma chance à Apple. Consegui comprá-lo nos EUA, e, quer saber? Esse danado tem algo inexplicável que encanta mesmo. Eu entendo agora porque a maioria das pessoas que usam viram fanboys e acham que não há comparação. Só sendo um cara de TI, ligado em detalhes, e ainda não convertido a fanboy, pra encontrar tantos argumentos para balancear essa comparação mesmo.</p>
<p>Enfim, se alguém me perguntar hoje qual tablet comprar, a resposta será: se tiver muita grana pra gastar, ou tiver como comprar nos EUA, compre o iPad ou iPad mini. Se não tiver muita grana, compre um Android mais barato que também não decepciona. Mas pô, por melhor que seja o iPad, não vale o preço cobrado no Brasil, manda alguém trazer de lá, que aí sim, compensa!</p>
<p>Pois é, por mais que não goste da filosofia da empresa, a Apple me conquistou com o iPad mini, tem algo nele que dá vontade de ter um iPhone, um iPod e um Mac também. Assim dá pra entender a estratégia da empresa, mesmo que não simpatize com a idéia de ficar preso a ela, mas os caras sabem mesmo o que fazem, e fazem bem feito!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jaimeneto.com/2013/02/kindle-fire-vs-ipad-mini/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zend_Paginator retornando objetos</title>
		<link>http://blog.jaimeneto.com/2012/12/zend_paginator-retornando-objetos/</link>
		<comments>http://blog.jaimeneto.com/2012/12/zend_paginator-retornando-objetos/#comments</comments>
		<pubDate>Sat, 29 Dec 2012 06:51:43 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Zend_Paginator]]></category>

		<guid isPermaLink="false">http://blog.jaimeneto.com/?p=241</guid>
		<description><![CDATA[Imagine a seguinte situação: você precisa fazer uma consulta numa tabela que tem muitos registros e, portanto, precisa fazer paginação do resultado. Ok até aí, é só criar um Zend_Db_Select e usar ele como parâmetro para um Zend_Paginator. Porém, na hora de iterar sobre o getItems() do paginator, você estará trabalhando com um array em [...]]]></description>
				<content:encoded><![CDATA[<p>Imagine a seguinte situação: você precisa fazer uma consulta numa tabela que tem muitos registros e, portanto, precisa fazer paginação do resultado. Ok até aí, é só criar um <code>Zend_Db_Select</code> e usar ele como parâmetro para um <code>Zend_Paginator</code>. Porém, na hora de iterar sobre o <code>getItems()</code> do paginator, você estará trabalhando com um <code>array</code> em vez de trabalhar com um objeto da sua classe modelo. O que fazer? Bom&#8230; você pode pegar todos os resultados, jogar num <code>foreach</code> e converter no objeto em questão, correto? Mas pra todo objeto vai ter que fazer isso de forma repetida&#8230; E agora?</p>
<p>Eis minha sugestão: Vamos criar um novo adapter para <code>Zend_Paginator</code> que é uma variação do <code>Zend_Paginator_Adapter_DbSelect</code>. A diferença é que esse adapter recebe um parâmetro adicional no construtor com o nome da classe modelo que você deseja como retorno na paginação.</p>
<p><span id="more-241"></span></p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> My_Paginator <span style="color: #000000; font-weight: bold;">extends</span> Zend_Paginator_Adapter_DbSelect 
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$_modelClass</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span>Zend_Db_Select <span style="color: #000088;">$select</span><span style="color: #339933;">,</span> <span style="color: #000088;">$className</span><span style="color: #009900;">&#41;</span> 
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">class_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$className</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Class '<span style="color: #006699; font-weight: bold;">{$className}</span>' not exists&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">is_subclass_of</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$className</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'My_Model_Abstract'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Class '<span style="color: #006699; font-weight: bold;">{$className}</span>' is not subclass &quot;</span> <span style="color: #339933;">.</span>
                                <span style="color: #0000ff;">&quot;of My_Model_Abstract&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_modelClass <span style="color: #339933;">=</span> <span style="color: #000088;">$className</span><span style="color: #339933;">;</span>
&nbsp;
        parent<span style="color: #339933;">::</span>__construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$select</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getModelClass<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> 
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_modelClass<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getItems<span style="color: #009900;">&#40;</span><span style="color: #000088;">$offset</span><span style="color: #339933;">,</span> <span style="color: #000088;">$itemCountPerPage</span><span style="color: #009900;">&#41;</span> 
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$results</span> <span style="color: #339933;">=</span> parent<span style="color: #339933;">::</span><span style="color: #004000;">getItems</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$offset</span><span style="color: #339933;">,</span> <span style="color: #000088;">$itemCountPerPage</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// É aqui que a mágica acontece. Você pega o resultado padrão do </span>
        <span style="color: #666666; font-style: italic;">// paginator, e converte para objetos da classe definida no </span>
        <span style="color: #666666; font-style: italic;">// construtor</span>
        <span style="color: #000088;">$items</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$results</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$modelClass</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getModelClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$results</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$item</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000088;">$modelClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000088;">$item</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setData</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000088;">$items</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$item</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getId</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$item</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$items</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Perceba na classe acima, que, para ela funcionar de uma forma genérica, é preciso que a classe definida seja subclasse de <code>My_Model_Abstract</code>, que poderia ser a base para suas classes modelo. No método <code>getItems()</code> você pode perceber que essa classe deve implementar pelo menos dois métodos: <code>setData()</code> e <code>getId()</code>. Vamos ao código da <code>My_Model_Abstract</code>, então:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000000; font-weight: bold;">class</span> Core_Model_Abstract
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$_id</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getId<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_id<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setData<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$name</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>property_exists<span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">,</span> <span style="color: #000088;">$name</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$value</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Pronto, agora é só criar suas classes modelo herdando desta que ela deve funcionar com o nosso paginator. Lembrando que essa classe é só uma sugestão, você pode (e deve) alterá-la e melhorá-la para atender suas necessidades. Vamos à utilização agora do paginator:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Vamos considerar que temos uma classe My_Model_Post que herda de</span>
<span style="color: #666666; font-style: italic;">// My_Model_Abstract e que $select é uma instância de Zend_Db_Select</span>
<span style="color: #000088;">$adapter</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> My_Paginator<span style="color: #009900;">&#40;</span><span style="color: #000088;">$select</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'My_Model_Post'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Criado o adapter, agora é só passá-lo como parâmetro para o paginator, </span>
<span style="color: #666666; font-style: italic;">// e usá-lo normalmente</span>
<span style="color: #000088;">$paginator</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Paginator<span style="color: #009900;">&#40;</span><span style="color: #000088;">$adapter</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$paginator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setCurrentPageNumber</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_getParam<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'page'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$paginator</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setItemCountPerPage</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">25</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">paginator</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$paginator</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Agora ficou fácil de utilizar o paginator e ainda aproveitar as vantagens de suas classes modelo. Você ainda pode melhorar esse código criando, na classe <code>My_Model_Abstract</code> (ou na sua classe <code>Db_Table</code>, caso costume separar as classes modelo das classes de acesso ao banco de dados) um método para retornar o paginator, sem precisar declará-lo no <code>controller</code>. Enjoy! <img src='http://blog.jaimeneto.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jaimeneto.com/2012/12/zend_paginator-retornando-objetos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Certified Engineer Zend Framework</title>
		<link>http://blog.jaimeneto.com/2012/12/zend-certified-engineer-zend-framework/</link>
		<comments>http://blog.jaimeneto.com/2012/12/zend-certified-engineer-zend-framework/#comments</comments>
		<pubDate>Sun, 23 Dec 2012 02:10:22 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[certificação]]></category>

		<guid isPermaLink="false">http://blog.jaimeneto.com/?p=228</guid>
		<description><![CDATA[No dia 27 de novembro, fiz a prova de certificação de Zend Framework. Venho agora compartilhar com vocês minha experiência e dar umas dicas de como estudar para os que estiverem interessados em fazer também. Algumas pessoas talvez se perguntem &#8220;Por quê fazer uma prova de certificação?&#8221;. Há bons motivos para isso. Além de uma [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.jaimeneto.com/2012/12/zend-certified-engineer-zend-framework/2012-12-17-recebi-o-certificado-zf/" rel="attachment wp-att-230"><img class="alignright size-medium wp-image-230" style="border: 10px solid white;" alt="Recebi o certificado ZF" src="http://blog.jaimeneto.com/wp-content/uploads/2012/12/2012-12-17-Recebi-o-certificado-ZF-273x300.jpg" width="273" height="300" /></a>No dia 27 de novembro, fiz a prova de certificação de Zend Framework. Venho agora compartilhar com vocês minha experiência e dar umas dicas de como estudar para os que estiverem interessados em fazer também.</p>
<p>Algumas pessoas talvez se perguntem &#8220;Por quê fazer uma prova de certificação?&#8221;. Há bons motivos para isso. Além de uma realização pessoal, que é o motivo que leva muita gente a fazer (acredite!), uma prova de certificação significa que a empresa que criou ou é responsável por uma linguagem/aplicação/ferramenta garante que você sabe utilizá-la bem, e isso é válido mundialmente. No mínimo é um grande diferencial no seu currículo, que poderá ter nele o selo oficial da certificação (esse que se encontra no site na coluna direita, acima). <span id="more-228"></span>No caso das certificações da Zend Technologies, você ainda ganha o direito de entrar no <a href="http://www.linkedin.com/groups/Zend-Certified-Engineers-42193" target="_blank">grupo de profissionais certificados do LinkedIn</a> e de se cadastrar na <a href="http://www.odesk.com" target="_blank">http://www.odesk.com</a>, que podem abrir muitas portas.</p>
<p>Bom, vamos voltar para o exame. Para marcar a prova, você deve ir ao site da <a href="http://pearsonvue.com/" target="_blank">Pearson Vue</a>, selecionar o local de prova (tem uma lista enorme lá) e escolher uma data disponível na lista que ele irá mostrar. O exame, até a data em que eu fiz, custava 195 dólares. Fiz minha prova em João Pessoa (PB) na Faculdade iDez, o que foi uma ótima surpresa, pois achei que o local mais próximo para mim seria em Recife (PE).</p>
<p>Antes de tudo, é bom se preparar. A primeira coisa a fazer é ter em mente que o exame cobra seus conhecimentos para o <strong>Zend Framework versão 1.5.3</strong>. Ou seja, toda aquela parte de Zend_Application, Zend_Tool e outras coisas que foram acrescentadas nas versões posteriores ficam de fora. ZF2 então, nem se fala! Sabendo disto, entre no site <a href="http://www.zend.com/services/certification/framework/" target="_blank">http://www.zend.com/services/certification/framework/</a> para ver a lista dos tópicos que são cobrados no exame. A partir daí, você já vai saber o que terá que estudar para ficar preparado.</p>
<p>Alguns materiais bastante úteis para estudar também são os seguintes:</p>
<ul>
<li><a href="http://www.zend.com/en/download/173" target="_blank">Zend Framework Certification Study Guide (Requer login);</a></li>
<li><a href="http://framework.zend.com/releases/ZendFramework-1.5.3/ZendFramework-1.5.3-manual-en.zip" target="_blank">Zend Framework Reference Guide – 1.5.3. (O manual oficial)</a></li>
<li><a href="http://akrabat.com/wp-content/uploads/ZendCon09-ZF-Certification-Refresher.pdf" target="_blank">Zend Framework Certification a Refresher;</a></li>
</ul>
<p>Para estudar, eu fiz o seguinte: criei uma aplicação ZF, e para cada tópico da lista citada acima criei um controller, para cada bullet criei um ou mais actions e saí codificando tudo que era possível e testando tudo o que o ZF oferece relacionado à esses tópicos. Isso me ajudou a conhecer mais de perto muita coisa que eu não usava e ver várias formas alternativas de como utilizar recursos que eu já utilizava.</p>
<p>Fique esperto! É muito importante você estar bem familiarizado com as várias formas de fazer a mesma coisa no ZF, pois isso é bastante cobrado, além, é claro, da sintaxe. Cuidado com as pegadinhas (ou cascas de banana, se preferir), pois tem muitas! Então, leia a prova com muita atenção e sem pressa. Faça com calma que dá tempo! São 75 questões em 1h30 de prova. Como tem questões bem fáceis, sobra bastante tempo para as mais complicadinhas. Mas também não subestime a prova, pois ela pode ser bem difícil, dependendo de quanto você se preparou, pois o assunto é bastante extenso.</p>
<p>Bom, espero que esse post seja útil para aqueles que tenham interesse em fazer o exame. Boa sorte!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jaimeneto.com/2012/12/zend-certified-engineer-zend-framework/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Slides da palestra de Zend Framework na VIII Semana da Computação da UFPB</title>
		<link>http://blog.jaimeneto.com/2012/11/slides-da-palestra-de-zend-framework-na-viii-semana-da-computacao-da-ufpb/</link>
		<comments>http://blog.jaimeneto.com/2012/11/slides-da-palestra-de-zend-framework-na-viii-semana-da-computacao-da-ufpb/#comments</comments>
		<pubDate>Thu, 29 Nov 2012 11:39:32 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[slides]]></category>

		<guid isPermaLink="false">http://blog.jaimeneto.com/?p=220</guid>
		<description><![CDATA[Nesta segunda-feira (26 de Novembro de 2012) deu-se início à VIII Semana da Computação da UFPB em João Pessoa/PB. Fui convidado para dar uma palestra sobre Zend Framework, e o tema que apresentei foi “Conhecendo o Zend Framework”. Disponibilizei os slides da palestra no meu slideshare: http://www.slideshare.net/jaimecpn. Link direto para esta palestra: http://www.slideshare.net/jaimecpn/conhecendo-o-zend-framework. Espero que [...]]]></description>
				<content:encoded><![CDATA[<p>Nesta segunda-feira (26 de Novembro de 2012) deu-se início à VIII Semana da Computação da UFPB em João Pessoa/PB. Fui convidado para dar uma palestra sobre Zend Framework, e o tema que apresentei foi “Conhecendo o Zend Framework”.</p>
<p style="text-align: center;"><a href="http://www.slideshare.net/jaimecpn/conhecendo-o-zend-framework"><img class="size-full wp-image-221" title="Conhecendo o Zend Framework" src="http://blog.jaimeneto.com/wp-content/uploads/2012/11/conhecendo-o-zf.jpg" alt="Conhecendo o Zend Framework" width="364" height="270" /></a></p>
<p><span id="more-220"></span><br />
Disponibilizei os slides da palestra no meu slideshare: <a href="http://www.slideshare.net/jaimecpn">http://www.slideshare.net/jaimecpn</a>.<br />
Link direto para esta palestra: <a href="http://www.slideshare.net/jaimecpn/conhecendo-o-zend-framework">http://www.slideshare.net/jaimecpn/conhecendo-o-zend-framework</a>.</p>
<p>Espero que o pessoal que assistiu, na maioria feras, tenha gostado, e se interessado, e que venham a ser futuros desenvolvedores PHP/ZF, e os slides sejam úteis para quem acessá-los.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jaimeneto.com/2012/11/slides-da-palestra-de-zend-framework-na-viii-semana-da-computacao-da-ufpb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ebooks no Kindle Fire</title>
		<link>http://blog.jaimeneto.com/2012/06/ebooks-no-kindle-fire/</link>
		<comments>http://blog.jaimeneto.com/2012/06/ebooks-no-kindle-fire/#comments</comments>
		<pubDate>Sat, 09 Jun 2012 21:13:47 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Tablets]]></category>
		<category><![CDATA[ebooks]]></category>
		<category><![CDATA[kindle]]></category>
		<category><![CDATA[tablet]]></category>

		<guid isPermaLink="false">http://blog.jaimeneto.com/?p=180</guid>
		<description><![CDATA[&#160; Uma das melhores coisas no Kindle Fire sem dúvida é ler, ainda que não seja tão bom quanto no Kindle normal, que a tela não tem reflexo. Pra quem é marinheiro de primeira viagem, é normal ficar meio perdido no começo quando quer adicionar algum livro no Kindle. As questões geralmente são relativas ao [...]]]></description>
				<content:encoded><![CDATA[<p>&nbsp;</p>
<p><a href="http://blog.jaimeneto.com/wp-content/uploads/2012/06/kindle-fire-library.jpg"><img class=" wp-image-185 alignright" title="Kindle Fire library" src="http://blog.jaimeneto.com/wp-content/uploads/2012/06/kindle-fire-library.jpg" alt="Kindle Fire library" width="288" height="169" /></a></p>
<p>Uma das melhores coisas no Kindle Fire sem dúvida é ler, ainda que não seja tão bom quanto no Kindle normal, que a tela não tem reflexo. Pra quem é marinheiro de primeira viagem, é normal ficar meio perdido no começo quando quer adicionar algum livro no Kindle. As questões geralmente são relativas ao melhor formato de <em>e-book</em> a utilizar, e a como adicioná-los ao aparelho.<br />
<span id="more-180"></span><br />
O meio normal para adicionar <em>e-books</em> ao Kindle é comprá-los diretamente na loja online da amazon. Mas para quem usa o Kindle no Brasil vai encontrar dois problemas conhecidos:</p>
<ol>
<li>Limitação na quantidade de livros em português;</li>
<li>Limitação para fazer compras daqui do Brasil (<a title="saber mais" href="http://blog.jaimeneto.com/2012/01/usando-o-kindle-fire-no-brasil/">saber mais</a>).</li>
</ol>
<p>Essas limitações fazem com que a gente vá atrás de opções alternativas, como lojas nacionais. Aí nos deparamos com preços praticamente iguais aos dos livros físicos, o que não faz muito sentido, já que não há custos de impressão ou distribuição, aí acabamos procurando algo na &#8220;locadora do Paulo Coelho&#8221;, o que não é algo recomendável (por questões legais). Porém há opções de <em>e-books</em> gratuitos por aí, disponibilizados muitas vezes pelos próprios autores, e ainda, há livros de domínio público disponibilizados gratuitamente pelo próprio governo brasileiro no site <a title="Dominio Público" href="http://adf.ly/AQQtJ" target="_blank">Domínio Público</a>.</p>
<p>O formato padrão de arquivo de <em>e-book</em> do Kindle é o .<strong>azw</strong>, que na verdade são arquivos <strong>.mobi </strong>com uma criptografia definida pela amazon. Mas o arquivos <strong>.mobi</strong> funcionam muito bem, e, na minha opinião, é o melhor formato. Os outros principais são <strong>.epub</strong> e o famoso <strong>.pdf</strong>. Vou falar de cada um deles separadamente.</p>
<p><strong>Arquivos MOBI</strong></p>
<p>Por funcionar no Kindle em seu aplicativo padrão para leitura de livros digitais, esse é meu formato favorito de <em>e-book</em>. Caso você tenha o arquivo do livro e queira adicionar ao seu Kindle, é preciso salvá-lo em uma pasta específica da memória do seu tablet. A pasta em questão é chamada eBooks, e fica dentro do sdcard.</p>
<p>O bom do leitor padrão do Kindle são as opções que ele oferece para melhorar sua leitura.  Entre elas: alterar a fonte, o tamanho da fonte, o espaçamento entre linhas, as margens e o modo de cores. Essa opções permitem que você defina a melhor forma de ler sem cansar muita a vista. Permite ainda grifar o texto, marcar páginas, e acessar os capítulos rapidamente através de um glossário, e fazer buscas no texto. O bom também é que o texto se distribui pela tela de forma uniforme, independente do tamanho da fonte ou da orientação (vertical/horizontal) escolhida por você.</p>
<p>Uma coisa boa de usar o aplicativa padrão do Kindle, que só tem nele mesmo, é que cada livro aberto irá aparecer na tela inicial do Kindle, com a porcentagem lida de cada livro.</p>
<p><strong>Arquivos EPUB</strong></p>
<p>Também um formato de <em>e-book</em> excelente, principalmente pela quantidade de livros disponíveis, que é bem maior que o de arquivos <strong>.mobi</strong>. Porém, o arquivos <strong>.epub</strong> não funcionam no leitor padrão do Kindle, forçando você a baixar um outro aplicativo para lê-lo.</p>
<p>Duas boas opções de aplicativos para leitura de arquivos <strong>.epub</strong> são o <a title="Moon+ Reader" href="http://adf.ly/2098272/moonreader" target="_blank">Moon+ Reader</a> e o <a title="Aldiko Book Reader" href="http://adf.ly/2098272/aldiko" data-a="1" data-c="1">Aldiko Book Reader</a>. Já testei os dois e, apesar do ícone feio, o Moon+ Reader me agradou mais.</p>
<p>O bom desses aplicativos é que eles não te obrigam o colocar todos os <em>e-books</em> numa pasta só. Você pode organizá-los da forma que achar melhor e depois configurar o aplicativo pra adicionar as pastas que os contém.</p>
<p>Quanto às opções que facilitam a leitura, são bem semelhantes aos do padrão do Kindle, mas tive alguns probleminhas com travamento, nada muito grave, mas depois de repetir umas vezes, perde-se a paciência.</p>
<p><strong>Arquivos PDF</strong></p>
<p>O formato <strong>.pdf</strong> é o mais conhecido de todos, e provavelmente o que tem maior quantidade disponível na internet. Porém, é de todos, o pior formato pra leitura no tablet, principalmente numa tela do tamanho da do Kindle Fire. Isso porque diferente dos formatos <strong>.mobi</strong> e <strong>.epub</strong>, o texto dos arquivos <strong>.pdf</strong> não se ajusta à tela, não tem opção para tamanho de fonte, não permite grifar o texto ou mudar as cores pra melhorar a visualização do texto. A única coisa que ele oferece é a opção de zoom, que aumenta a página toda uniformemente, mas que força você a arrastar a página de um lado para o outro pra conseguir ler uma linha inteira. Isso tudo, considerando o leitor de pdf padrão do Kindle. Não sei se outros leitores oferecem opções melhores, se houver, por favor, deixe o link aí nos comentários deste post. ^__^</p>
<p>Uma coisa legal do <strong>.pdf</strong> (que na verdade nem sei se funciona pros outros formatos, mas acredito que não) é que você pode autorizar na sua conta da amazon receber arquivos deste tipo por email e ele automaticamente joga lá na sua biblioteca do Kindle. Obviamente que o email em questão é o seu email @kindle.com. Isso muitas vezes facilita pra enviar os arquivos sem a necessidade de ligar seu tablet no computador como cabo.</p>
<p><strong>Drive Virtual</strong></p>
<p>Uma forma bastante prática de transferir seus <em>e-books</em> para o Kindle, ou deixá-los disponíveis para quando você tiver interesse em lê-los, é utilizar o aplicativo de algum drive virtual como o Dropbox ou o Google Drive. Você guarda nele seus <em>e-books</em> e transfere os livros para seu tablet quando precisar deles de forma super prática.</p>
<p><strong>Convertendo formatos</strong></p>
<p>Caso você tenha um <em>e-book</em> num formato qualquer e queira converter para outro formato, por exemplo, você tem um <strong>.epub</strong> e quer converter para <strong>.mobi</strong>, existem aplicativos disponíveis na internet que facilitam a conversão, como o <a title="Calibre" href="http://adf.ly/AQQpt">Calibre</a>, que foi o que mais me agradou. Além de converter entre os três formatos citados, ele organiza sua biblioteca de <em>e-books</em> de forma bem interessante. É bom saber que a conversão não funciona muito bem em alguns casos, como quando você converte <strong>.pdf</strong> para outros formatos, mas o contrário é quase sempre satisfatório.</p>
<p>É isso, espero que essas informações sejam úteis a todos.</p>
<p>&nbsp;<br />
<strong>Posts relacionados:</strong></p>
<ul>
<li><a href="http://blog.jaimeneto.com/2012/01/usando-o-kindle-fire-no-brasil/">Usando o Kindle Fire no Brasil</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.jaimeneto.com/2012/06/ebooks-no-kindle-fire/feed/</wfw:commentRss>
		<slash:comments>62</slash:comments>
		</item>
		<item>
		<title>Slides da palestra de Zend Framework no FLISOL</title>
		<link>http://blog.jaimeneto.com/2012/04/slides-da-palestra-de-zend-framework-no-flisol/</link>
		<comments>http://blog.jaimeneto.com/2012/04/slides-da-palestra-de-zend-framework-no-flisol/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 20:14:04 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Evento]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[slides]]></category>

		<guid isPermaLink="false">http://blog.jaimeneto.com/?p=169</guid>
		<description><![CDATA[Neste sábado (28 de Abril de 2012) foi realizado o FLISOL 2012 em Patos/PB. Fui convidado para dar uma palestra sobre Zend Framework junto ao pessoal do PHP-PB, e o tema que apresentei foi &#8220;PHP robusto com Zend Framework&#8221;. A organização do evento está de parabéns, pois foi muito bem organizado e nós, palestrantes, fomos [...]]]></description>
				<content:encoded><![CDATA[<p>Neste sábado (28 de Abril de 2012) foi realizado o FLISOL 2012 em Patos/PB. Fui convidado para dar uma palestra sobre Zend Framework junto ao pessoal do PHP-PB, e o tema que apresentei foi &#8220;PHP robusto com Zend Framework&#8221;.</p>
<p style="text-align: center;"><a title="Slides da palestra &quot;PHP robusto com Zend Framework&quot;" href="http://www.slideshare.net/jaimecpn/php-robusto-com-zend-framework" target="_blank"><img class="size-full wp-image-170   aligncenter" title="Palestra apresentada no FLISOL 2012" src="http://blog.jaimeneto.com/wp-content/uploads/2012/04/flisol2012.jpg" alt="PHP robusto com Zend Framework" width="363" height="270" /></a></p>
<p><span id="more-169"></span><br />
A organização do evento está de parabéns, pois foi muito bem organizado e nós, palestrantes, fomos muito bem recebidos.<br />
Não conhecia a cidade de Patos/PB e gostei muito. É maior e menos quente do que eu pensava &#8211; ainda assim, é bem quente!</p>
<p>Disponibilizei os slides da palestra no meu recém-criado slideshare: <a href="http://www.slideshare.net/jaimecpn">http://www.slideshare.net/jaimecpn</a>.<br />
Link direto para esta palestra: <a href="http://www.slideshare.net/jaimecpn/php-robusto-com-zend-framework">http://www.slideshare.net/jaimecpn/php-robusto-com-zend-framework</a>.</p>
<p>Espero que o pessoal que assistiu tenha gostado, e que venha a ser útil para quem vier a acessar os slides.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jaimeneto.com/2012/04/slides-da-palestra-de-zend-framework-no-flisol/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Iniciando o WAMP junto com o Windows</title>
		<link>http://blog.jaimeneto.com/2012/03/iniciando-o-wamp-junto-com-o-windows/</link>
		<comments>http://blog.jaimeneto.com/2012/03/iniciando-o-wamp-junto-com-o-windows/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 18:02:14 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Softwares]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.jaimeneto.com/?p=153</guid>
		<description><![CDATA[Se você trabalha com WAMP, sabe como é chato toda vez que iniciar o Windows ter que iniciá-lo para que possa usar o Apache e o Mysql. Então, vai uma dica rápida para iniciar esses serviços junto com o Windows, que não é apenas copiar o link de inicialização do WAMP para a pasta &#8220;Inicializar&#8221; [...]]]></description>
				<content:encoded><![CDATA[<p>Se você trabalha com WAMP, sabe como é chato toda vez que iniciar o Windows ter que iniciá-lo para que possa usar o Apache e o Mysql. Então, vai uma dica rápida para iniciar esses serviços junto com o Windows, que não é apenas copiar o link de inicialização do WAMP para a pasta &#8220;Inicializar&#8221; (que nem sempre funciona, ou fica exibindo aquela tela de permissão).</p>
<p>Eis o passo a passo: <span id="more-153"></span></p>
<ol>
<li>No Windows 7, clique em Iniciar e, na barra de pesquisa por programas e arquivos, digite: <strong>services.msc<br />
</strong></li>
<li>Clique no arquivo que vai aparecer, ou simplesmente aperte o ENTER.</li>
<li>Na janela que se abre, procure os serviços de nome: <strong>wampapache</strong> e <strong>wampmysqld</strong></li>
<li>Perceba que na coluna &#8220;Tipo de Inicialização&#8221;, eles estão como &#8220;Manual&#8221;</li>
<li>Clique com botão direito em um deles, e selecione &#8220;Propriedades&#8221;</li>
<li>Mude &#8220;Tipo de Inicialização&#8221; para &#8220;Automático&#8221; e clique &#8220;OK&#8221;</li>
<li>Faça o mesmo para o outro serviço.</li>
</ol>
<p>Prontinho&#8230; quando você reiniciar o Windows os serviços já estarão inicializados. Perceba, no entanto, que o que estará sendo iniciado automaticamente são os serviços Apache e Mysql, e não o Wamp em si. Ou seja, o iconezinho dele não vai estar lá do lado do relógio. Mas você vai poder usar os serviços normalmente, e só se realmente precisar mexer no WAMP é que vai ter que iniciá-lo.</p>
<p>Repare que essa dica serve pra o caso de você querer inicializar automaticamente qualquer desses outros serviços da lista. Prático, não? ^__^</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jaimeneto.com/2012/03/iniciando-o-wamp-junto-com-o-windows/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Calendário para Zend Framework</title>
		<link>http://blog.jaimeneto.com/2012/02/calendario-para-zf/</link>
		<comments>http://blog.jaimeneto.com/2012/02/calendario-para-zf/#comments</comments>
		<pubDate>Sat, 18 Feb 2012 00:45:22 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Calendar]]></category>
		<category><![CDATA[View_Helper]]></category>

		<guid isPermaLink="false">http://blog.jaimeneto.com/?p=106</guid>
		<description><![CDATA[Precisei criar um calendário HTML dinâmico, e depois de pesquisar bastante, e achar várias soluções que não resolviam todas as minha necessidades, resolvi criar eu mesmo uma classe para isso. Ou melhor, um View Helper para Zend Framework. Assim, eu poderia usar em vários outros projetos, diante da necessidade. Só que para ele poder realmente [...]]]></description>
				<content:encoded><![CDATA[<p>Precisei criar um calendário HTML dinâmico, e depois de pesquisar bastante, e achar várias soluções que não resolviam todas as minha necessidades, resolvi criar eu mesmo uma classe para isso. Ou melhor, um View Helper para Zend Framework. Assim, eu poderia usar em vários outros projetos, diante da necessidade. Só que para ele poder realmente ser bem aproveitado, precisaria ser fácil de customizar, tanto visualmente, quanto, com relação à sua funcionalidade.</p>
<p>Pensei então nas possíveis utilizações para uma classe dessas, e decidi que ela precisava:<span id="more-106"></span></p>
<ol>
<li>ser facilmente alterada, visualmente, apenas mexendo no CSS;</li>
<li>receber e exibir diferentes formatos de data;</li>
<li>ter opções de navegação, para se alterar o mês e ano exibidos;</li>
<li>ter datas selecionáveis, para que se altere algo mais na página;</li>
<li>poder, de alguma forma, receber conteúdo específico para cada data, como nome dos feriados, por exemplo.</li>
</ol>
<p>Para resolver o primeiro ponto, decidi que a classe deveria imprimir o HTML com várias classes CSS para cada possível caso de alteração visual que possa ser necessário. Ou seja, classes que diferenciem:</p>
<ul>
<li>cada dia da semana;</li>
<li>dias da semana e dias de fim de semana;</li>
<li>dia atual, dias passados e dias futuros;</li>
<li>dia selecionado pelo usuário (ponto 4);</li>
<li>dias de outro mês, mês passado e mês futuro;</li>
<li>dias definidos pelo usuário.</li>
</ul>
<p>O segundo ponto diz respeito a como vai vir a informação que define a data selecionada, por exemplo, e as datas que o usuário irá especificar classes de css (ultimo da lista do ponto 1) e conteúdo específico (ponto 5), e também de como serão exibidos os nomes do mês em exibição, dos meses nas opções de navegação (ponto 3), e os dias da semana.</p>
<p>Os outros pontos são auto-explicativos. Então, vamos ver o resultado:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> My_View_Helper_Calendar <span style="color: #000000; font-weight: bold;">extends</span> Zend_View_Helper_Abstract
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$date</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$now</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$locale</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'pt_BR'</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">const</span> INSERT_BEFORE <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">const</span> INSERT_PREPEND <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">const</span> INSERT_APPEND <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">const</span> INSERT_AFTER <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$options</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'showPrevMonthLink'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'showNextMonthLink'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'showOtherMonthDays'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'dateBaseUrl'</span>        <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'#'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'monthBaseUrl'</span>       <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'#'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'insertsPosition'</span>    <span style="color: #339933;">=&gt;</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$protectedCssClasses</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'selected-date'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'today'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'past-day'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'future-day'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'other-mohth'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'prev-month'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'next-month'</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$cssClasses</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$inserts</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    static <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000088;">$formats</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'input'</span>    <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'yyyy-MM-dd'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'weekdays'</span> <span style="color: #339933;">=&gt;</span> Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">WEEKDAY_NARROW</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'header'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'MMMM yyyy'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'prevAndNextMonth'</span> <span style="color: #339933;">=&gt;</span> Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">MONTH_NAME_SHORT</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    static <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getFormat<span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #000088;">$formats</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
                ? <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #000088;">$formats</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#93;</span>
                <span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Set object state from options array
     *
     * @param array $options
     * @return My_View_Helper_Calendar
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setOptions<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span> <span style="color: #000088;">$options</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$options</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$name</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">// Define o formato que a data será inserida</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'format'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #000088;">$formats</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'input'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$value</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// Define o idioma</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'locale'</span> <span style="color: #339933;">&amp;&amp;</span> Zend_Locale<span style="color: #339933;">::</span><span style="color: #004000;">isLocale</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">locale</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$value</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// Define as classes de css</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'cssClasses'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setCssClasses</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// Insere conteúdo nas células de acordo com as datas</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'inserts'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">insertHtml</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// Define a posição em que o conteúdo será inserido</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'insertsPosition'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setInsertsPosition</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setOption</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #339933;">,</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Altera alguma configuração do calendário
     *
     * @param string $name
     * @param mixed $value
     * @return My_View_Helper_Calendar
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setOption<span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #339933;">,</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">options</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">options</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$value</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Retorna uma configuração pelo nome
     *
     * @param string $name
     * @return mixed
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getOption<span style="color: #009900;">&#40;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">options</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
                ? <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">options</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#93;</span>
                <span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Define as classes de CSS para datas específicas
     *
     * @param array $cssClasses
     * @return My_View_Helper_Calendar
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setCssClasses<span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span> <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cssClasses</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$cssClass</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$dates</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addCssClass</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cssClass</span><span style="color: #339933;">,</span> <span style="color: #000088;">$dates</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Adiciona uma classe de CSS para uma data específica
     *
     * @param string $cssClass
     * @param mixed $dates
     * @return My_View_Helper_Calendar
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> addCssClass<span style="color: #009900;">&#40;</span><span style="color: #000088;">$cssClass</span><span style="color: #339933;">,</span> <span style="color: #000088;">$dates</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cssClass</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">protectedCssClasses</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_string</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dates</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$dates</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dates</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dates</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dates</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$date</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_string</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">isDate</span><span style="color: #009900;">&#40;</span>
                        <span style="color: #000088;">$date</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'input'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                    <span style="color: #009900;">&#123;</span>
                        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cssClasses</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$cssClass</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$date</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Retorna a lista de classes de css definidas
     *
     * @return array
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getCssClasses<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">cssClasses</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Retorna todas as classes de css, tanto as padrão quanto 
     * as definidas
     *
     * @return array
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getAllCssClasses<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #990000;">array_merge</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">protectedCssClasses</span><span style="color: #339933;">,</span>
                           <span style="color: #990000;">array_keys</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getCssClasses</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Adiciona conteúdo html a uma data específica
     *
     * @param string $date
     * @param string $html
     * @return My_View_Helper_Calendar
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> insertHtml<span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #339933;">,</span> <span style="color: #000088;">$html</span><span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$d</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$h</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">insertHtml</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #339933;">,</span> <span style="color: #000088;">$h</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">isDate</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'input'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_string</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$html</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">inserts</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$date</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$h</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$html</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$html</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$h</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_string</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$h</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">inserts</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$date</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$h</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Retorna o conteúdo HTML adicionado para uma data específica
     *
     * @param string $date
     * @return array
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getInserts<span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">inserts</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$date</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">inserts</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$date</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">inserts</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Define a posição do conteúdo inserido nas datas
     * -1 = Antes da tag do link da data
     * 0 = Antes da data, dentro da tag do link
     * 1 = Depois da data, dentro da tag do link
     * 1 = Depois da tag do link da data
     *
     * @param int -1 = Before, 0 = Prepend, 1 = Append, 2 = After
     * @return My_View_Helper_Calendar
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setInsertsPosition<span style="color: #009900;">&#40;</span><span style="color: #000088;">$position</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$position</span><span style="color: #339933;">,</span> 
            <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">INSERT_APPEND</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">INSERT_PREPEND</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> 
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setOption</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'insertsPosition'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$position</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Returna a posição em que o conteúdo será inserido
     *
     * @return int
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getInsertsPosition<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getOption</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'insertsPosition'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Define a data selecionada
     *
     * @param string $date
     * @return My_View_Helper_Calendar
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setDate<span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span> instanceof Zend_Date<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #990000;">date</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$date</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #990000;">date</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Date<span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">getFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'input'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
                                        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">locale</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Exibe um calendário HTML
     *
     * @param string $date Data selecionada
     * @param array $options
     * @return string
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> calendar<span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span> <span style="color: #000088;">$options</span><span style="color: #339933;">=</span><span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$options</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setOptions</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$options</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">now</span> <span style="color: #339933;">=</span> Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">now</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">locale</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setDate</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$date</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #990000;">date</span> <span style="color: #339933;">=</span> clone <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">now</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Gera o código HTML do calendário
     *
     * @return string
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Cria um objeto Zend_Date para a data inicial</span>
        <span style="color: #000088;">$dateInit</span> <span style="color: #339933;">=</span> clone <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #990000;">date</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$dateInit</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setDay</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// Altera para o primeiro dia do mês</span>
        <span style="color: #000088;">$weekday</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$dateInit</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span>Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">WEEKDAY_DIGIT</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$month</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">date</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span>Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">MONTH</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Calcula o primeiro dia da tabela a ser exibido</span>
        <span style="color: #000088;">$firstDay</span> <span style="color: #339933;">=</span> clone <span style="color: #000088;">$dateInit</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">subDay</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$weekday</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Cria uma div para o calendário com um id único</span>
        <span style="color: #000088;">$xhtml</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'&lt;div class=&quot;calendar&quot; '</span>
                <span style="color: #339933;">.</span> <span style="color: #0000ff;">'id=&quot;calendar_'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">date</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'yyyy-MM'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot;&gt;'</span>
                <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;div class=&quot;calendar-header&quot;&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Verifica se o calendário está configurado para exibir os </span>
        <span style="color: #666666; font-style: italic;">// links de navegação para exibir o mês anterior</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getOption</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'showPrevMonthLink'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$prevMonth</span> <span style="color: #339933;">=</span> clone <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #990000;">date</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// Cria um objeto para o mês anterior</span>
            <span style="color: #000088;">$prevMonth</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">subMonth</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
            <span style="color: #000088;">$xhtml</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;span class=&quot;prev-month-link&quot;&gt;'</span>
                  <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;a href=&quot;'</span>
                  <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getOption</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'monthBaseUrl'</span><span style="color: #009900;">&#41;</span>
                  <span style="color: #339933;">.</span> <span style="color: #000088;">$prevMonth</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'yyyy-MM'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot; title=&quot;'</span>
                  <span style="color: #339933;">.</span> <span style="color: #000088;">$prevMonth</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">getFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'header'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                  <span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;&gt;'</span>
                  <span style="color: #339933;">.</span> <span style="color: #000088;">$prevMonth</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">getFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'prevAndNextMonth'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                  <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/a&gt;&lt;/span&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Insere o nome do mês atual de acordo com o formato definido</span>
        <span style="color: #000088;">$xhtml</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;span class=&quot;current-month&quot;&gt;'</span>
                <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">date</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">getFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'header'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/span&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Verifica se o calendário está configurado para exibir os</span>
        <span style="color: #666666; font-style: italic;">// links de navegação para exibir o mês seguinte</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getOption</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'showNextMonthLink'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$nextMonth</span> <span style="color: #339933;">=</span> clone <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #990000;">date</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// Cria um objeto para o mês seguinte</span>
            <span style="color: #000088;">$nextMonth</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addMonth</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
            <span style="color: #000088;">$xhtml</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;span class=&quot;next-month-link&quot;&gt;'</span>
                  <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;a href=&quot;'</span>
                  <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getOption</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'monthBaseUrl'</span><span style="color: #009900;">&#41;</span>
                  <span style="color: #339933;">.</span> <span style="color: #000088;">$nextMonth</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'yyyy-MM'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot; title=&quot;'</span>
                  <span style="color: #339933;">.</span> <span style="color: #000088;">$nextMonth</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">getFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'header'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                  <span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;&gt;'</span>
                  <span style="color: #339933;">.</span> <span style="color: #000088;">$nextMonth</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">getFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'prevAndNextMonth'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                  <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/a&gt;&lt;/span&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Cria a tabela do calendário</span>
        <span style="color: #000088;">$xhtml</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;/div&gt;&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; '</span>
                <span style="color: #339933;">.</span> <span style="color: #0000ff;">'border=&quot;0&quot;&gt;&lt;thead&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$tmpDate</span> <span style="color: #339933;">=</span> clone <span style="color: #000088;">$firstDay</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Adiciona sete colunas com os nomes dos dias da semana</span>
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">&lt;=</span><span style="color: #cc66cc;">6</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$cssClasses</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// Define as classes de CSS da semana e da coluna</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #666666; font-style: italic;">// Classe CSS para a primeira coluna</span>
                <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'column-first'</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">6</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #666666; font-style: italic;">// Classe CSS para a última coluna</span>
                <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'column-last'</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// Adiciona classes CSS diferentes para dias da semana</span>
            <span style="color: #666666; font-style: italic;">// e fim-de-semana</span>
            <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span>
                <span style="color: #000088;">$tmpDate</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span>Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">WEEKDAY_DIGIT</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">6</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                ? <span style="color: #0000ff;">'weekend-day'</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">'week-day'</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// Adiciona uma classe específica para cada dia da semana</span>
            <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtolower</span><span style="color: #009900;">&#40;</span>
                <span style="color: #000088;">$tmpDate</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span>Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">WEEKDAY_NAME</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'en_US'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// Insere as classes CSS na célula e imprime o dia da semana</span>
            <span style="color: #666666; font-style: italic;">// de acordo com o formato definido</span>
            <span style="color: #000088;">$cssClassesString</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$cssClasses</span> 
                ? <span style="color: #0000ff;">' class=&quot;'</span><span style="color: #339933;">.</span><span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">' '</span><span style="color: #339933;">,</span> <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;'</span> 
                <span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000088;">$xhtml</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;th'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$cssClassesString</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&gt;'</span>
                    <span style="color: #339933;">.</span> <span style="color: #000088;">$tmpDate</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">getFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'weekdays'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                    <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/th&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// Avança para o dia seguinte e repete o processo</span>
            <span style="color: #000088;">$tmpDate</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addDay</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000088;">$tmpDate</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$firstDay</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$xhtml</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;/thead&gt;&lt;tbody&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Cria sete linhas na tabela para as semanas</span>
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">6</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$xhtml</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;tr&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// Cria sete colunas para as datas</span>
            <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$j</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$j</span><span style="color: #339933;">&lt;=</span><span style="color: #cc66cc;">6</span><span style="color: #339933;">;</span> <span style="color: #000088;">$j</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$day</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$tmpDate</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span>Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">DAY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #000088;">$cssClasses</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #666666; font-style: italic;">// Define as classes de CSS da semana e da coluna</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$j</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'column-first'</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$j</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">6</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'column-last'</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
&nbsp;
                <span style="color: #666666; font-style: italic;">// Adiciona classes CSS diferentes para dias da semana</span>
                <span style="color: #666666; font-style: italic;">// e fim-de-semana</span>
                <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span>
                    <span style="color: #000088;">$tmpDate</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span>Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">WEEKDAY_DIGIT</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">6</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                    ? <span style="color: #0000ff;">'weekend-day'</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">'week-day'</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #666666; font-style: italic;">//Adiciona uma classe específica para cada dia da semana</span>
                <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtolower</span><span style="color: #009900;">&#40;</span>
                        <span style="color: #000088;">$tmpDate</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span>Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">WEEKDAY_NAME</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'en_US'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #666666; font-style: italic;">// Adiciona classes CSS diferentes para hoje, dias </span>
                <span style="color: #666666; font-style: italic;">//passados e futuros</span>
                <span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tmpDate</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">compareDate</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">now</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span> <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'past-day'</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">:</span> <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'today'</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
                    <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">:</span> <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'future-day'</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
&nbsp;
                <span style="color: #666666; font-style: italic;">// Adiciona uma classe CSS para a data selecionada</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tmpDate</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">compareDate</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #990000;">date</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'selected-date'</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
&nbsp;
                <span style="color: #666666; font-style: italic;">// Adiciona classes CSS para dias de outros meses</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tmpDate</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span>Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">MONTH</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #000088;">$month</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'other-month'</span><span style="color: #339933;">;</span>
&nbsp;
                    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getOption</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'showOtherMonthDays'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #000088;">$day</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'&amp;nbsp;'</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
&nbsp;
                    <span style="color: #666666; font-style: italic;">// Adiciona classes CSS diferentes para dias de </span>
                    <span style="color: #666666; font-style: italic;">// meses passado e futuro</span>
                    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tmpDate</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span>Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">MONTH</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$month</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'prev-month'</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tmpDate</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span>Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">MONTH</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&gt;</span><span style="color: #000088;">$month</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                        <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'next-month'</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span>
&nbsp;
                <span style="color: #666666; font-style: italic;">// Insere classes CSS definidos para datas específicas</span>
                <span style="color: #000088;">$addCssClasses</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getCssClasses</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$addCssClasses</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$addCssClasses</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$cssClass</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$d</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">is_string</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$tmpDate</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span>
                          <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'input'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$d</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span>
                          <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span>
                          <span style="color: #000088;">$tmpDate</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'input'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #000088;">$d</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
                        <span style="color: #009900;">&#123;</span>
                            <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$cssClass</span><span style="color: #339933;">;</span>
                        <span style="color: #009900;">&#125;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span>
&nbsp;
                <span style="color: #666666; font-style: italic;">// Insere conteúdo HTML definido para datas específicas</span>
                <span style="color: #000088;">$htmlInserts</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
                <span style="color: #000088;">$inserts</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getInserts</span><span style="color: #009900;">&#40;</span>
                    <span style="color: #000088;">$tmpDate</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getFormat</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'input'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$inserts</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$inserts</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$insert</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #000088;">$htmlInserts</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$insert</span> <span style="color: #339933;">.</span> PHP_EOL<span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span>
&nbsp;
                <span style="color: #666666; font-style: italic;">// Creia a célula da tabela para a data</span>
                <span style="color: #000088;">$xhtml</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;td '</span>
                        <span style="color: #339933;">.</span> <span style="color: #0000ff;">'id=&quot;calendar_day_'</span> 
                        <span style="color: #339933;">.</span> <span style="color: #000088;">$tmpDate</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'yyyy-MM-dd'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot; '</span>
                        <span style="color: #339933;">.</span> <span style="color: #0000ff;">'class=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">' '</span><span style="color: #339933;">,</span> <span style="color: #000088;">$cssClasses</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot;&gt;'</span>
                        <span style="color: #339933;">.</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getInsertsPosition</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> 
                          <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">INSERT_BEFORE</span> ? <span style="color: #000088;">$htmlInserts</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span>
                        <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;a class=&quot;day&quot; href=&quot;'</span>
                        <span style="color: #339933;">.</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getOption</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dateBaseUrl'</span><span style="color: #009900;">&#41;</span>
                        <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/'</span>
                        <span style="color: #339933;">.</span> <span style="color: #000088;">$tmpDate</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'yyyy-MM-dd'</span><span style="color: #009900;">&#41;</span>
                        <span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;&gt;'</span>
                        <span style="color: #339933;">.</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getInsertsPosition</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> 
                          <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">INSERT_PREPEND</span> ? <span style="color: #000088;">$htmlInserts</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span>
                        <span style="color: #339933;">.</span> <span style="color: #000088;">$day</span>
                        <span style="color: #339933;">.</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getInsertsPosition</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> 
                          <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">INSERT_APPEND</span> ? <span style="color: #000088;">$htmlInserts</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span>
                        <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/a&gt;'</span>
                        <span style="color: #339933;">.</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getInsertsPosition</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> 
                          <span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">INSERT_AFTER</span> ? <span style="color: #000088;">$htmlInserts</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span>
                        <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/td&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #000088;">$tmpDate</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addDay</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #000088;">$xhtml</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;/tr&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000088;">$xhtml</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;'</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$xhtml</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Bom, a classe é essa aí. Parece muito grande pra uma coisa aparentemente tão simples, mas acredito que o importante é a praticidade que ela proporciona para fazermos o calendário da forma que queremos. Então, vamos ver como utilizá-la:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">calendar</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'2012-02-17'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #666666; font-style: italic;">// Faz com que o link para o mês passado seja exibido</span>
    <span style="color: #0000ff;">'showPrevMonthLink'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
    <span style="color: #666666; font-style: italic;">// Faz com que o link para o mês seguinte seja exibido</span>
    <span style="color: #0000ff;">'showNextMonthLink'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
    <span style="color: #666666; font-style: italic;">// Faz com que os dias de outros meses sejam exibidos</span>
    <span style="color: #0000ff;">'showOtherMonthDays'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
    <span style="color: #666666; font-style: italic;">// Define a url base para os links das datas</span>
    <span style="color: #0000ff;">'dateBaseUrl'</span>        <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'http://www.jaimeneto.com/data/'</span><span style="color: #339933;">,</span>
    <span style="color: #666666; font-style: italic;">// Define a url base para os links de navegação dos meses</span>
    <span style="color: #0000ff;">'monthBaseUrl'</span>       <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'http://www.jaimeneto.com/data/'</span><span style="color: #339933;">,</span>
    <span style="color: #666666; font-style: italic;">// Define uma classe css &quot;feriado&quot; para as datas no array</span>
    <span style="color: #0000ff;">'cssClasses'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'feriado'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
            <span style="color: #0000ff;">'2012-02-01'</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">// Dia do Publicitário</span>
            <span style="color: #0000ff;">'2012-02-02'</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">// Dia de Iemanjá</span>
            <span style="color: #0000ff;">'2012-02-22'</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">// Carnaval</span>
            <span style="color: #0000ff;">'2012-02-16'</span><span style="color: #339933;">,</span>  <span style="color: #666666; font-style: italic;">// Dia do Repórter</span>
            <span style="color: #0000ff;">'2012-03-08'</span>  <span style="color: #666666; font-style: italic;">// Dia da Mulher</span>
        <span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    <span style="color: #666666; font-style: italic;">// Dá um destaque maior inserindo o nome do feriado do carnaval</span>
    <span style="color: #0000ff;">'inserts'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'2012-02-22'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'&lt;div&gt;Carnaval&lt;/div&gt;'</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    <span style="color: #666666; font-style: italic;">// Define que o html deve ser inserido dentro do link, após a data</span>
    <span style="color: #0000ff;">'insertsPosition'</span>    <span style="color: #339933;">=&gt;</span> My_View_Helper_Calendar<span style="color: #339933;">::</span><span style="color: #004000;">INSERT_APPEND</span>
<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Vamos decorar o calendário agora com CSS, aproveitando todo o esforço para separar cada parte em classes agora.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="css" style="font-family:monospace;">body <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-family</span><span style="color: #00AA00;">:</span>arial<span style="color: #00AA00;">;</span><span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span><span style="color: #933;">14px</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.calendar</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">300px</span><span style="color: #00AA00;">;</span><span style="color: #000000; font-weight: bold;">cursor</span><span style="color: #00AA00;">:</span><span style="color: #993333;">default</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.calendar</span> a <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">text-decoration</span><span style="color: #00AA00;">:</span><span style="color: #993333;">none</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#000</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.calendar</span> a<span style="color: #3333ff;">:hover </span><span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">text-decoration</span><span style="color: #00AA00;">:</span><span style="color: #993333;">underline</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.calendar</span> <span style="color: #6666ff;">.calendar-header</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span><span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#000</span><span style="color: #00AA00;">;</span><span style="color: #000000; font-weight: bold;">border-bottom</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#ccc</span><span style="color: #00AA00;">;</span><span style="color: #000000; font-weight: bold;">text-align</span><span style="color: #00AA00;">:</span><span style="color: #993333;">center</span><span style="color: #00AA00;">;</span><span style="color: #000000; font-weight: bold;">text-transform</span><span style="color: #00AA00;">:</span><span style="color: #993333;">uppercase</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">line-height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">20px</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.calendar</span> <span style="color: #6666ff;">.calendar-header</span> <span style="color: #6666ff;">.current-month</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-weight</span><span style="color: #00AA00;">:</span><span style="color: #993333;">bold</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.calendar</span> <span style="color: #6666ff;">.calendar-header</span> <span style="color: #6666ff;">.prev-month-link</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">float</span><span style="color: #00AA00;">:</span><span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">;</span><span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span> <span style="color: #933;">3px</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.calendar</span> <span style="color: #6666ff;">.calendar-header</span> <span style="color: #6666ff;">.next-month-link</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">float</span><span style="color: #00AA00;">:</span><span style="color: #000000; font-weight: bold;">right</span><span style="color: #00AA00;">;</span><span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #cc66cc;">0</span> <span style="color: #933;">3px</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.calendar</span> table <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">border-collapse</span><span style="color: #00AA00;">:</span><span style="color: #993333;">collapse</span><span style="color: #00AA00;">;</span><span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span><span style="color: #933;">100%</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.calendar</span> table td<span style="color: #00AA00;">,</span> <span style="color: #6666ff;">.calendar</span> table th <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span><span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #cc00cc;">#000</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">text-align</span><span style="color: #00AA00;">:</span><span style="color: #993333;">center</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">line-height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">20px</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.calendar</span> table td a <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span><span style="color: #993333;">block</span><span style="color: #00AA00;">;</span> <span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span><span style="color: #933;">2px</span><span style="color: #00AA00;">;</span> 
    <span style="color: #000000; font-weight: bold;">border</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1px</span> <span style="color: #993333;">solid</span> <span style="color: #993333;">transparent</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.calendar</span> table <span style="color: #6666ff;">.weekend-day</span><span style="color: #00AA00;">,</span><span style="color: #6666ff;">.calendar</span> table th <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#eee</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.calendar</span> table td<span style="color: #6666ff;">.other-month</span> a <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#ccc</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.calendar</span> table td<span style="color: #6666ff;">.today</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span>orange<span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.calendar</span> table td<span style="color: #6666ff;">.selected-date</span> a <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span><span style="color: #993333;">yellow</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.calendar</span> table td<span style="color: #6666ff;">.feriado</span> a <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #000000; font-weight: bold;">blue</span><span style="color: #00AA00;">;</span><span style="color: #000000; font-weight: bold;">border-color</span><span style="color: #00AA00;">:</span><span style="color: #000000; font-weight: bold;">blue</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.calendar</span> table td<span style="color: #6666ff;">.other-month</span><span style="color: #6666ff;">.feriado</span> a <span style="color: #00AA00;">&#123;</span><span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#ccc</span><span style="color: #00AA00;">;</span><span style="color: #000000; font-weight: bold;">border-color</span><span style="color: #00AA00;">:</span><span style="color: #cc00cc;">#ccc</span><span style="color: #00AA00;">;</span><span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>Vamos ver o resultado disso tudo:</p>
<p><img src="http://blog.jaimeneto.com/wp-content/uploads/2012/02/calendar.jpg" alt="" title="My_View_Helper_Calendar" /></p>
<p>Beleza, agora está pronto pra uso. Só pra finalizar, e pra mostrar que dá pra fazer uma coisa realmente elegante com isso, apenas mexendo no CSS, e, neste caso, usando o plugin <a href="http://craigsworks.com/projects/qtip/" target="_blank">qTip</a> do Jquery, vou mostrar aqui o resultado do propósito final pra eu trabalhar tanto nessa classe. Ela foi criada para o site de eventos <a href="http://www.letz.com.br" target="_blank">letz.com.br</a>, e queríamos que as datas com eventos marcadas pelo usuário ficassem destacadas no calendário, e que quando ele passasse o cursor sobre a data, aparecece os eventos num balão. Veja como ficou:</p>
<p><img src="http://blog.jaimeneto.com/wp-content/uploads/2012/02/letz-calendar.jpg" alt="" title="Calendário do Letz" width="659" height="277" class="size-full wp-image-140" /></p>
<p>Pronto. É isso, galera. Espero que tenham gostado e que seja útil pra alguém! ~__^</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jaimeneto.com/2012/02/calendario-para-zf/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Usando o Kindle Fire no Brasil</title>
		<link>http://blog.jaimeneto.com/2012/01/usando-o-kindle-fire-no-brasil/</link>
		<comments>http://blog.jaimeneto.com/2012/01/usando-o-kindle-fire-no-brasil/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 21:01:13 +0000</pubDate>
		<dc:creator>jaime</dc:creator>
				<category><![CDATA[Tablets]]></category>
		<category><![CDATA[jailbreak]]></category>
		<category><![CDATA[kindle]]></category>

		<guid isPermaLink="false">http://blog.jaimeneto.com/?p=97</guid>
		<description><![CDATA[Pois é&#8230; depois de muito tempo relutando em comprar um tablet, simplesmente por não ver utilidade real em se ter um, finalmente resolvi comprá-lo, e o escolhido foi o Kindle Fire da Amazon. Por quê? Bem&#8230; primeiro, porque os produtos da amazon são sempre de grande qualidade, segundo porque eu acho 7&#8243; um tamanho ideal [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://blog.jaimeneto.com/wp-content/uploads/2012/01/jaime-kindle.jpg"><img class="alignright size-full wp-image-98" title="Kindle Fire no Brasil" src="http://blog.jaimeneto.com/wp-content/uploads/2012/01/jaime-kindle.jpg" alt="" width="322" height="191" /></a>Pois é&#8230; depois de muito tempo relutando em comprar um tablet, simplesmente por não ver utilidade real em se ter um, finalmente resolvi comprá-lo, e o escolhido foi o <strong>Kindle Fire</strong> da Amazon. Por quê? Bem&#8230; primeiro, porque os produtos da amazon são sempre de grande qualidade, segundo porque eu acho 7&#8243; um tamanho ideal para tablet, terceiro porque o sistema é android, quarto porque o preço é extremamente atraente (199 dólares), quinto porque eu tive a sorte de que uma pessoa conhecida estava vindo dos EUA e poderia trazê-lo pra mim, já que ele não é vendido no Brasil. Acho que já tinha motivos suficientes, né? ^__^</p>
<p><span id="more-97"></span></p>
<p style="text-align: justify;">Ok, recebido o Kindle Fire, hora de testar. Gostei demais dele, o tamanho é realmente perfeito, o touch screen excelente, super fácil e intuitivo de usar. Gostei muito da personalização que a Amazon deu para o android, apesar de alguns ícones não ficarem muito bons na tela principal, onde aparecem maiores. Achei um pouquinho mais pesado do que eu gostaria, mas nada que comprometa sua utilização. É muito bom pra ler, acho até que seja o melhor dos tablets para isso, mas diferente das outras versões do Kindle, que foram criados especificamente para leitura, este tem brilho na tela, dificultando a leitura se não tiver uma iluminação adequada, ainda assim é excelente, e para ler quadrinhos então&#8230; Viciante! Com relação ao uso de internet, fiquei impressionado com o curto espaço de tempo que ele leva pra conectar ao ser ligado, tornando-o ainda mais prático, pois não e preciso esperar muito para estar online. Ah&#8230; não posso esquecer da bateria que dura que é uma beleza! Há algumas desvantagens em relação ao Galaxy Tab: não tem 3G, nem GPS, nem Câmera e não roda jogos mais pesados, por exemplo&#8230; Mas ainda assim é muito bom, se essas coisas não fazem muita diferença pra você, ou se você não quer pagar uma fortuna pelo concorrente da Samsumg.</p>
<p style="text-align: justify;">Ok&#8230; hora de instalar uns aplicativos. Acessando a Amazon store e&#8230; opa&#8230; que é isso? PôÔÔôôÔÔ!!!! A Amazon não deixa instalar nada a partir de um ip fora dos EUA. Fora isso, pra comprar os aplicativos é preciso ter um cartão de crédito com endereço de cobrança (billing address) estadunidense. E agora? Vamos testar o android market padrão&#8230; Humm&#8230; ele redireciona para a Amazon store, não deixa nem eu entrar no Android Market. Putz!</p>
<p style="text-align: justify;">Bom, não gosto de fazer isso, mas a situação pede medidas desesperadas: JAILBREAK NELE! Vamos desbloquear esse danado pra poder instalar os aplicativos que eu quero. Não tenho culpa de a Amazon amarrar minhas mãos, né&#8230; &gt;:(</p>
<p style="text-align: justify;">Como fazer isso? Eis os passos (leve em conta que quando esse jailbreak foi feito, a versão dele era 6.2.1):</p>
<p><strong>1 &#8211; Permitir instalação de software de fontes desconhecidas</strong></p>
<p style="text-align: justify;">Dê um toque no canto superior direito para aparecer as opções de configuração, vá em &#8220;More&#8230;&#8221;,  &#8220;Device&#8221;, e mude &#8220;Allow Installation of Applications From Unknown Sorces&#8221; para &#8220;ON&#8221;, &#8220;OK&#8221;.</p>
<p><strong>2 &#8211; <strong>Instale o driver do android no seu computador</strong><br />
</strong></p>
<p style="text-align: justify;">Em seu computador baixe o arquivo <a title="android.zip" dir="ltr" href="http://adf.ly/AQPKc" rel="nofollow" target="_blank">android.zip</a> e descompacte em C:\Users\NOME_DO_USUARIO\.android (C:\Documents And Settings\NOME_DO_USUARIO\.android para Windows XP).</p>
<p style="text-align: justify;">Conecte o Kindle ao seu Computador via USB (Ah&#8230; só lembrando&#8230; no meu Kindle não veio cabo nenhum acompanhando ele, veio só o carregador mesmo&#8230;, então, você deve usar um que você tenha, ou comprar um. <img src='http://blog.jaimeneto.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).</p>
<p style="text-align: justify;">Clique no botão &#8220;Iniciar&#8221; do windows, clique com o botão direito em &#8220;Computador&#8221;, e clique em &#8220;Gerenciar&#8221;. Na janela que vai abrir, vá em &#8220;Gerenciador de dispositivos&#8221;. Você deverá ver o Kindle lá na lista. Clique com o botão direito nele e selecione &#8220;Atualizar Driver&#8221;, &#8220;Procurar software de driver no computador&#8221;, &#8220;Permitir que eu escolha em uma lista de drivers de dispositivo no computador&#8221;, Clique em &#8220;Com Disco&#8230;&#8221;, &#8220;Procurar&#8230;&#8221; e navegue até a pasta C:\Users\NOME_DO_USUARIO\.android\Driver\ e clique em &#8220;Abrir&#8221;. &#8220;OK&#8221;. Você verá o driver chamado &#8220;Android Composite ADB Interface&#8221;, Clique em &#8220;Avançar&#8221;, e escolha a opção para instalar de qualquer forma. Aguarde enquanto o driver é instalado. Deverá aparecer uma mensagem de sucesso. Clique em &#8220;Fechar&#8221;. Na lista de Dispositivos, você deverá ver &#8220;Android Phone&#8221; e dentro dele &#8220;Android Composite ADB Interface&#8221;, que é o seu Kindle.</p>
<p><strong>3 &#8211; Baixar o Kindle ADB e certifique-se de que o driver do android foi bem instalado<br />
</strong></p>
<p style="text-align: justify;">Ainda em seu computador, baixe o arquivo <a class="yt-uix-redirect-link" title="KindleADB.zip" dir="ltr" href="http://adf.ly/AQOxQ" rel="nofollow" target="_blank">KindleADB.zip</a> e descompacte em C:\KindleADB.</p>
<p style="text-align: justify;">Execute o Prompt de Comando (clicando em &#8220;Iniciar&#8221; e digite &#8220;cmd&#8221; + Enter, ou no XP, vá em &#8220;Executar&#8221; e digite &#8220;cmd&#8221;), digite as duas linhas de comandos abaixo:</p>
<p style="text-align: justify;">cd c:\KindleADB<br />
adb devices<em></em></p>
<p style="text-align: justify;">Aqui deve aparecer &#8220;List of devices attatched&#8221; e o código correspondente ao seu kindle logo abaixo. Caso não apareça, reinicie o computador, remova o driver do android e tente instalá-lo novamente.</p>
<p style="text-align: justify;"><strong>4 &#8211; SuperUser e kindleroot</strong></p>
<p style="text-align: justify;">Volte para o navegador e baixe os arquivos <a title="kindleroot_androidpolice.apk" href="http://adf.ly/AQPQj" target="_blank">kindleroot_androidpolice.apk</a> e <a title="superuser-2.zip" href="http://adf.ly/AQPUV">superuser-2.zip</a>.  Extraia os arquivos dentro de superuser-2.zip na pasta c:\KindleADB, sem criar uma subpasta.</p>
<p style="text-align: justify;">Plugue novamente o kindle no seu computador (se já estiver plugado, desconecte e plugue novamente). Copie o arquivo kindleroot_androidpolice.apk para dentro da memória do kindle. Disconecte seu kindle.</p>
<p style="text-align: justify;"><strong>5 &#8211; Instale o &#8220;Root Explorer&#8221;</strong></p>
<p style="text-align: justify;">Usando o navegador do Kindle Fire, acesse <a class="yt-uix-redirect-link" title="http://bit.ly/kindlerootexplorer" dir="ltr" href="http://www.youtube.com/redirect?q=http%3A%2F%2Fbit.ly%2Fkindlerootexplorer&amp;session_token=ogPI-4UvfGkOE4iuUwGpEA_amwt8MTMyNzk1Mzc1M0AxMzI3ODY3MzUz" rel="nofollow" target="_blank" data-redirect-href-updated="true">http://bit.ly/kindlerootexplorer</a>, toque em &#8220;Download Now&#8221;, depois em &#8220;Slow Download&#8221;, espere 20 segundos, e finalmente em &#8220;download file now&#8221;. Você verá que aparecerá um número na barra de notificações do Kindle, no topo. Clique lá, e verá que o arquivo está sendo baixado. Quando terminar de baixar, clique nele, e depois em &#8220;Install&#8221; e em &#8220;Done&#8221;.</p>
<p style="text-align: justify;"><strong>6 -Fazendo o &#8220;Root&#8221; no Kindle</strong></p>
<p style="text-align: justify;">Vá em &#8220;apps&#8221; e inicie o &#8220;Root Explorer&#8221;. Vá em &#8220;sdcard&#8221;, toque em &#8220;kindleroot_androidpolice.apk&#8221;, &#8220;Install&#8221;, &#8220;Install&#8221; novamente, &#8220;Open&#8221;, &#8220;Agree&#8221;, &#8220;Root&#8221;, &#8220;OK&#8221;. Conecte o Kindle Fire no seu computador, caso não esteja conectado.</p>
<p style="text-align: justify;">No computador, volte para o &#8220;Prompt de comando&#8221;, na pasta do KindleADB. Certifique-se de que o kindle ainda está OK, digitando &#8220;adb devices&#8221; e vendo se ele aparece direitinho lá, e digite a seguinte lista de comandos:</p>
<p style="text-align: justify;">adb root<br />
adb remount<br />
adb push su /system/xbin/su<br />
adb shell chwon 0.0 /system/xbin/su<br />
adb shell chmod 06755 /system/xbin/su<br />
adb install Superuser.apk<br />
adb reboot</p>
<p style="text-align: justify;">Atenção, esses comandos podem mudar. Verifique no guia oficial: <a title="http://adf.ly/AQPdS" href="http://adf.ly/AQPdS/" target="_blank">http://adf.ly/AQPdS</a></p>
<p style="text-align: justify;">A partir daqui, seu Kindle Fire já deve estar &#8220;Rooted&#8221;, ou seja, desbloqueado para instalar aplicações de fontes &#8220;alternativas&#8221;.</p>
<p style="text-align: justify;">Para se certificar de que funcionou, instale o RootCheck. Baixe o arquivo em <a title="http://adf.ly/AQPo1" href="http://adf.ly/AQPo1" target="_blank">http://adf.ly/AQPo1</a>, instale, vá em &#8220;apps&#8221;, inicie o aplicativo, &#8220;Agree&#8221;, &#8220;Verify Root Access&#8221;, &#8220;Allow&#8221;. Deve aparecer a frase &#8220;Congratulations! You have root access!&#8221; caso esteja tudo certinho.</p>
<p style="text-align: justify;"><strong>7 &#8211; Instale o &#8220;Android Market</strong>&#8220;</p>
<p style="text-align: justify;">Para completar o tutorial, vamos instalar o aplicativo que vamos usar para acessar o Android Market, e de lá, baixar os outros aplicativos que queremos. Usando o navegador do Kindle Fire, acesse <a title="http://adf.ly/2098272/kindlemarket" href="http://adf.ly/2098272/kindlemarket" target="_blank">http://adf.ly/2098272/kindlemarket</a>, clique em &#8220;Direct Download&#8221;, clique na barra de notificação para acompanhar o download. Quando terminar, toque em &#8220;Home&#8221;, vá em &#8220;Apps&#8221;, e inicie o &#8220;Root Explorer&#8221;. Caso ainda não tenha feito, clique em &#8220;Allow&#8221; para permitir acesso de superusuário.</p>
<p style="text-align: justify;">Navegue para <em>&#8220;</em>sdcard&#8221;, &#8220;Download&#8221; e toque e segure em &#8220;KindleFireAndroidMarket.zip&#8221;. Selecione &#8220;Extract All&#8221;, &#8220;Go to extracted&#8221;, &#8220;KindleFireAndroidMarket&#8221;, &#8220;GoogleServicesFramework.apk&#8221;, &#8220;Install&#8221;, &#8220;Install&#8221; de novo, &#8220;Done&#8221;. Toque e segure em &#8220;Market.apk&#8221;, selecione &#8220;Move&#8221;, &#8220;Back&#8221; quadro vezes, entre em &#8220;system&#8221;, &#8220;app&#8221;. No topo você verá um botão &#8220;Mount r/w&#8221;, clique nele, ele vai mudar para &#8220;Mount R/O&#8221;. Toque em &#8220;Paste&#8221;. Procure por &#8220;Market.apk&#8221;, toque e segure, selecione &#8220;Permissions&#8221;, deixe selecionados apenas os dois primeiros quadros da primeira linha, e o primeiro quadro da segunda e da terceira linha. Toque &#8220;OK&#8221;. Novamente toque em &#8220;Market.apk&#8221; (sem segurar, dessa vez), &#8220;Install&#8221;, &#8220;OK&#8221;, &#8220;Install&#8221; novamente, &#8220;Done&#8221;. Agora faça um reboot no Kindle Fire: Aperte e segure o botão de ligar, e aperte em &#8220;Shut Down&#8221;, depois ligue novamente. Vá novamente ao &#8220;Root Explorer&#8221;, &#8220;sdcard&#8221;, &#8220;extracted&#8221;, &#8220;KindleFireAndroidMarket&#8221;, &#8220;MarketOpener.apk&#8221;, &#8220;Install&#8221;, &#8220;Install&#8221; novamente, &#8220;Done&#8221;. Toque em &#8220;Home&#8221; para ir para a tela principal, vá em &#8220;apps&#8221;, e você verá lá o ícone do Android Market. Toque nele. Ele vai pedir pra você adicionar sua conta do Google. Aperte &#8220;Yes&#8221; e prossiga com os passos. Pode demorar um pouco, então você pode voltar para a &#8220;Home&#8221; e acessar novamente o Android Market. Ufa&#8230; pronto, agora você pode instalar os aplicativos a partir do Android Market.</p>
<p style="text-align: justify;">Caso alguma coisa dê errado, aproveite as fontes de consulta que usei no meu Kindle (vídeos em inglês):</p>
<ul style="text-align: justify;">
<li><a title="How to Root - Kindle Fire (6.2.1 &amp; 6.2.2 Read Video Desc)" href="http://adf.ly/AQPz4" target="_blank">How to Root &#8211; Kindle Fire (6.2.1 &amp; 6.2.2 Read Video Desc)</a></li>
<li><a title="How to Root - Kindle Fire 6.2.2 BurritoRoot3" href="http://adf.ly/AQQ3e" target="_blank">How to Root &#8211; Kindle Fire 6.2.2 BurritoRoot3</a></li>
<li><a title="How to Install Android Market - Rooted Kindle Fire (No ADB, V2) " href="http://adf.ly/AQQ7z" target="_blank">How to Install Android Market &#8211; Rooted Kindle Fire (No ADB, V2) </a></li>
</ul>
<p style="text-align: justify;">Agora, é só desfrutar&#8230; ^__^</p>
<p>&nbsp;<br />
<strong>Posts relacionados:</strong></p>
<ul>
<li><a href="http://blog.jaimeneto.com/2012/06/ebooks-no-kindle-fire/">Ebooks no Kindle Fire</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.jaimeneto.com/2012/01/usando-o-kindle-fire-no-brasil/feed/</wfw:commentRss>
		<slash:comments>225</slash:comments>
		</item>
	</channel>
</rss>
