<?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>Alisson O Blog</title>
	<atom:link href="http://alisson.indexainternet.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://alisson.indexainternet.com.br</link>
	<description>Magento e os idiomas que o computador fala...</description>
	<lastBuildDate>Fri, 12 Feb 2010 12:31:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Carrinhos abandonados no Magento</title>
		<link>http://alisson.indexainternet.com.br/carrinhos-abandonados-no-magento/</link>
		<comments>http://alisson.indexainternet.com.br/carrinhos-abandonados-no-magento/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 18:48:48 +0000</pubDate>
		<dc:creator>Alisson Oldoni</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[carrinho abandonado]]></category>
		<category><![CDATA[carrinhos abandonados]]></category>
		<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[onepage checkout]]></category>
		<category><![CDATA[restaurar carrinho]]></category>
		<category><![CDATA[salvar carrinho]]></category>
		<category><![CDATA[salvar produtos do carrinho]]></category>

		<guid isPermaLink="false">http://alisson.indexainternet.com.br/?p=164</guid>
		<description><![CDATA[Uma discussão sobre o que fazer com carrinhos abandonados no Magento e algumas soluções.]]></description>
			<content:encoded><![CDATA[<p>O que fazer com os carrinhos abandonados no Magento e-commerce?</p>
<p>É comum um cliente entrar em uma loja virtual, encher o carrinho de produtos, e abandonar em algum passo do checkout, ou antes mesmo dele. Os motivos para abandono são diversos: muitas vezes o cliente faz isso simplesmente pra deixar o sistema mesmo calcular quanto ele vai ter de gastar para comprar os produtos que ele tem em vista, por falta de tempo, por dificuldades em um checkout longo e que se extende por várias páginas, etc.</p>
<p>Apesar de eu achar o termo &#8220;carrinho abandonado&#8221; engraçado (sempre imagino alguém fugindo correndo de um supermercado), ao que tudo indica, o Magento lida com isso da maneira mais adequada possível. Conforme <a href="http://www.timaster.com.br/revista/artigos/main_artigo.asp?codigo=371&#038;pag=2">um post</a> de Cezar Taurion (MBA em Marketing de Serviços), na revista TI Master: <em><br />
<blockquote>&#8220;Se houver abandono, o site deve salvar o conteúdo do cesto de compras, pois nem sempre a interrupção da transação acontece por vontade do cliente. Assim, quando ele voltar, ele poderá continuar do ponto em que a operação foi interrompida. E mesmo que ele tenha desistido por vontade própria, ficará satisfeito em saber que a loja lembra dele e de sua última tentativa de compra.&#8221;</p></blockquote>
<p></em><span id="more-164"></span>O Magento salva carrinhos abandonados, tanto para usuários logados, como para os visitantes. Para os visitantes isso é feito através de um cookie e, para os logados, tudo fica no banco de dados e é restaurado quando o usuário se loga novamente. Acontece que durante a homologação de um novo site em Magento, bem naquele momento em que o cliente (que geralmente nunca teve um e-commerce antes) está fazendo diversas compras teste para entender os métodos de pagamento e envio, entende que salvar carrinhos abandonados é um erro.</p>
<p>Vamos entender o procedimento do teste:</p>
<ol>
<li>Cliente entra no site;</li>
<li>Cliente adiciona 2 produtos no carrinho;</li>
<li>Cliente tenta o checkout;</li>
<li>Magento grava carrinho atual no banco;</li>
<li>Cliente abandona o carrinho (desloga ou sai do site).</li>
</ol>
<p>Cliente volta ao site:</p>
<ol>
<li>Cliente entra no site;</li>
<li>Cliente adiciona 2 produtos no carrinho;</li>
<li>Cliente tenta o checkout;</li>
<li>Cliente se loga no site;</li>
<li>Magento UNE o carrinho anterior ao atual.</li>
</ol>
<p>Assim o cliente testando seu e-commerce pensa: &#8220;Opa, peraí&#8230;&#8221;. Nesse ponto 5 o cliente passa a ter 4 produtos no carrinho! Ele pensa que o seus futuros clientes da loja vão se confundir, e talvez a quantidade de reembolsos por compras erradas possam ser significativos&#8230; E o Magento realmente não avisa que salva o carrinho, nem avisa que restaura e une os carrinhos. Muito dificilmente uma pessoa tem como primeira atitute ao entrar no site se logar, o que faria com que ela percebesse o crescimento do número de itens no carrinho.</p>
<p><strong>Solução 1</strong>: Fazer o Magento mostrar uma mensagem quando carrinhos são unidos. Você precisará alterar 3 arquivos:</p>
<ol>
<li>Em app/code/core/Mage/Checkout/Model/Session.php altere o método loadCustomerQuote() para este:</li>
<pre class="brush: plain;">
    public function loadCustomerQuote()
    {
    	// reseta controle
    	Mage::getSingleton(&quot;core/session&quot;)-&gt;setIsLoadedCart(&quot;0&quot;);

        $customerQuote = Mage::getModel('sales/quote')
            -&gt;setStoreId(Mage::app()-&gt;getStore()-&gt;getId())
            -&gt;loadByCustomer(Mage::getSingleton('customer/session')-&gt;getCustomerId());

        if ($this-&gt;getQuoteId() != $customerQuote-&gt;getId()) {
            if ($this-&gt;getQuoteId()) {
                $customerQuote-&gt;merge($this-&gt;getQuote())
                    -&gt;collectTotals()
                    -&gt;save();

                //carrinho unido
                Mage::getSingleton(&quot;core/session&quot;)-&gt;setIsLoadedCart(&quot;1&quot;);
            }

            $this-&gt;setQuoteId($customerQuote-&gt;getId());

            if ($this-&gt;_quote) {
                $this-&gt;_quote-&gt;delete();
            }
            $this-&gt;_quote = $customerQuote;
        }
        return $this;
    }
</pre>
<li>Em app/code/core/Mage/Checkout/Model/Observer.php altere o método loadCustomerQuote() para este:</li>
<pre class="brush: plain;">
    public function loadCustomerQuote()
    {
   	    try {
            Mage::getSingleton('checkout/session')-&gt;loadCustomerQuote();
        }
        catch (Mage_Core_Exception $e) {
            Mage::getSingleton('checkout/session')-&gt;addError($e-&gt;getMessage());
            return;
        }
        catch (Exception $e) {
            Mage::getSingleton('checkout/session')-&gt;addException(
                $e,
                Mage::helper('checkout')-&gt;__('Load customer quote error')
            );
            return;
        }

        //adiciona a mensagem
        if (Mage::getSingleton(&quot;core/session&quot;)-&gt;getIsLoadedCart() == &quot;1&quot;)
        {
			Mage::getSingleton('customer/session')-&gt;addNotice(
				Mage::helper('checkout')-&gt;__(&quot;Você já havia adicionado produtos ao carrinho em outra visita ao site e nós os restauramos para você. Por favor, revise seu carrinho antes de finalizar o pedido. Obrigado!&quot;)
			);
        }
    }
</pre>
<p>Isso fará com que a mensagem apareça nas telas gerais do sistema:<br />
<a target="_blank" href="http://alisson.indexainternet.com.br/wp-content/uploads/2010/02/resultado_2.gif"><img src="http://alisson.indexainternet.com.br/wp-content/uploads/2010/02/resultado_2-300x176.gif" alt="Mensagem nas telas gerais do Magento" title="Mensagem nas telas gerais do Magento" width="300" height="176" class="alignnone size-medium wp-image-185" /></a></p>
<li>E em app/design/frontend/default/default/template/checkout/onepage/billing.phtml adicione o seguinte trecho de código, antes de tudo:</li>
<pre class="brush: plain;">
&lt;div target=&quot;_blank&quot; id=&quot;messages_product_view&quot;&gt;
&lt;?php
	if (Mage::getSingleton(&quot;core/session&quot;)-&gt;getIsLoadedCart() == &quot;1&quot; &amp;&amp; $this-&gt;isCustomerLoggedIn())
	{
		$nome = Mage::getSingleton('customer/session')-&gt;getCustomer()-&gt;getName();

		Mage::getSingleton(&quot;core/session&quot;)-&gt;setIsLoadedCart(&quot;0&quot;);
		Mage::getSingleton('customer/session')-&gt;addNotice(
			Mage::helper('checkout')-&gt;__(&quot;Bem vindo, $nome. Você já havia adicionado produtos ao carrinho em outra visita ao site e nós os restauramos para você. Por favor, revise seu carrinho antes de finalizar o pedido. Obrigado!&quot;)
		);
		$this-&gt;getMessagesBlock()-&gt;setMessages(Mage::getSingleton('customer/session')-&gt;getMessages(true));
		echo $this-&gt;getMessagesBlock()-&gt;getGroupedHtml();
	}
?&gt;
&lt;/div&gt;
</pre>
<p>Esse é o passo mais importante, fará com que a mensagem apareça especificadamente quando os carrinhos são unidos já no processo de checkout, o que realmente pode ser confuso:<br />
<a target="_blank" href="http://alisson.indexainternet.com.br/wp-content/uploads/2010/02/resultado_1.gif"><img src="http://alisson.indexainternet.com.br/wp-content/uploads/2010/02/resultado_1-300x157.gif" alt="Mensagem na tela Onepage Checkout do Magento" title="Mensagem na tela Onepage Checkout do Magento" width="300" height="157" class="alignnone size-medium wp-image-184" /></a>
</ol>
<p>Mais defesas para salvar os carrinhos:<br />
- É incomum o cliente de verdade do site ficar enchendo o carrinho diversas vezes, como em um procedimento de teste.<br />
- O cliente sempre revê o que vai comprar, antes de fazer a compra, e dificilmente comprará por acidente. Quando estamos fazendo testes, passamos batido por essa parte clicando em &#8220;Finalizar Compra&#8221;.</p>
<p><strong>Solução 2</strong>: Quero desativar o salvamento de carrinhos mesmo assim!</p>
<ul>
<li>Para usuários visitantes: Basta ir em Sistema->Configuração->Web e colocar o Tempo-de-vida do cookie (Cookie Lifetime) para 0. Isso vai fazer com que, assim que o usuário fechar a janela do browser, todos os dados sejam perdidos. Isso força também uma limpeza do carrinho.</li>
<li>Para usuários logados: É aqui que o bicho pega. A princípio vamos em <em>Sistema->Configuração->Finalizar Compra->Carrinho de Compras->&#8221;Validade da cotação (dias)&#8221;</em>. Ali, colocando o valor &#8220;0&#8243;, teoricamente o carrinho não deveria ser salvo&#8230; Mas não é o que ocorre. Ainda não testei se até amanhã o carrinho vai se esvaziar (o que já seria errado pois de hoje até amanhã se passa 1 dia, e 0 é menor que 1), mas tudo bem. Ou na marra: vá até o arquivo app/code/core/Mage/Checkout/etc/config.xml e remova o seguinte trecho de código:</li>
<pre class="brush: plain;">
            &lt;customer_login&gt;
                &lt;observers&gt;
                    &lt;loadCustomerQuote&gt;
                        &lt;type&gt;singleton&lt;/type&gt;
                        &lt;class&gt;checkout/observer&lt;/class&gt;
                        &lt;method&gt;loadCustomerQuote&lt;/method&gt;
                    &lt;/loadCustomerQuote&gt;
                &lt;/observers&gt;
            &lt;/customer_login&gt;
</pre>
</ul>
<p>Note que, assim, carrinhos anteriores nunca são submetidos a operação de união com um carrinho novo, porém, caso não haja nada no carrinho, alguns produtos da última <em>quote</em> acabam sim voltando.</p>
<p>Mais informações:</p>
<ul>
<li><a target="_blank" href="http://imasters.uol.com.br/artigo/15001/ecommerce/o_primeiro_passo_para_ganhar_dinheiro_com_e-commerce_conhecer_o_seu_consumidor_online/">http://imasters.uol.com.br/artigo/15001/ecommerce/o_primeiro_passo_para_ganhar_dinheiro_com_e-commerce_conhecer_o_seu_consumidor_online/</a></li>
<li><a href="http://www.timaster.com.br/revista/artigos/main_artigo.asp?codigo=371&#038;pag=1">http://www.timaster.com.br/revista/artigos/main_artigo.asp?codigo=371&#038;pag=1</a></li>
<li><em>Os códigos deste post foram testados na versão 1.3.2.4.</em></li>
<li><em>Não altere arquivos do core, crie módulos.</em></li>
</ul>
<p>Abraço!</p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.indexainternet.com.br/carrinhos-abandonados-no-magento/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Magento: Novos campos no cadastro de cliente (Addendum do wiki)</title>
		<link>http://alisson.indexainternet.com.br/magento-novos-campos-no-cadastro/</link>
		<comments>http://alisson.indexainternet.com.br/magento-novos-campos-no-cadastro/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 12:56:53 +0000</pubDate>
		<dc:creator>Alisson Oldoni</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[cadastro cliente]]></category>
		<category><![CDATA[cadastro do cliente]]></category>
		<category><![CDATA[customer dataflow]]></category>
		<category><![CDATA[dataflow]]></category>
		<category><![CDATA[eav]]></category>
		<category><![CDATA[eav_entity]]></category>
		<category><![CDATA[fluxo dados]]></category>
		<category><![CDATA[novo campo]]></category>
		<category><![CDATA[novos campos]]></category>

		<guid isPermaLink="false">http://alisson.indexainternet.com.br/?p=136</guid>
		<description><![CDATA[Magento: Novos campos no cadastro de cliente e o fluxo dos dados dentro do Magento (Addendum ao wiki da comunidade).]]></description>
			<content:encoded><![CDATA[<p>Olá.</p>
<p>Já vamos começar este post (agora heterodoxo) com 1 link de referência: <a href="http://www.magentocommerce.com/wiki/custom_account/registration_fields" target="_blank">http://www.magentocommerce.com/wiki/custom_account/registration_fields</a>. Neste link temos toda a informação necessária para se criar um campo adicional na hora do cadastro do cliente pelo frontend, sendo que todos que seguem este artigo acabam conseguindo adicionar os campos com sucesso, portanto não vou descrever os passos que já estão ali.</p>
<p><span id="more-136"></span></p>
<p>O problema: em geral, para a criação de um novo campo no cadastro do usuário, este tutorial sempre foi o suficiente, mas quando tenta-se lidar pelo backend (admin) com estes campos criados surge um problema que exige uma mini-explicação superficial do fluxo de informações do cadastro no Magento. Vamos supor que criamos o campo &#8220;CPF&#8221;:</p>
<div id="attachment_141" class="wp-caption alignnone" style="width: 605px"><img src="http://alisson.indexainternet.com.br/wp-content/uploads/2010/02/teste.gif" alt="Fluxo de informações de dados do cliente" title="Fluxo de informações de dados do cliente" width="595" height="203" class="size-full wp-image-141" /><p class="wp-caption-text">Fluxo de informações de dados do cliente no Magento.</p></div>
<p>Ao ver esta imagem concluímos algo: se os dados do cliente são copiados da tabela <em>customer</em> pra tabela <em>sales</em> isso significa que, ao visualizarmos os dados desta compra, sempre veremos os dados que o cliente tinha na época da compra. Isso é vantajoso: se ele trocou de endereço 1 ano depois dessa compra, podemos saber o endereço que ele tinha na época; se ele resolver entregar seu cadastro para outra pessoa, trocando os dados, continuaremos com todos os dados que ele utilizou nas compras anteriores.</p>
<p>O fluxo de informações fica então assim: Na tabela <em>eav_attribute</em> temos o campo &#8220;cpf&#8221;. Este campo tem o entity_type_id = 1. Olhando na tabela <em>eav_entity_type</em> percebemos que o entity_type_id = 1 tem o entity_type_code = &#8220;customer&#8221;, ou seja, campos com este id servem para o cadastro do usuário (isso no Magento 1.3.2.4, essa relação entity_type_id/entity_type_code pode variar de versão pra versão). Beleza, isso faz com que na hora que o cliente se cadastre, o campo CPF seja gravado no banco. Mas na hora da compra, isso não faz com que o campo seja gravado junto da compra, como no fluxo acima. Esse segundo passo (o &#8220;addendum&#8221; a que me refiro nesse post) é feito da seguinte forma:</p>
<p>Passo 1: Vá até a tabela <em>eav_entity_type</em> no banco e ache o entity_type_id aonde o entity_type_code = &#8220;order&#8221;. No meu caso o valor é 11.</p>
<p>Passo 2: Rode o seguinte código apenas uma vez (colocando no index.php):</p>
<pre class="brush: plain;">
$idOrder = '11';
$installer = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer-&gt;addAttribute($idOrder, 'customer_cpf', $attrList);
</pre>
<p>Pronto. Você tem o campo (eav_entity, na verdade) que receberá os dados do cliente a cada compra na tabela <em>sales</em>. </p>
<p>Passo 3: agora, no arquivo Mage/Customer/etc/config.xml ou, idealmente, do módulo que adiciona campos ao cadastro que você estiver desenvolvendo, identifique esta tag e adicione a linha marcada:</p>
<pre class="brush: plain;">
&lt;config&gt;
    &lt;global&gt;
        &lt;fieldsets&gt;
           &lt;sales_convert_quote&gt; &lt;!-- achar esta tag --&gt;
                &lt;customer_cpf&gt;&lt;to_order&gt;*&lt;/to_order&gt;&lt;/customer_cpf&gt; &lt;!-- adicionar esta linha --&gt;
           &lt;/sales_convert_quote&gt;
        &lt;/fieldsets&gt;
    &lt;/global&gt;
&lt;/config&gt;
</pre>
<p>Isso vai fazer com que o campo &#8220;cpf&#8221; que você havia criado pro cliente seja gravado também na compra, trazendo as vantagens acima citadas. Agora, como ver esta informação na tela do pedido? O cliente se cadastrou, usou meu campo novo, os dados estão na tabela <em>sales_*</em> mas a cada pedido que ele faz eu tenho que voltar no cadastro dele pra verificar essa informação&#8230; </p>
<p>Passo 4 e final: o que podemos fazer é adicionar um pouco de código ao arquivo <strong>app/design/adminhtml/default/default/template/sales/order/view/info.phtml</strong>. Este arquivo é chamado quando estamos vendo um pedido, sua fatura, ou seu envio.</p>
<p>Dentro deste arquivo, dentro de um div chamado &#8220;box-right&#8221;, temos uma tabela com uma listagem de dados trazidas das tabelas <em>sales_*</em>. Como agora, depois das mudanças acima, nosso campo &#8220;cpf&#8221; também é gravado nesta tabela, basta adicionarmos esta linha a tabela:</p>
<pre class="brush: plain;">
                &lt;tr&gt;
                    &lt;td class=&quot;label&quot;&gt;&lt;label&gt;&lt;?php echo Mage::helper('sales')-&gt;__('CPF') ?&gt;&lt;/label&gt;&lt;/label&gt;&lt;/td&gt;
                    &lt;td&gt;
                    &lt;strong&gt;&lt;?php echo $this-&gt;htmlEscape($_order-&gt;getCustomerCpf())?&gt;&lt;/strong&gt;
                    &lt;/td&gt;
                &lt;/tr&gt;
</pre>
<p>Resultado:<br />
<a target="_blank" href="http://alisson.indexainternet.com.br/wp-content/uploads/2010/02/Untitled-4.jpg"><img src="http://alisson.indexainternet.com.br/wp-content/uploads/2010/02/Untitled-4-300x142.jpg" alt="Resultado" title="Resultado" width="300" height="142" class="alignnone size-medium wp-image-145" /></a><br />
<br />
Claro que o ideal é sempre fazer um módulo a parte e nunca sobrescrever arquivos do sistema. OFF-TOPIC: O uso do termo &#8220;addendum&#8221; fica pra quem é familiarizado com o <a target="_blank" href="http://pt.wikipedia.org/wiki/Zeitgeist,_o_Filme">Zeitgeist</a>.</p>
<p>Abraço, espero ter ajudado.</p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.indexainternet.com.br/magento-novos-campos-no-cadastro/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Novo módulo Anti-Fraude: Indexa MClearSale (via Locaweb)</title>
		<link>http://alisson.indexainternet.com.br/novo-modulo-anti-fraude-indexa-mclearsale-via-locaweb/</link>
		<comments>http://alisson.indexainternet.com.br/novo-modulo-anti-fraude-indexa-mclearsale-via-locaweb/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 10:36:21 +0000</pubDate>
		<dc:creator>Alisson Oldoni</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Módulos]]></category>
		<category><![CDATA[Anti-fraude]]></category>
		<category><![CDATA[Clearsale]]></category>
		<category><![CDATA[Indexa]]></category>
		<category><![CDATA[Locaweb]]></category>
		<category><![CDATA[MClearSale]]></category>
		<category><![CDATA[Módulo Anti-fraude]]></category>

		<guid isPermaLink="false">http://alisson.indexainternet.com.br/?p=117</guid>
		<description><![CDATA[A Indexa implantou com sucesso um módulo que integra o Magento ao sistema anti-fraude MClearSale, através do gateway da Locaweb.]]></description>
			<content:encoded><![CDATA[<p>A Indexa implantou com sucesso um módulo que integra o Magento ao sistema anti-fraude MClearSale, da Clearsale, através do gateway da Locaweb. O módulo já tenta se adequar automaticamente aos métodos de pagamento mais conhecidos do mercado e, em casos específicos, podemos também fornecer serviços de instalação customizada.</p>
<p>O fato deste módulo necessitar do CPF do comprador nos fez adaptar o Magento a realidade brasileira sem perder a compatibilidade para vendas internacionais. Um dos famosos &#8220;work-arounds&#8221; da comunidade brasileira para este cenário aonde o CPF é necessário era o de forçar a tradução do campo &#8220;TAX/VAT&#8221;, o que é longe de ser o recomendado. O módulo, porém, funciona em ambas as situações.<br />
<span id="more-117"></span><br />
Este módulo permite, já na tela do pedido, ter informações sobre o nível de segurança da transação, ou seja, nenhum click além do procedimento normal é necessário para um resumo das informações vindas do MClearSale. Para um detalhamento maior (compras anteriores, consulta completa do cpf, possibilidade de consulta por um analista, entre outras funcionalidades) basta um click e você já é levado para o ambiente da MClearSale.<br />
<br />
<a href="http://alisson.indexainternet.com.br/wp-content/uploads/2010/01/mclear_admin_sample.jpg" target="_blank"><img src="http://alisson.indexainternet.com.br/wp-content/uploads/2010/01/mclear_admin_sample-300x182.jpg" alt="Mclear admin sample" title="Mclear admin sample" width="300" height="182" class="alignnone size-medium wp-image-119" /></a><br />
<br />
<a href="http://alisson.indexainternet.com.br/wp-content/uploads/2010/01/mclear_admin_sample1.jpg" target="_blank"><img src="http://alisson.indexainternet.com.br/wp-content/uploads/2010/01/mclear_admin_sample1-241x300.jpg" alt="mclear admin sample acesso" title="mclear admin sample acesso" width="241" height="300" class="alignnone size-medium wp-image-130" /></a><br />
<br />
<a href="http://alisson.indexainternet.com.br/wp-content/uploads/2010/01/mclear_admin_sample2.jpg" target="_blank"><img src="http://alisson.indexainternet.com.br/wp-content/uploads/2010/01/mclear_admin_sample2-300x99.jpg" alt="mclear admin sample configurações" title="mclear admin sample configurações" width="300" height="99" class="alignnone size-medium wp-image-132" /></a><br />
<br />
Para maiores informações de como o MClearSale funciona vá para <a href="http://loja.clearsale.com.br/ComoFunciona.aspx" target="_blank">http://loja.clearsale.com.br/ComoFunciona.aspx</a>.</p>
<p>Abraço!</p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.indexainternet.com.br/novo-modulo-anti-fraude-indexa-mclearsale-via-locaweb/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>URL e Caminhos Físicos do Magento (URL PATH e SERVER PATH)</title>
		<link>http://alisson.indexainternet.com.br/url-caminhos-fisicos-magento/</link>
		<comments>http://alisson.indexainternet.com.br/url-caminhos-fisicos-magento/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 17:26:10 +0000</pubDate>
		<dc:creator>Alisson Oldoni</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Caminhos Físicos]]></category>
		<category><![CDATA[diretórios]]></category>
		<category><![CDATA[resolver url]]></category>
		<category><![CDATA[SERVER PATH]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[URL PATH]]></category>

		<guid isPermaLink="false">http://alisson.indexainternet.com.br/?p=76</guid>
		<description><![CDATA[Algumas dicas sobre como resolver caminhos e URLs dentro do Magento]]></description>
			<content:encoded><![CDATA[<p>Aqui na Indexa temos desafios diários com a plataforma Magento. Uma das últimas empreitadas foi a montagem de uma loja-base que poderá ser instalada em várias subpastas, ou seja, todo o código tem de funcionar independente da localização do arquivo no servidor (e, no geral, sempre é bom se trabalhar com URLs relativas e não fixas).</p>
<p>O Magento tem algumas funções que te ajudam a se localizar em desafios deste tipo, a maioria criadas estaticamente dentro da classe Mage, estando assim disponíveis em qualquer arquivo dentro do Magento sem a necessidade de se instanciar um objeto para tal. Aqui vão algumas:<br />
<span id="more-76"></span></p>
<pre class="brush: php;">
echo &quot;&lt;BR /&gt;&quot;.Mage::getBaseUrl();
// http://www.meusitemagento.com/ - O mesmo que passando URL_TYPE_LINK

echo &quot;&lt;BR /&gt;&quot;.Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
// http://www.meusitemagento.com/ - A url (porção com o nome do servidor) atualmente sendo utilizada para acessar o Magento (leva em conta se está usando https)

echo &quot;&lt;BR /&gt;&quot;.Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK);
// http://www.meusitemagento.com/ - A url base do Magento (não leva em conta se está usando https)

echo &quot;&lt;BR /&gt;&quot;.Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA);
// http://www.meusitemagento.com/media - A url da pasta &quot;media&quot;

echo &quot;&lt;BR /&gt;&quot;.Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN);
// http://www.meusitemagento.com/skin - A url da pasta &quot;skin&quot;

echo &quot;&lt;BR /&gt;&quot;.Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_JS);
// http://www.meusitemagento.com/js - A url da pasta &quot;js&quot;

echo &quot;&lt;BR /&gt;&quot;.Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_DIRECT_LINK);
// http://www.meusitemagento.com/ - A url base do Magento sem levar em conta a Loja atual

echo &quot;&lt;BR /&gt;&quot;.Mage::getRoot();
// /home/domains/meusitemagento.com/public_html/app - O caminho físico da pasta &quot;app&quot; da instalação atual do Magento
</pre>
<p>Note que a função Mage::getBaseUrl() retorna por padrão o mesmo que retornaria se passássemos Mage_Core_Model_Store::URL_TYPE_LINK como parâmetro, que é a URL base http, independente se no momento o site estiver em modo seguro (https) ou inseguro (http).</p>
<div style="height:15px;">&nbsp;</div>
<p><strong>Dicas:</strong></p>
<ul>
<li>Um jeito rápido de descobrir qual o seu diretório de trabalho no servidor (um nível acima da pasta app do seu magento):</li>
</ul>
<pre class="brush: php;">
echo &quot;&lt;BR /&gt;&quot;.substr(Mage::getRoot(),0,strlen(Mage::getRoot())-4);
// /home/domains/meusitemagento.com/public_html/
</pre>
<ul>
<li>Para descobrir URLs e subdiretórios:</li>
</ul>
<pre class="brush: php;">
echo &quot;&lt;BR /&gt;&quot;.Mage::getUrl('');
// http://www.meusitemagento.com/ - A url do seu site

echo &quot;&lt;BR /&gt;&quot;.Mage::getUrl('customer/account');
// http://www.meusitemagento.com/customer/account/ - A url para o painel da conta do usuário

echo &quot;&lt;BR /&gt;&quot;.Mage::getUrl('', array('_secure'=&gt;true));
// https://www.meusitemagentoseguro.com/ - Força a recuperação da URL configurada para ser utilizada quando em modo seguro (HTTPS)
</pre>
<p>A função Mage::getUrl() aceita um segundo parâmetro, que, como no último exemplo acima, é um array. Este array contém nas chaves uma ou mais das opções que desejarmos passar, e, em cada parâmetro, o valor pode ser <em>false </em>ou <em>true</em>. Sendo assim, além de &#8220;_secure&#8221; podemos ter:</p>
<ol>
<li>_current : A URL atual</li>
<li>_use_rewrite : Força o uso de URL rewrite</li>
<li>_nosid : URL sem o ID da sessão do PHP (o SID sempre é passado quando se muda da url insegura para a url segura e vice-versa, ou em qualquer mudança de url aonde a sessão seria perdida caso o SID não fosse passado)</li>
<li>&#8230; Entre outros parâmteros encontrados em app/code/core/Mage/Core/Model/Url.php</li>
</ol>
<ul>
<li>Descobrir facilmente arquivos da pasta &#8220;skin&#8221;:</li>
</ul>
<pre class="brush: php;">
echo &quot;&lt;BR /&gt;&quot;.$this-&gt;getSkinUrl();
// http://www.meusitemagento.com/skin/frontend/MEU-PACKAGE/MEU-TEMA/

echo &quot;&lt;BR /&gt;&quot;.$this-&gt;getSkinUrl(&quot;images/icon_rss.gif&quot;);
// http://www.meusitemagento.com/skin/frontend/MEU-PACKAGE/MEU-TEMA/images/icon_rss.gif - O Magento tenta achar esta imagem dentro do tema configurado, caso ele não ache ele tenta dentro de http://www.meusitemagento.com/skin/frontend/default/default, nesta ordem.
</pre>
<ul>
<li>Dentro do arquivo app/code/core/Mage/Core/Model/Url.php existe no cabeçalho um esquema (praticamente em ASCII-art, hehe) explicando a nomenclatura que o Magento usa para cada porção da estrutura de uma URL.</li>
</ul>
<p>Abraço!</p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.indexainternet.com.br/url-caminhos-fisicos-magento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magento: Limpando produtos do carrinho</title>
		<link>http://alisson.indexainternet.com.br/magento-limpar-produtos-carrinho/</link>
		<comments>http://alisson.indexainternet.com.br/magento-limpar-produtos-carrinho/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 20:49:05 +0000</pubDate>
		<dc:creator>Alisson Oldoni</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[carrinho]]></category>
		<category><![CDATA[cart]]></category>
		<category><![CDATA[clear]]></category>
		<category><![CDATA[clear cart]]></category>
		<category><![CDATA[limpar]]></category>
		<category><![CDATA[limpar carrinho]]></category>
		<category><![CDATA[produtos]]></category>

		<guid isPermaLink="false">http://alisson.indexainternet.com.br/?p=84</guid>
		<description><![CDATA[Limpando produtos do carrinho do Magento.]]></description>
			<content:encoded><![CDATA[<p>Estamos montando um Magento multi-website aqui na Indexa em que os produtos não podem ser compartilhados entre as lojas de maneira alguma! E, em alguns momentos, o Magento acaba permitindo isso (como numa recompra, ou compartilhando itens salvos em um carrinho) colocando produtos de um website no carrinho de outro! Acredito que este seja um pequeno bug (principalmente na parte da recompra).<br />
<span id="more-84"></span><br />
Para resolver este problema, e limpar só os produtos QUE NÃO SÃO DO WEBSITE ATUAL no carrinho, use o código a seguir:</p>
<pre class="brush: php;">
foreach( Mage::getSingleton('checkout/session')-&gt;getQuote()-&gt;getItemsCollection() as $item )
{
   if ($item-&gt;getStore()-&gt;getCode() != Mage::app()-&gt;getWebsite()-&gt;getCode())
   {
      Mage::getSingleton('checkout/cart')-&gt;removeItem( $item-&gt;getId() )-&gt;save();
   }
}
</pre>
<p>Eu acabei colocando esta função no arquivo app/code/core/Mage/Customer/Model/Session.php, dentro da função <strong>login</strong>. Pra mim isto foi o ideal, pois o meu maior problema era o de usuários antigos que vinham com produtos de outra loja no momento do login. Este código também pode ser colocado no app/design/frontend/default/SEUTEMA/template/page/html/header.phtml, por exemplo, que é carregado em toda página, fazendo essa limpeza a todo momento (e deixando o <em>core</em> intacto).</p>
<p>IMPORTANTE: <strong>Ele também pode ser usado sem o <strong>if</strong> que faz a verificação da loja, para limpar todos os produtos do carrinho.</strong></p>
<p>Caso sua limpeza tenha de ser completa, e envolve toda a sessão do carrinho (métodos de envio, métodos de pagamento&#8230;), o código abaixo seria bem útil:</p>
<pre class="brush: php;">
Mage::getSingleton('checkout/session')-&gt;clear();
</pre>
<p>Abraço!</p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.indexainternet.com.br/magento-limpar-produtos-carrinho/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Novo Módulo Pagamento Digital para o Magento (free)</title>
		<link>http://alisson.indexainternet.com.br/novo-modulo-pagamento-digital-para-o-magento-free/</link>
		<comments>http://alisson.indexainternet.com.br/novo-modulo-pagamento-digital-para-o-magento-free/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 17:29:18 +0000</pubDate>
		<dc:creator>Alisson Oldoni</dc:creator>
				<category><![CDATA[Indexa]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[Módulos]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[grátis]]></category>
		<category><![CDATA[gratuito]]></category>
		<category><![CDATA[integração]]></category>
		<category><![CDATA[Módulo]]></category>
		<category><![CDATA[módulo de pagamento]]></category>
		<category><![CDATA[pagamento]]></category>
		<category><![CDATA[pagamento digital]]></category>

		<guid isPermaLink="false">http://alisson.indexainternet.com.br/?p=82</guid>
		<description><![CDATA[A Indexa Internet, líder em soluções Magento para o Brasil, lança um novo módulo totalmente free de integração com o Pagamento Digital.]]></description>
			<content:encoded><![CDATA[<p>A Indexa lançou no dia 24/09 um módulo community (free) para o Pagamento Digital compatível com a versão 1.3.x.</p>
<p>* Por favor, façam download no Connect: <a href="http://www.magentocommerce.com/extension/2005">Extensão Pagamento Digital para Magento</a>.</p>
<p>Maiores informações no post no <a href="http://gabriel.indexainternet.com.br/novo-modulo-pagamento-digital-para-o-magento-free/">blog do Gabriel</a>.</p>
<p>Caso você ache a extensão útil e queira nos ajudar a manter as atualizações, por favor crie agora a sua conta no Pagamento Digital pelo nosso link de parceiro: <a href="http://www.pagamentodigital.com.br/parceiros/indexa">http://www.pagamentodigital.com.br/parceiros/indexa</a> .</p>
<p>Aguardamos o feedback da comunidade!<br />
Abraços e boas vendas!</p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.indexainternet.com.br/novo-modulo-pagamento-digital-para-o-magento-free/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Template Hints no Admin do Magento .. Como? Usando o __FILE__</title>
		<link>http://alisson.indexainternet.com.br/template-hints-no-admin-do-magento-como-usando-o-__file__/</link>
		<comments>http://alisson.indexainternet.com.br/template-hints-no-admin-do-magento-como-usando-o-__file__/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 14:38:24 +0000</pubDate>
		<dc:creator>Alisson Oldoni</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[administrador]]></category>
		<category><![CDATA[backend]]></category>
		<category><![CDATA[dicas de caminho de modelo]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[template hints]]></category>

		<guid isPermaLink="false">http://alisson.indexainternet.com.br/?p=48</guid>
		<description><![CDATA[Como ligar as Template Hints no admin do Magento ou, na versão pt_BR, como ligar as Dicas de Caminho de Modelo no admin do Magento. Um jeito rápido de se alterar o template default do admin do Magento utilizando a variável __FILE__ do PHP.]]></description>
			<content:encoded><![CDATA[<p>Olá a todos!</p>
<p>Esta semana tive o seguinte desafio: customização do ambiente administrador (ou &#8220;admin&#8221;, ou &#8220;backend&#8221;) do Magento. Em uma primeira vista, tem-se a impressão de que o backend do Magento (cheio de campos obrigatórios as vezes não tão necessários, ou vazio de informações instrucionais para funcionalidades importantes, como preferir) não foi feito pra ser tão facilmente customizado como o frontend, principalmente pela falta da IMPORTANTE opção de se ligar os &#8220;Template Hints&#8221;, ou &#8220;Dicas de caminho de modelo&#8221;. O primeiro passo para se alterar alguma parte do layout/design do backend do Magento é descobrir em que arquivo cada parte está, porém sem a possibilidade das &#8220;template hints&#8221; a coisa complica um pouco mais.</p>
<p><em>* Esta opção fica dentro de Sistema-&gt;Configuração-&gt;Desenvolvedor. Alterando-se o Escopo para o website atual, tem-se opções para ligar as &#8220;Dicas de caminho de modelo&#8221;, porém isso só funciona para o frontend.<span id="more-48"></span></em></p>
<p>Eu recomendo que, antes de tudo, o cache do Magento seja desligado e devidamente limpo. Continuando, primeiro faça um backup dos arquivos do tema &#8220;default&#8221;. O método que utilizei é meio agressivo e pode danificar os arquivos do template. Enfim, para se conseguir um efeito parecido no backend, tive a seguinte abordagem (Magento 1.3.2.2):</p>
<ol>
<li>Encontre um editor que faça substituição de texto em massa. Eu utilizei o já descontinuado, porém muito bom, Macromedia Homesite. Nele temos a opção &#8220;Extended Replace&#8221; que fará o trabalho.</li>
<li>Todos os arquivos do template default do backend (ao menos não encontrei um que não tenha até agora) tem um comentário logo no início, sobre a licença e etc., será esse texto que tuilizaremos como base da nossa mudança.</li>
<li>Você irá procurar por:
<pre class="brush: php;">
&lt;?php
/**
* Magento
*
* NOTICE OF LICENSE
</pre>
<p>Em todos os arquivos (incluindo subdiretórios) do diretório /app/design/adminhtml/default/<strong>default</strong>/template/ e substituirá por:</p>
<pre class="brush: php;">
&lt;?php

echo &quot;&lt;div style='border: 1px solid red;'&gt;&quot;.__FILE__.&quot;&lt;/div&gt;&quot;;

?&gt;&lt;?php
/**
 * Magento
 *
 * NOTICE OF LICENSE
</pre>
</li>
<li style="margin-top:15px;">Se tudo der +ou- certo, você verá uma tela assim:<a href="http://alisson.indexainternet.com.br/wp-content/uploads/2009/08/001.jpg"><img class="size-full wp-image-50 alignnone" title="Resultado Homesite" src="http://alisson.indexainternet.com.br/wp-content/uploads/2009/08/001.jpg" alt="Resultado Homesite" width="511" height="341" /></a></li>
<li style="margin-top:15px;">Devolta ao admin, temos o seguinte resultado:<a href="http://alisson.indexainternet.com.br/wp-content/uploads/2009/08/002.jpg"><img class="size-full wp-image-51 alignnone" title="Resultado Backend Magento" src="http://alisson.indexainternet.com.br/wp-content/uploads/2009/08/002.jpg" alt="Resultado Backend Magento" width="622" height="383" /></a></li>
</ol>
<p>Pronto, seu admin já tem todas as dicas necessárias para se começar a descobrir onde e o que alterar. Dicas:</p>
<ul>
<li>Se você colocar um if antes do echo, você pode controlar a impressão ou não das hints com uma simples variável de controle. Esta variável pode, por exemplo, estar dentro de index.php.</li>
<li>Caso não queira inserir este &#8220;echo&#8221; dentro dos arquivos do template que terá seu layout modificado, trabalhe com 2 instalações ou 2 temas diferentes para o admin. No meu caso, eu trabalhei com uma instalação local diferente da que seria modificada. Assim você pode ter um tema ligado só para descobrir caminhos.</li>
</ul>
<p><em><br />
Edit: Acabei descobrindo um outro jeito muito bom neste link: <a href="http://classyllama.com/magento/development/enable-templateblock-hints-in-admin-panel/">http://classyllama.com/magento/development/enable-templateblock-hints-in-admin-panel/</a>. Em resumo seria:<br />
1) Conecte-se ao banco;<br />
2) Execute esta query:</em></p>
<pre class="brush: plain;">
INSERT INTO core_config_data (scope, scope_id, path, value)
VALUES ('default', 0, 'dev/debug/template_hints', 1),
('default', 0, 'dev/debug/template_hints_blocks', 1);
</pre>
<p><em>Feito! Para desligar os hints abra a tabela core_config_data table e mude a coluna &#8220;value&#8221; da linha que você adicionou para o valor &#8220;0&#8243;.</em></p>
<p>T+!</p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.indexainternet.com.br/template-hints-no-admin-do-magento-como-usando-o-__file__/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Magento e IE6 (suporte a PNG utilizando IEPNGFIX)</title>
		<link>http://alisson.indexainternet.com.br/magento-e-ie6-suporte-a-png-utilizando-iepngfix/</link>
		<comments>http://alisson.indexainternet.com.br/magento-e-ie6-suporte-a-png-utilizando-iepngfix/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 13:05:08 +0000</pubDate>
		<dc:creator>Alisson Oldoni</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[FIX]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[IEPNGFIX]]></category>
		<category><![CDATA[PNG]]></category>

		<guid isPermaLink="false">http://alisson.indexainternet.com.br/?p=35</guid>
		<description><![CDATA[Como resolver os problemas de integração do Magento com IE6, em layouts que façam uso extensivo de PNGs com transparência, utilizando o IEPNGFIX.]]></description>
			<content:encoded><![CDATA[<p>O Magento lida com o IE6 de forma brilhante, com folhas de estilo separadas, exatamente como a W3C recomenda. Porém percebi essa semana, enquanto fazia um corte de layout bem moderno e cheio de sombras e transparências, que os PNGs acabam morrendo no caminho.</p>
<p>Possuindo uma solução integrada pra lidar com esse problema, o Magento <em>quase</em> faz isso tudo passar despercebido, mas ela não trata todas as possibilidades como, por exemplo, alguns tipos de PNGs como background. Para resolver isso, instalei nele uma famosa correção que circula na web, o IEPNGFIX (já muito bem rankeado no google, diga-se de passagem). <span id="more-35"></span>Seguem os passos de como fiz para instalá-lo no Magento:</p>
<ul>
<li>Ente em http://www.twinhelix.com/css/iepngfix/ e baixe a última versão da correção. No momento é a 2.0 alpha 3, que você pode obter clicando em “teste area”.</li>
<li>Faça upload dos arquivos blank.gif, iepngfix.htc e iepngfix_tilebg.js (contidos no zip da correção) para o diretorio skin do seu template, algo como http://meumagento.com.br/skin/frontend/default/meutema.</li>
<li>Abra o arquivo app/design/frontend/default/meutema/template/page/html/head.phtml – Transforme a tag script de seu original:</li>
</ul>
<p>Original:</p>
<pre class="brush: xml;">
&lt;script&gt;
//&lt;![CDATA[
var BLANK_URL = '&lt;?php echo $this-&gt;helper('core/js')-&gt;getJsUrl('blank.html') ?&gt;';
var BLANK_IMG = '&lt;?php echo $this-&gt;helper('core/js')-&gt;getJsUrl('spacer.gif') ?&gt;';
//]]&gt;
&lt;/script&gt;
</pre>
<p>Para:</p>
<pre class="brush: xml;">
&lt;script&gt;
//&lt;![CDATA[
var BLANK_URL = '&lt;?php echo $this-&gt;helper('core/js')-&gt;getJsUrl('blank.html') ?&gt;';
var BASE_SKIN = '&lt;?php echo $this-&gt;getSkinUrl('blank.gif') ?&gt;';
//]]&gt;
&lt;/script&gt;
</pre>
<ul>
<li>No final desse mesmo arquivo, adicione as seguintes linhas:</li>
</ul>
<pre class="brush: xml;">
&lt;style type=&quot;text/css&quot;&gt;
img, div, a, input { behavior: url(&lt;?php echo $this-&gt;getSkinUrl('iepngfix.htc') ?&gt;) }
&lt;/style&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php echo $this-&gt;getSkinUrl('iepngfix_tilebg.js') ?&gt;&quot;&gt;&lt;/script&gt;
</pre>
<ul>
<li>Abra o arquivo iepngfix.htc e altere o caminho da imagem em branco para:</li>
</ul>
<pre class="brush: jscript;">
// This must be a path to a blank image, relative to the HTML document(s).
// In production use I suggest '/images/blank.gif' or similar. That's all!
IEPNGFix.blankImg = BASE_SKIN;
</pre>
<ul>
<li>Limpe todos os caches possíveis e dê um reload.</li>
</ul>
<p><strong>Lembre-se:</strong></p>
<ul>
<li>Coloque width e height em todos os PNGs que existirem no seu site.</li>
<li>Caso a correção comece a dar alerts dizendo que existem &#8220;unclickable links&#8221;, simplesmente comente a única linha que contém a palavra &#8220;alert&#8221; também no arquivo iepngfix.htc. Aparentemente, apesar de parar de incomodar o usuário, tudo continua funcionando como deveria.</li>
<li>Quando puder, use GIF! É menos chance de dar algum problema&#8230; <img src='http://alisson.indexainternet.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>Obrigado e até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.indexainternet.com.br/magento-e-ie6-suporte-a-png-utilizando-iepngfix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magento: Table Rate Shipping ou Frete por Taxas de Tabela</title>
		<link>http://alisson.indexainternet.com.br/magento-table-rate-shipping-frete-taxas-de-tabela/</link>
		<comments>http://alisson.indexainternet.com.br/magento-table-rate-shipping-frete-taxas-de-tabela/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 22:10:07 +0000</pubDate>
		<dc:creator>Alisson Oldoni</dc:creator>
				<category><![CDATA[Indexa]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[Frete]]></category>
		<category><![CDATA[Module]]></category>
		<category><![CDATA[Módulo]]></category>
		<category><![CDATA[Shipping]]></category>
		<category><![CDATA[Table Rate]]></category>
		<category><![CDATA[Table Rates]]></category>
		<category><![CDATA[Taxas de Tabela]]></category>

		<guid isPermaLink="false">http://alisson.indexainternet.com.br/?p=19</guid>
		<description><![CDATA[Olá.. Não sei se vou ajudar alguém com este post mas, pelo que me consta, existe uma certa dificuldade em fazer o Table Rate funcionar no Magento. Sendo assim, vou contar essa aventura de +ou- 6 horas de busca incansável pelas poucas linhas de código que resolveriam meus problemas. Enfim, tive essa necessidade com um [...]]]></description>
			<content:encoded><![CDATA[<p>Olá.. Não sei se vou ajudar alguém com este post mas, pelo que me consta, existe uma certa dificuldade em fazer o <strong>Table Rate</strong> funcionar no Magento. Sendo assim, vou contar essa aventura de +ou- 6 horas de busca incansável pelas poucas linhas de código que resolveriam meus problemas. Enfim, tive essa necessidade com um cliente aqui da Indexa, que precisava enviar seus produtos através de uma transportadora. Recebi as informações de cobrança em uma colorida e extensa (literal e lateralmente) planilha do Excel, que, depois de muitos ctrl+c ctrl+v, se tornou um resultado típico de uma SQL, depois transformado no formato CSV, que é o que o Magento lê, a seguir:</p>
<p>&#8220;País&#8221;,&#8221;Estado&#8221;,&#8221;CEP&#8221;,&#8221;Peso (e acima)&#8221;,&#8221;Valor do frete&#8221;<br />
&#8220;BR&#8221;,&#8221;RJ&#8221;,&#8221;*&#8221;,&#8221;0.25&#8243;,&#8221;11.71&#8243;<br />
&#8220;BR&#8221;,&#8221;RJ&#8221;,&#8221;*&#8221;,&#8221;0.5&#8243;,&#8221;12.39&#8243;<br />
&#8220;BR&#8221;,&#8221;RJ&#8221;,&#8221;*&#8221;,&#8221;0.75&#8243;,&#8221;13.07&#8243;<br />
&#8230;<span id="more-19"></span></p>
<p>Sendo assim, para qualquer CEP do estado RJ com produtos pesando até 250 gramas o preço de envio fica R$ 11,71,  de 251 gramas até 500 gramas custa R$ 12,39, e assim por diante, com uma regra pra cada estado. Porém, como problemática típica, pra cada estado existem 2 valores: um para capital, e outro para interior. Nesse caso, apesar de existirem extensões para tabelas múltiplas, como nos links a seguir:</p>
<p><a href="http://www.magentocommerce.com/extension/306/pickup-at-event--multiple-flatrates" target="_blank">http://www.magentocommerce.com/extension/306/pickup-at-event&#8211;multiple-flatrates</a><br />
<a href="http://www.magentocommerce.com/extension/1357/product-matrix-shipping" target="_blank">http://www.magentocommerce.com/extension/1357/product-matrix-shipping</a><br />
<a href="http://www.magentocommerce.com/extension/728/multiple-tablerates" target="_blank">http://www.magentocommerce.com/extension/728/multiple-tablerates</a></p>
<p>&#8230;acabei optando por cadastrar Regions diferentes (como &#8220;São Paulo &#8211; Interior&#8221; e &#8220;São Paulo &#8211; Capital&#8221;), o que agradou mais esse cliente em específico, por já facilitar a diferenciação da taxa a ser utilizada através de uma simples olhada no endereço do cliente.</p>
<p>Refiz então o CSV para essa nova situação, usando siglas como &#8220;RJI&#8221; para o interior do &#8220;Rio de Janeiro &#8211; Interior&#8221; e &#8220;RJC&#8221; para &#8220;Rio de Janeiro &#8211; Capital&#8221;, modificando isso tudo lá nas tabelas de Regions do MySQL do Magento&#8230; Mas, ao fazer o upload do CSV pela tela de configuração (ver imagem mais abaixo no post) um erro de &#8220;undefined index&#8221; me foi mostrado. Não sei se há um jeito melhor de resolver isso, porque todos os índices estavam corretos e etc, mas tive de fazer a seguinte alteração no core pro arquivo conseguir ser processado corretamente. Me pareceu um pequeno bugfix:</p>
<p>/www/app/code/core/Mage/Shipping/Model/Mysql4/Carrier/Tablerate.php<br />
<img class="alignnone size-full wp-image-30" title="001" src="http://alisson.indexainternet.com.br/wp-content/uploads/2009/07/001.jpg" alt="001" width="550" height="85" /></p>
<p>Certo, na linha 202 adicionei aquele if checando se o índice existe antes de indexá-lo e tudo pareceu correr bem a partir de então&#8230; Fiz mais 2 mudanças no core para o Tablerate funcionar corretamente pro meu caso:</p>
<p>/www/app/code/core/Mage/Shipping/Model/Mysql4/Carrier/Tablerate.php<br />
<img class="alignnone size-full wp-image-31" title="002" src="http://alisson.indexainternet.com.br/wp-content/uploads/2009/07/002.jpg" alt="002" width="560" height="338" /></p>
<p>As condições dessa query são bem importantes pra definir como o Magento traz os resultados da Tablerate e o relaciona com os produtos e o peso. No print acima está como as minhas condições acabaram ficando. Na próxima e última alteração, fiz com que a listagem de estados lá do frontend viesse em ordem alfabética. Para isso, criei uma função que ordena o array das regiões do Brasil, sem modificar seus índices:</p>
<p>/www/app/code/Mage/Directory/Helper/Data.php<br />
<img class="alignnone size-full wp-image-32" title="003" src="http://alisson.indexainternet.com.br/wp-content/uploads/2009/07/003.jpg" alt="003" width="560" height="169" /></p>
<p>Bom, partindo para a configuração final, logo abaixo segue a tela com as opções que selecionei lá nas configurações do admin e que deixou tudo funcionando no checkout&#8230; Pra chegar até esta tela clique em Sistema-&gt;Configurações e selecione Taxas de Tabela, e lembre-se de selecionar o website pra essas opções aparecerem!</p>
<p><img class="alignnone size-full wp-image-20" title="tax_rates" src="http://alisson.indexainternet.com.br/wp-content/uploads/2009/07/tax_rates.jpg" alt="tax_rates" width="580" height="580" /></p>
<p>E agora um print do resultado dessa brincadeira no frontend:</p>
<p><img class="alignnone size-full wp-image-22" title="frontend_multi_table_rate" src="http://alisson.indexainternet.com.br/wp-content/uploads/2009/07/frontend_multi_table_rate.jpg" alt="frontend_multi_table_rate" width="550" height="368" /></p>
<p>Valeu pessoal, espero ajudar aí e até a próxima! <img src='http://alisson.indexainternet.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.indexainternet.com.br/magento-table-rate-shipping-frete-taxas-de-tabela/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Botões do tema Modern para Magento em português!</title>
		<link>http://alisson.indexainternet.com.br/botoes-do-tema-modern-para-magento-em-portugues/</link>
		<comments>http://alisson.indexainternet.com.br/botoes-do-tema-modern-para-magento-em-portugues/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 19:42:28 +0000</pubDate>
		<dc:creator>Alisson Oldoni</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[modern]]></category>
		<category><![CDATA[português]]></category>
		<category><![CDATA[tema]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[tradução]]></category>

		<guid isPermaLink="false">http://alisson.indexainternet.com.br/?p=8</guid>
		<description><![CDATA[Enquanto o mundo ainda não adota o Esperanto como segunda língua oficial (utopia), o Inglês vai crescendo em sua utilização e, meio que por necessidade, acaba se tornando obrigatório para todos os amantes de tecnologia, programadores web, e etc&#8230; Afinal de contas, é nos países de língua inglesa onde o dinheiro rola bem mais solto [...]]]></description>
			<content:encoded><![CDATA[<p>Enquanto o mundo ainda não adota o <a href="http://pt.wikipedia.org/wiki/Esperanto" target="_blank">Esperanto </a>como segunda língua oficial (utopia), o Inglês vai crescendo em sua utilização e, meio que por necessidade, acaba se tornando obrigatório para todos os amantes de tecnologia, programadores web, e etc&#8230; Afinal de contas, é nos países de língua inglesa onde o dinheiro rola bem mais solto para os investimentos nessa área&#8230;</p>
<p>O Magento não foge dessa regra e acaba contando com diversos colaboradores para sua tradução para o português. Meu co-worker aqui (ou &#8220;koleg labor&#8221;, em uma tentativa de esperanto) <a href="http://gabriel.indexainternet.com.br/" target="_blank">Gabriel Zamprogna</a> ajudou bastante nesse sentido, sendo atualmente um dos moderadores da tradução do Magento para o nosso querido pt-BR. E, sem enrolar mais, aqui vai a minha pequena contribuição: <a href="http://alisson.indexainternet.com.br/downloads/botoesMagentoModern-ptBr.zip">clique aqui e baixe os botões do tema Modern do Magento traduzidos para português</a>. Junto no pacote ainda vai o template em PSD para criação de novos botões!</p>
<p>E, bom, apesar da etimologia, acredito que não seja necessário traduzir o botão &#8220;OK&#8221;, não é? Obrigado, bom download, e até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://alisson.indexainternet.com.br/botoes-do-tema-modern-para-magento-em-portugues/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
