CRM não é tecnologia, CRM é conceito!

Recentemente, tive uma aula muito interessante na faculdade onde foi discutido como funciona, na prática, um CRM ou Customer Relationship Management ou a Gestão de Relacionamento com o Cliente (como preferirem).

Acho importante compartilhar este conceito com vocês, pois muitas empresas pecam na hora de implantar um sistema que atenda o “conceito” da sua empresa e, de fato, fazem um bom relacionamento com o seu cliente. É muito importante entender o que é um CRM de fato, para depois agir em prol desta causa – fidelização, angarização e prospecto.

O CRM abrange, no geral, três grandes áreas dentro de uma empresa:

– Automatização da gestão de marketing.

– Automatização da gestão comercial, dos canais e da força de vendas.

– Gestão dos serviços ao cliente.

Vou falar sobre CRM utilizando as duas faces do conceito: o lado tecnológico e o lado conceitual, que é o mais importante.

CRM como conceito

Lembre-se sempre: antes de se agir em prol da causa, atendê-la. É muito importante. Conversando sobre as experiências com outros programadores e funcionários de outras agências, é comum constatarmos empresas que simplesmente compram qualquer “ferramenta” de CRM e começam a utilizar sem fazer qualquer tipo de planejamento.

Pensam: – Ah! Se o software diz pra eu fazer isso, irei fazê-lo! Deve ser o certo.

Wrong! Junto à uma equipe competente de marketing, a empresa deve definir todo o processo de relacionamento com o cliente que abrange as três grandes áreas da empresa.

– Automatização da gestão de marketing.

– Automatização da gestão comercial, dos canais e da força de vendas.

– Gestão dos serviços ao cliente.

Identificando os pontos e como funciona o conceito de marketing, devemos ir atrás de uma ferramenta ou seja, de uma tecnologia que atenda os pontos levantados e estudados pela equipe de gestão de marketing.

Imagine o quão desmotivado ficaria um funcionário se o setor dele funcionasse perfeitamente com as ferramentas que ele estava utilizando e, de repente, um gestor maluco colocasse uma ferramenta grotesca de CRM que fizesse com que ele demorasse nove vezes o tempo que ele levaria para fazer o que fazia do modo antigo.

Portanto lembre-se: entender o conceito é importante para não confundir na hora de mudar a empresa.

Quando o CRM dá errado…

É muito fácil identificar quando o CRM é aplicado de forma errada dentro de uma empresa.

Atire a primeira pedra quem nunca precisou ligar para uma empresa e teve que repetir seus dados cadastrais para cada setor que o atendente fosse te transferindo. É frustrante, certo?

Quando você, cliente, fica frustrado com algo ou alguém da empresa que presta serviço para você é porque o CRM está sendo aplicado de forma errada, (quem disse que CRM também não são pessoas?) ou está sendo aplicado de forma certa e colocado em prática utilizando a tecnologia errada.

Existem inúmeras falhas que poderíamos ficar relatando aqui incansavelmente, porém não é este meu objetivo. O importante aqui é você entender como deve fazer para evitar que o CRM da sua empresa vá por água abaixo.

Quando o CRM dá certo…

Para saber identificar quando o CRM de uma empresa está sendo aplicado de forma correta precisa-se de um pouco mais de contato com a empresa. Precisa explicar todos os setores da empresa e “experimentar” de perto como estão sendo feito os procedimentos internos.

O CRM não é um sistema só. O conceito é um só, porém é muito comum vários softwares fazerem parte do objetivo que o CRM propõe na sua essência.

Todos os setores da empresa vêem o cliente como uma coisa só. Todos partilham dos mesmos objetivos que são impostos em cada setor da empresa, porém o cliente é um só, sempre.

A integração e um bom processo de relacionamento com o cliente são a chave para felicidade da sua empresa e dos seus clientes.

CRM visto como tecnologia (Wiki)

O Customer Relationship Management é um sistema integrado de gestão com foco no cliente, constituído por um conjunto de procedimentos/processos organizados e integrados num modelo de gestão de negócios, do inglês “Customer Relationship Management”. O software que auxilia e apóia esta gestão é normalmente denominado sistema de CRM.

O seu objetivo principal é auxiliar as organizações a angariarem e fidelizarem clientes ou prospectos. Fidelizarem clientes atuais procurando atingir a sua satisfação total, através do melhor entendimento das suas necessidades e expectativas e formação de uma visão global dos ambientes de marketing.

Os processos e sistemas de gestão de relacionamento com o cliente permitem que se tenha controle e conhecimento das informações sobre os clientes de maneira integrada, principalmente através do acompanhamento e registro de todas as interações com o cliente, que podem ser consultadas e comunicadas às diversas partes da empresa que necessitem desta informação para guiarem as tomadas de decisões.

Uma das atividades da Gestão do Relacionamento com o cliente implica registrar os contatos por si realizados, de forma centralizada. Os registros não dependem do canal de comunicação que o cliente utilizou (voz, fax, e-mail, chat, SMS, MMS etc) e servem para que se tenham informações úteis e catalogáveis sobre os clientes. Qualquer informação relevante para as tomadas de decisões podem ser registradas, analisadas periodicamente, de forma a produzir relatórios de gestão.

– CRM Operacional: visa à criação de canais de relacionamento com o cliente.

– CRM Analítico: visa a obter uma visão consistente do cliente, usando os dados recolhidos pelo CRM operacional para obter conhecimento que permita otimizar e gerar negócios.

– CRM Colaborativo: foca na obtenção do valor do cliente através de colaboração inteligente, baseada em conhecimento.

Toda essa tecnologia só será recebida de forma positiva pela sua empresa e pelos seus clientes, se elas entenderem do conceito do seu negócio e de todas as suas premissas.

Resumindo…

Antes de querer revolucionar a forma como sua empresa se relaciona com o seu cliente, agrupe profissionais de valor no setor de marketing, para definir detalhadamente o negócio, o conceito e premissa da sua empresa.

Identificando e definindo perfeitamente estes pontos, vá em busca da tecnologia que atenda este conceito, estes valores suas premissas.

Convertendo HTML para PDF em PHP

Hoje vamos entender como efetuar a conversão de um documento (X)HTML padrão para um documento PDF válido utilizando a biblioteca DOMPDF.

Instalando o DOMPDF

1. Faça o download do DOMPDF no site oficial da biblioteca. A versão que vou utilizar neste tutorial é a versão 0.5.1

2. Descompacte os arquivos do DOMPDF em um local acessível pelo seu servidor web.

3. Abra e edite o arquivo dompdf_config.inc.php.

  • Se você deixar o DOMPDF_PDF_BACKEND com o valor `auto`, o dompdf vai utilizar a extensão PDFLib se ela estiver instalada no seu servidor, caso contrário o dompdf vai utilizar a R&OS CPDF class (é uma biblioteca para criação de documentos PDF sem a necessidade da instalação de uma extensão adicional).
  • Dê permissão de escrita no caminho que aponta a variável DOMPDF_FONT_DIR (lib/fonts é o padrão).

4. Pronto!

Utilizando o DOMPDF

Vou dar um exemplo simples de utilização da biblioteca. Seguindo este exemplo, você consegue fazer tudo o que precisa para geração de arquivos PDF.

[php]
<?php
$html = ‘
<html>
<head></head>
<style>
h1 {color:#333; size:20px; margin-bottom:5px;}
h3 {color:#222;}
</style>
<body>

<h1>IgorEscobar.com</h1>
<h3>Desenvolvimento, Tecnologia e Informação, na ponta do lápis.</h3>

</body>
</html>’;

require_once("dompdf/dompdf_config.inc.php");

$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->set_paper(‘letter’, ‘landscape’);
$dompdf->render();
$dompdf->stream("exemplo-01.pdf");
?>
[/php]

  • O objeto load_html é responsável por receber o conteúdo HTML e fazer a conversão.
  • O objeto set_paper é responsável pela configuração do papel (formato) do arquivo pdf. No primeiro argumento, você escolhe o tamanho de cada folha; no segundo argumento, você escolhe se quer cada folha em paisagem ou fotografia.
  • No Parâmetro 1 você pode preencher com:4a0, 2a0, a0…a10, b0…b10, c0…c10, ra0…ra4, sra0…sra4, letter, legal, ledger, tabloid, executive, folio, commerical #10 envelope, catalog #10 1/2 envelope, 8.5×11, 8.5×14 e11x17.
  • No Parâmetro 2 você pode preencher com: portrait ou landscape.
  • O objeto render é responsável por imprimir, no documento, o código correspondente ao PDF e exibi-lo no browser.
  • O objeto stream é opcional. Se ele for setado, vai forçar o download do documento com o nome que você passar, caso contrário o documento será exibido na tela.

Resultado Final

DOMPDF 01DOMPDF 01

Dicas

  • Caso você precise gerar um documento PDF muito grande, é provável que o apache reclame do limite de memória. Para contornar este problema, basta aumentar a capacidade de memória alocada. Para isso é preciso alterar o memory_limit com a função ini_set do php. (ex: ini_set(“memory_limit”, “16M”); ).
  • O DOMPDF não funciona com todas as fontes. As fontes que são suportadas por ele podem ser encontradas em lib/fonts. Caso necessite instalar novas fontes, no site do oficial da biblioteca você pode encontrar maiores informações.
  • Caso você não consiga que as suas folhas de estilo sejam carregadas no corpo do pdf, coloque as regras diretamente no corpo do documento. Se mesmo assim não funcionar, coloque as regras utilizando a propriedade style em cada tag do html setando as mesmas, diretamente.

É isso, pessoal!

Touch screen para deficientes visuais?

No dia 8 de Janeiro, na Reuters saiu uma matéria na qual pessoas discutiam o fato de a nova geração de celulares não ser usável por pessoas portadoras de deficiências visuais, pessoas que necessitam de instruções para utilizar aparelhos eletrônicos, pois não conseguem reter informações visuais dos aparelhos que carregam ou os que possuem em suas casas.

Eu acho, sim, plausível esta discussão. Nos meus 8 anos de desenvolvimento de aplicações para Internet, a questão “acessibilidade” se torna algo subentendido. Devemos nos preocupar com todas as pessoas, não importa aonde elas estejam, como elas estejam acessando a informação e suas capacidades físicas.

Mas logo que li este artigo, me vieram algumas perguntas: Será mesmo necessário adequar esta geração de aparelhos celulares para deficientes visuais? Será que esta nova geração de celulares é interessante para pessoas portadoras de deficiências? É possível desenvolver um aparelho touchscreen totalmente acessível e usável por tais pessoas?

A informação é dinâmica, cada hora, cada aplicativo, é desenvolvido de maneira colaborativa, e as informações são dispostas de maneiras diferentes na tela, é necessário muita informação e muita cultura prévia nestes tipos de interfaces para se manusear perfeitamente um aparelho destes. É possível cobrar de todos os programadores, criadores de aplicações para aparelhos móveis, que tais aplicações supram as necessidades de tais pessoas?

É possível “controlar” um ambiente colaborativo, aplicar regras de qualidade neste ambiente que realmente faça o ambiente funcionar?

Sinceramente não estou aqui para dizer se isso será possível ou não, já fiz isso uma vez e muita gente não soube interpretar e atacaram pedras. A tecnologia está aí para surpreender mesmo, e eu quero mesmo é que me surpreenda, mas se existem tantos outros aparelhos acessíveis para estas pessoas no mercado, funcionando bem, a um preço muito mais acessível.

Por que um portador de deficiência visual iria querer comprar um aparelho touchscreen já que a grande graça no negócio é a experiência visual?

16 técnicas smarty scripting para deixar seus templates ainda mais inteligentes

Uma compilação de dicas e técnicas muito úteis para se programar em Smarty Template Engine e construir dinâmicos e inteligentes templates para programadores PHP e designers de templates. Uma ótima fonte para quem está começando a codificar Smarty Templates. Tenho certeza que economizará muito tempo de procura.

1. Re-utilização de código HTML

Utilize a tag {caption} para gravar dentro de uma variável qualquer saída de html que estiver entre o {caption} e o {/caption}. É muito útil quando queremos re-utilizar o mesmo código em vários pontos do nosso template.

No exemplo abaixo estamos atribuindo toda a saída HTML para a variável $nav:

{capture name='nav'}
<ul>
{section name=item loop=$nav}
  <li><a href="{$nav[item].url}" title="{$nav[item].title}">{$nav[item].label}</a></li>
{/section}
</ul>
{/capture}

Mostra o conteúdo da caption $nav:

{$smarty.capture.nav}

Você pode também setar a saída da caption para uma variável de template:

{capture name='nav' assign='navmenu'}

Para exibir:

{$navmenu}

Quando o “name” não é especificado, o nome da caption automaticamente é setado como “default”:

{$smarty.capture.default}

2. Passando variáveis para sub-templates

Usando $GLOBALS via {php}, para nós, programadores, resolve o problema, certo? Mas é recomendado pelos designers de template que vocês utilizem o {capture}. Os designers de templates não querem colocar as suas mãos em código PHP, então, vamos falar em uma linguagem que eles também entendam.

Arquivo header.tpl

{capture name='columns'}3{/capture}

Então, arquivo index.tpl

{include file='header.tpl'}
{if $smarty.capture.columns == '3'}
. . .
{/if}
{include file='footer.tpl'}

Pode até mesmo acessar a variável dentro do footer.tpl

{if $smarty.capture.columns == '3'}
. . .
{/if}

3. Incluindo sub-templates utilizando delimitadores padrão

Aqui temos um problema comum quando queremos inserir variáveis de template dentro de arquivos javascript ou CSS. o Delimitador { e } é utilizado por ambas linguagens, então, vamos ter conflitos.

main.tpl
[php]
$smarty = new Smarty;
$smarty->left_delimiter = ‘<!–{‘;
$smarty->right_delimiter = ‘}–>’;
$smarty->assign(‘size’, ’36px’);
$smarty->assign(‘pre’, ‘Great’);
$smarty->assign(‘post’, ‘Templates’);
$smarty->display(message.tpl’);
[/php]

message.tpl

<style type="text/css">
<!--
h2 {font-size: <!--{$size}-->}
-->
</style>
<h2>Welcome to the World of <!--{$pre|capitalize}--> Smarty  <!--{$post|capitalize}--></h2>
<script language="javascript" type="text/javascript" >
<!--
function welcome(){
  alert('Welcome to the World of <!--{$pre|capitalize}--> Smarty  <!--{$post|capitalize}-->');
}
welcome();
-->
</script>

O código acima mostra o texto “Welcome to the World of Great Smarty Templates” com uma fonte de tamanho 26px e alerts com o mesmo texto.

4. Debugando Smarty Templates

O Smarty tem um console para debug que permite que você facilmente examine variáveis de template, templates incluídos, e variáveis de configuração para o template atual.

Para ativar o console de debug, defina a propriedade $debugging do smarty como true:
[php]
<?php
$smarty = new Smarty;
$smarty->debugging = true;

?>
[/php]
Se a janela do debug console não abrir quando a página for carregada, sete a propriedade $debug_tpl para o seu caminho path. Por padrão, Smarty vai olhar para o “debug.tpl” no SMARTY_DIR. Este arquivo é incluído nas distribuições do Smarty e pode ser achado na pasta “libs/”.

O jeito mais fácil e mais rápido para habilitar o debugging console é colocando a tag {debug} nos seus templates. Funciona da mesma forma. No entanto, Isso só permite visualizar todas as variáveis disponíveis dentro do escopo do template atual.

Exemplo:

<h1>{$title}</h1>
{debug}
<p>{$description}</p>

5. Acessando Request Variables via Smarty Templates

Request Variables do PHP podem ser acessadas via templates Smarty, utilizando a variável reservada {$smarty}. Request Variables, incluindo $_GET, $_POST, $_COOKIE, $_SERVER, $_ENV, e $_SESSION.

Exemplos:
Valor de saída da variável $_GET[‘page’] da URL

{$smarty.get.page}

Valor de saída da variável $_POST[‘page’] do formulário

{$smarty.post.page}

Saída de uma variável de cookie, $_COOKIE[‘status’]

{$smarty.cookie.status}

Saída de uma variável de servidor, $_SERVER[‘SERVER_NAME’]

{$smarty.server.SERVER_NAME}

Saída de uma variável do ambiente do seu sistema, $_ENV[‘PATH’]

{$smarty.env.PATH}

Saída de uma variável de sessão, $_SESSION[‘id’]

{$smarty.session.id}

Saída da variável “username” de todos os arrays juntos (get/post/cookies/server/env)

{$smarty.request.username}

6. Acessando variáveis de templates via script PHP

Você consegue acessar variáveis do smarty utilizando o método get_template_vars() no seus scripts PHP. No entanto, as variáveis de template só estão disponíveis depois do tempo de execução e interpretação dos seus templates. Depois deste trabalho, as variáveis são diretamente incorporadas para serem acessadas via PHP utilizando a tag {php} ou incluindo um arquivo php utilizando uma tag de função built-in {include_php}.

Considere o seguinte template:

{assign var='title' value='Smarty Templates'}

Acessando as variáveis depois da execução do template:

[php]
// Executa o template e retorna o resultado para uma variável
$page = $smarty->fetch(‘index.tpl’);

// Vai mostrar "Smarty Templates"
echo $smarty->get_template_vars(‘title’);

// Assina um valor para a variável title
$smarty->assign(‘title’, ‘The Great Smarty Templates’);

// Vai mostrar "The Great Smarty Templates"
echo $smarty->get_template_vars(‘title’);

// Vai exibir todas as variáveis assinadas dentro do template
var_dump($smarty->get_template_vars());
[/php]

Existem dois jeitos de acessar variáveis de tamplate durante a execução do template utilizando a tag {php}:
[php]
{php}
// using $this->_tpl_vars
echo $this->_tpl_vars[‘title’];

// using $this->get_template_vars() method
// the variable $this, is a smarty object
echo $this->get_template_vars(‘title’);
{/php}
[/php]

7. Substituição de variaveis em strings com aspas duplas

Funciona muito parecido com o jeito que você faz em PHP quando existem variáveis dentro de aspas duplas e exibir os seus respectivos valores dentro dentro destas aspas.

Substituição simples

Com o $filename tendo o valor “footer”, o atributo file vai apresentar o valor “templates/footer.tpl”.

{include file="templates/$filename.tpl"}

O código acima não funciona com aspas simples:

{include file='templates/$filename.tpl'}

Array Indexes

Assumindo que $module[1] contém “user_menu”:

O $module[1] acima vai ser substituído por “user_menu” e será traduzido dentro de “user_menu.tpl”.

{include file="$module[1].tpl"}

Com o valor de $index igual a 1, o código abaixo vai fazer algo parecido com o código de acima. Neste caso anexo a backticks.

{include file="`$module[$index]`.tpl"}

Associative Arrays

Assumindo que $item[‘name’] seja igual a “Computer”:

A variável $item.name abaixo vai ser substituido de “Computer” para “Computer unit”.

{assign var='label' value="`$item.name` unit"}

Com o valor de $prop igual a “name”, o que temos a seguir é equivalente ao código anterior.

{assign var='label' value="`$item.$prop` unit"}

Objects

Temos uma propriedade dentro de um objeto chamada $book->title que contém “Smarty Templates”.

O $book->title acima vai assumir o valor de “Smarty Templates” mas $msg tem o valor “My Smarty Templates book”.

{assign var='msg' value="My `$book->title` book"}

Com a $property igual a “title”, $msg vai apresentar o mesmo valor.

{assign var='name' value="`$book->$property`"}

Nota: Sempre anexe nomes de variáveis com (`) quando elas conterem pontos (.), objetos por referência (->), ou quando usarem index variables para arrays.

8. Manuseando variáveis de template em branco

Variáveis em branco podem quebrar o layout da sua tabela. Variáveis com valores em branco podem ser um problema em muitos casos, por exemplo, se alguma imagem do seu layout vier de uma variável de template, imagine esta imagem recebendo o src em branco toda vez que alguém acessa sua página? Muitas requisições perdidas, sem motivo?

Use a tag {if} para gerar uma saída padrão sempre que uma variável estiver em branco. Ou use o atalho, A variável modificadora “default”.

Considerando o código a seguir, exibirá dentro da célula de uma tabela:

<table><tr><td>
{if $user eq ''}
   
{else}
  {$user}
{/if}
</td></tr></table>

O shortcut:

<table><tr><td>{$user|default:' '}</td></tr></table>

Esse é o código que maniputa a propriedade src do img:

<img src="{if $image_url eq ''}/images/default.png{else}{$image_url}{/if}" />

Ou simplesmente:

<img src="{$image_url|default:'/images/default.png'}" />

O shortcut pode ser bem limpo olhando assim, somente neste tutorial, mas se você tiver o hábito de usar SEMPRE nos seus templates, ao longo do tempo isso pode ser meio “feio” de ser ver.

Por exemplo, considerando o código abaixo:

<a href="{$image_url|default:'/images/default.png'}">
<img src="{$image_url|default:'/images/default.png'}" />
</a>
<p>Path: {$image_url|default:'/images/default.png'}</p>

E, finalmente, aqui está um método bem mais limpo utilizando a tag {assign} com default.

{assign var='image_url' value=$image_url|default:'/images/default.png'}
<a href="{$image_url}">
<img src="{$image_url}" />
</a>
<p>Path: {$image_url}</p>

9. Passando variáveis para sub-templates

É muito comum para os web developers e web designers colocarem conteúdos repetitivos em templates separados e {include} (incluir) eles como necessários. Um exemplo típico é o header.tpl que inclui a tag html title etc. Suponhamos que precisaremos dele para exibir diferentes títulos em diferentes paginas dependendo da página que é incluída. Você consegue fazer isso, utilizando o atributo “title” da tag {include}, e é assim que passamos variáveis para sub-templates no Smarty.

Exemplo de tamplate que inclui o header.tpl com o parâmetro “title”.

{include file='header.tpl' title='Welcome!'}
{include file='footer.tpl'}

No header.tpl

<html>
<head>
<title>{$title|default:'Smarty World'}</title>
</head>
<body>

No footer.tpl

</body>
</html>

10. Formatando saídas numéricas

Você não precisa assinar várias variáveis com os mesmos valores em diferentes formatos, porque o smarty possui um modificador de variáveis que possibilita você formatar a saída de uma variável sem modificar seu conteúdo. “string_format” usa a mesma formatting syntax do sprintf() function do PHP.

Exemplo:

{$number}
{$number|string_format:'%.2f'}
{$number|string_format:'%d'}

Com o $number igual a 23.5787446, o código acima vai mostrar:

23.5787446
23.58
24

11. Manipulação de Datas

A regra da tumba é PHP coders sempre vão passar datas para o Smarty como timestamps. Isso permite que os designers de template utilizar o “date_format” modifier para o controle total sobre a formatação da data. Você pode também facilmente compará-las se quiser.

date format Padrão:

{$createDate|date_format}

Saída:
Feb 28, 2009

date format Customizado:

{$createDate|date_format:'%Y/%m/%d'}

Mostra:
2009/02/28

Comparando datas:

{if $startDate < $endDate}
  . . . faça alguma coisa . .
{/if}

Para converter a saída do {html_select_date} para o formato timestamp do PHP, use a função a seguir:
[php]
<?php
function makeTimeStamp($year=”, $month=”, $day=”)
{
if(empty($year)) {
$year = strftime(‘%Y’);
}
if(empty($month)) {
$month = strftime(‘%m’);
}
if(empty($day)) {
$day = strftime(‘%d’);
}

return mktime(0, 0, 0, $month, $day, $year);
}
?>
[/php]

12. Obfuscando endereços de e-mail

Quando você exibe endereços de e-mail em suas páginas, tenha certeza de que estes estão obfuscados para os spam bots não fazerem a festa com eles. No Smarty, você pode usar a {mailto} tag para obfuscar qualquer endereço de e-mail. Functiona de forma que você incorpora o endereço de e-mail via javascript, logo, o mesmo não aparece via código HTML se você exibir o código fonte.

Exemplo

<div id="contact">Entre em contato pelo e-mail:
{mailto address=$emailAddress encode='javascript' subject='Hi Smarty'}
</div>

13. Alternando estilos CSS

É comum possuirmos em nosso sistema tabelas, onde cada linha aparece de cor diferente para facilitar a leitura e a localização da informação. No Smarty, utilizando o {cycle} tag você consegue alternar por exemplo o fundo de suas células a cada siclo de um laço de repetição.

Aqui vai um código que alterna entre as classes css “odd” or “even”.

<table>
{section name=item loop=$items}
  <tr class="{cycle values='odd,even'}">
    <td>{$items[item].title}</td>
    <td>{$items[item].description}</td>
  </tr>
{/section}
</table>

14. Buscando e Apresentando Conteúdo On Demand

Tradicionalmente, adicionamos componentes PHP dentro do próprio conteúdo para que esta tarefa seja possível, porém, isso requer um pouco de lógica e de mais afinidade com o PHP. Por outro lado, removendo componentes do seus templates requer um pouco de lógica de programação para que você consiga otimizar suas rotinas em busca de um melhor desempenho

Possívelmente a manutenção para estes tipos de templates pode ser um verdadeiro pesadelo para projetos mais longos e mais complexos, especialmente quando o programador PHP e o template designer são duas pessoas diferentes.

A solução é escrever componentes (functions) que são executadas on demand (quando requisitadas) pelo template.

Existem dois caminhos para se escrever on demand scripts:

  • Use a tag {insert}

Funciona como se estivessemos chamando uma função pré definida pelo programador. Essas funções começam sempre com “insert_” e insere o retorno das funções dentro do template onde a tag {insert} é colocada. A tag é útil para exibir conteúdos dinâmicos porque o conteúdo nunca é cachgeado regularmente.

O código PHP:
[php]

require ‘Smarty.class.php’;
$smarty = new Smarty;
$smarty->display(‘index.tpl’);

function insert_getNews($params)
{
if ($params[‘type’] == ‘latest’) {
// recebe as notícias e processa
}
// retorna o resultado
return $html;
}
[/php]

O template, chamado “index.tpl”:

<div class="news">
<h3>Latest Smarty News</h3>
{insert name='getNews' type='latest'}
</div>
  • Escreva componentes como plugins

Plugin é um modulo que existe dentro do Smarty que contém scripts PHP para buscar e exibir dados necessários e assiná-los dentro de variáveis de template. É sempre carregado on demand, sendo assim, você não precisa se preocupar a respeito de adicionar ou remover linhas de lógica dos seus scripts para otimizá-los.

Como exemplo, aqui vai um simples plugin para notícias:

function.news.php observe o naming convention e coloque o arquivo dentro do diretório de plugins, geralmente “smarty/libs/plugins” de outra maneira set o $plugins_dir.
[php]
// function para receber as notícias
function fetch_news($symbol)
{
// o news items pode ser recebido pelo banco de dados
// mas para este exemplo, eu só criei um array para simular o retorno.
$items = array(
array(‘title’=>’Smarty News’, ‘description’=>’Great Smarty Templates’),
array(‘title’=>’PHP News’, ‘description’=>’Smarty Templating Engine’),
);
return $items;
}

function smarty_function_news($params, &$smarty)
{
// chamando nossa função personalizada
$news = fetch_news($params[‘symbol’]);

// assinando como uma variavel de template
$smarty->assign($params[‘assign’], $news);
}
[/php]

Para usar o plugin Smarty News no seu index.tpl:

{news symbol='SMARTY' assign='items'}
<ul>
{section name=item loop=$items}
  <li><h3>{$items[item].title}</h3><p>{$items[item].description}</p></li>
{/section}
</ul>

15. Utilizando Códigos CSS e Javascript Dentro de Templates Smarty

Por padrão, Smarty divide tudo que esta dentro de { e } incluindo os utilizados pelas regras CSS e funções Javascript.

Existem quatro caminhos para escapar da divisão do Smarty:

1. Separe seus arquivos CSS e Javascript em arquivos separados de forma que você possa incluí-los dentro do seu template utilizando os métodos padrão do HTML.

Incluindo o estilo CSS:

<link rel="stylesheet" href="style.css" type="text/css />

Incluindo arquivos Javascript:

<script type="text/javascript" src="popup.js"></script>

2. Adicione a tag {literal} no início e no fim {/literal} de códigos CSS ou Javascript que estejam incorporados ao seu documento, assim, o Smarty vai deixar tudo o que estiver entre o {literal} e {/literal} em paz.

CSS Incorporado:

<style type="text/css">
<!--
{literal}
p {text-indent: 10pt}
body {margin:0; padding:0;}
{/literal}
-->
</style>

Javascript Incorporado:

<script language="javascript" type="text/javascript" >
<!--
      {literal}
      function hello_world(){
        alert('Hello Smarty World');
      }
      {/literal}
-->
</script>

3. Mude o Smarty $left_delimiter e $right_delimiter de forma que os delimitadores não se confundam com os delmitadores de outras linguagens. Além disso, isso possibilita que você insira variáveis de template dentro de arquivos CSS e Javascript dinâmicamente.

O Código PHP:

<?php
      require 'Smarty.class.php';

      $smarty = new Smarty;

      $smarty->left_delimiter = '<!--{';
      $smarty->right_delimiter = '}-->';

      $smarty->assign('title', 'The Smarty Template Engine');
      $smarty->assign('element', 'h1');
      $smarty->assign('size', '36px');
      $smarty->assign('popup', 'alert');
      $smarty->display('index.tpl');
?>
[/php]

<strong>O Smarty Template "index.tpl":</strong>

<head>
<style type="text/css">
<!--
<!--{$element}--> {font-size: <!--{$size}-->}
-->
</head>
<body>
<<!--{$element}-->><!--{$title}--></<!--{$element}-->>
<script language="javascript" type="text/javascript" >
<!--
        function show_popup()
        {
                <!--{$popup}-->('<!--{$title}-->');
        }
//-->
</script>
</body>

O código acima vai mostrar:

<head>
<style type="text/css">
<!--
h1 {font-size: 36px}
-->
</head>
<body>
<h1>The Smarty Template Engine</h1>
<script language="javascript" type="text/javascript" >
<!--
function show_popup()
{
        alert('The Smarty Template Engine');
}
//-->
</script>
</body>

4. Use {ldelim} e {rdelim} no lugar de { and } na definição das regras dos seus arquivos css e na hora de escrever funções javascript.

Exemplo, arquivos CSS:

<style type="text/css">
<!--
      p {ldelim}text-indent: 10pt;{rdelim}
      body {ldelim}margin:0; padding:0;{rdelim}
-->
</style>

Mostrará:

<style type="text/css">
<!--
      p {text-indent: 10pt;}
      body {margin:0; padding:0;}
-->
</style>

16. Caching Smarty Templates

Caching aumenta a velocidade em metodos do tipo display() e fetch() salvando a saída destes metodos em arquivos separados. Vale lembrar que o cache somente é utilizado se o conteúdo não mudou. Set $caching = 2 e utilize o $cache_lifetime para controlar quanto tempo o cache da informação deverá ser matido para depois então ser atualizado.

Ativando o cache:
[php]
<?php
require 'Smarty.class.php';
$smarty = new Smarty;

// Quando $caching = 1,
// $cache_lifetime = 1 força o cache para nunca expirar
// $cache_lifetime = 0 vai sempre regenerar o cache
// Quando $caching = 2,
// $cache_lifetime seta a vida do cache, mas o mesmo pode ser setado para templates individuais.
$smarty->caching = 2; // lifetime é para cada cache

// Regenera o conteúdo cacheado se nenhum template ou arquivo de configuração for parte do cache que estiver sendo modificado.
$smarty->compile_check = true;

// $smarty->force_compile = true; vai forçar o cache ser sempre regenerado

// assume o cache_lifetime para o template index.tpl para 5 minutos
$smarty->cache_lifetime = 300;
$smarty->display('index.tpl');

// assume o cache_lifetime para o template home.tpl para uma hora
$smarty->cache_lifetime = 3600;
$smarty->display('home.tpl');
?>
[/php]
Duas coisas que devem ser consideradas quando implementamos caching:

  1. Não é recomendado colocar o diretório de cache abaixo da pasta raiz do servidor. Set $cache_dir para um diretório que não seja acessível via web.
  2. Tenha certeza de que o diretório do cache tem permissão de escrita no servidor.

Enfim, concluímos. 16 Técnicas Smarty Scripting para deixar seus templates ainda mais inteligentes para o seus projetos Web Smarty.

Para qualquer outra coisa, visite o site oficial do Smarty Template Engine para o PHP.

Se você tem alguma outra dica que não foi incluída aqui, sinta-se à vontade para incluí-la nos comentários.

Este artigo é uma tradução/adaptação do artigo 16 Very Useful Smarty Scripting Tips and Techniques to Make Templates Smarter.

Como debugar aplicações AJAX/PHP com FirePHP

Tradicionalmente, existem duas maneiras de se debugar uma aplicação server-side: você pode utilizar qualquer uma Integrated Development Environment (IDE) com algum build-in debugger ou registrar seus processos de depuração exibindo no próprio browser.

Neste artigo veremos uma forma elegante, simples e mais sustentável de se debuggar aplicações Ajax via browser (especificamente o Mozilla Firefox). Você vai aprender a turbinar o seu Firefox unindo o Firebug e o FirePHP, tornando-o uma elegante ferramenta de depuração.

Introdução

Quando técnicas como Ajax se tornam populares nos ambientes de desenvolvimento, é comum que junto surjam também novos desafios, por exemplo: como podemos debuggar requisições e respostas Ajax de forma eficiente para aplicações complexas?

Se utilizar um debugger foi difícil o suficiente com um modelo RESTful, interceptar uma requisição ajax específica é um saco e um pouco mais difícil. Geralmente o dumping de logs e informações destas transações devem ser feitas via JSON ou XML.

É aqui que o FirePHP ajuda, permitindo que você registre suas mensagens de debug dentro do console do Firebug. O FirePHP não faz uma bagunça no seu código (e não exige que você modifique nada para pegar erros). As mensagens que você imprime são enviadas para o browser através de HTTP response headers, ou seja, as suas mensagens de debug não vão “quebrar” as respostas das suas requisições com mensagens e erros de debug e fazendo parar de funcionar toda a sua aplicação. A resposta vem limpa e todo o processo de depuração vem catalogado no console do Firebug. Isso faz com que o FirePHP não seja só o aplicativo ideal para você debugar suas aplicações PHP, mas também o seu PHP codebase inteiro.

O que é o FirePHP?

O FirePHP é um add-on para um add-on (ahn?): ele estende o popular Firebug. O FirePHP é grátis e fácil de instalar através da seção Mozilla Add-Ons no site oficial da Mozilla. O site oficial do FirePHP pode ser encontrado neste endereço: www.firephp.org,e Christoph Dorn é a pessoa responsável pela criação do FirePHP.

O que eu preciso para iniciar?

Como você deve ter adivinhado, são necessáriastrês coisas para fazer com que o FirePHP funcione, são elas:

  1. Firefox
  2. Firebug
  3. FirePHP

Se você não tem um ou todas as aplicações listadas acima, você pode clicar no link respectivo de cada uma delas e receber instruções de como instalá-las de forma adequada.

Se você está começando agora a estudar um pouco mais sobre web development, o FirePHP pode ser um pouco “manhoso” no começo, mas o projeto é acompanhado por uma boa documentação e você pode aprender facilmente.

Instanciando a API OO

No seu script, você pode utilizar o bloco de código abaixo para instanciar o FirePHP ($firephp):

require_once('FirePHPCore/FirePHP.class.PHP');
$firephp = FirePHP::getInstance(true);
$firephp -> [classmethod];

Instanciando a API OO com os métodos estáticos

Esse é o formato como você deve chamar os métodos do FirePHP:

require_once('FirePHPCore/fb.PHP');
FB::[nameofmethod];

A API Procedural

E aqui está como se utiliza a API procedural do FirePHP:

require_once('FirePHPCore/fb.PHP');
fb($var);
fb($var, 'Label');
fb($var, FirePHP::[nameofmethod]);

Nós não vamos entrar em detalhes com relação aos benefícios em utilizar cada uma das APIs, cabe a você decidir a melhor forma para VOCÊ. Em outras palavras, eu não quero iniciar uma guerra para decidir qual é a melhor forma, procedural x orientada a objetos. It’s up to you.

Gravando mensagens no Firebug Console

Agora vamos detalhar as formas como você pode lidar com o Console do Firebug.

Exemplos básicos de log de mensagens

Se você está debugando um bug, o exemplo a seguir pode ser útil para você:

Fb::log("log message");

Isso vai imprimir a mensagem que você passou como parâmetro dentro do console do Firebug:

Fb::log($array, "dumping an array");

Passando um array (chega de print_r nos seus scripts) e mostrando o seu conteúdo. O exemplo acima vai mostrar a seguinte saída no seu console:

Dica: Quando você passar o mouse em cima das mensagens que foram logadas no seu console, uma janela aparece com todas as variáveis logadas, tudo tabulado de forma legível para desenvolvedor. Legal, né?

Registrando uma mensagem de Informação

Aqui vai uma forma de você exibir mensagens informativas no console:

Fb::info("information");

E o seu console exibirá assim:

Mensagens de Aviso

Segue aqui uma forma de você gravar mensagens de aviso:

Fb::warn("this is a warning");

Mensagens de Erro

Segue aqui uma forma de você gravar mensagens de Erro:

Fb::warn("error message");

Habilitando/Desabilitando o registro de logs no Console

Quando o seu site vai para o ar é muito importante que você desabilite o FirePHP para evitar que a pessoa errada veja a informação certa na hora errada (rs).

FB::setEnabled(false);

O bom de tudo isso é que você pode manter todo o código que você escreveu para debugar o seu código dentro do código, sem que você precise tirá-lo ou comentá-lo quando for para o ar. Se a sua aplicação possui um arquivo de configuração, é interessante criar uma variável dentro dele que através da qual você consiga habilitar e desabilitar o FirePHP.

Conclusão

Antes de tudo, aqui vai uma imagem com todas as mensagens possíveis de se utilizar no FirePHP:

Neste artigo, cobrimos coisas bem básicas de se fazer utilizando o FirePHP para ajudar você a debugar e ganhar informações sobre as suas requisições nas suas aplicações Ajax/PHP de forma fácil e sustentável no seu próprio browser. Eu espero que estes resultados tenham convencido você a explorar outras alternativas para debugar seu código fora da “old-school” techniques (echo’s print’s etc.). Usar o FirePHP é fácil e conveniente, dá a você muito mais opções e dados para propósitos de debug.

No futuro, pretendo cobrir recursos mais complexos do FirePHP para fazer desta simples ferramenta de debug uma ferramenta poderosa, completa e robusta.

[]’s

Projeto BoletoPHP

Pequeno desabafo.

Eu sou uma cara bastante antenado, leio muito e estou frequentemente me atualizando, principalmente nas coisas que surgem por aí (não vou me aprofundar muito nesta questão). Não posso acreditar que até hoje, eu nunca tenha visto nenhum texto ou qualquer palavra de apoio para este projeto que se iniciou em 2006. Me senti na obrigação de divulgar para você este projeto Open-Source mantido e coordenado por Elizeu Alcantara. Uma iniciativa que achei muito bacana e vale o meu apoio. O Projeto se chama BoletoPHP.

Projeto código aberto de sistema de boletos bancários em PHP

Este projeto é mantido e coordenado por Elizeu Alcantara desde Maio/2006 e teve origem do Projeto BBBoletoFree, que teve colaborações de Daniel William Schultz e Leandro Maniezo, que por sua vez foi derivado do PHPBoleto de João Prado Maia e Pablo Martins F. Costa.

Qual o principal motivo deste projeto?

Criar um sistema de geração de Boletos que seja mais simples do que o PhpBoleto e que se estenda ao desenvolvimento de boletos dos bancos mais usados no mercado, além do Banco do Brasil do projeto BBBoletoFree. Este sistema é de Código Aberto e de Livre Distribuição conforme Licença GPL.
Ele visa atender exclusivamente aos profissionais e desenvolvedores na área técnica de programação PHP dos boletos, portanto se faz necessário conhecimento desejado e estudo do mesmo para a perfeita configuração do boleto a ser usado, sendo de inteira responsabilidade do profissional a instalação, o funcionamento, os testes e a compensação do mesmo em conta bancária, pois não damos suporte técnico, portanto mensagens enviadas a nós com dúvidas gerais, técnicas ou solicitações de Suporte não serão respondidas.

O projeto BoletoPhp não tem foco na questão administrativa, comercial ou jurídica, pois isto compete exclusivamente aos bancos devido as suas particularidades existentes de cada carteira de cada boleto. Maiores informações sobre o conceito de Boleto de Cobrança, você pode acessar aqui o site da Wikipédia.

Faça parte desta revolução e colabore com este projeto

Todos os voluntários terão seus nomes publicados na área de Créditos do site e do sistema, para valorizar os profissionais que sabem a importância de ter uma ferramenta com Código Aberto como esta em suas mãos e para os seus negócios e para os seus clientes, pois da mesma forma que você foi ajudado, você também pode estar retribuindo com 30 minutos do seu tempo e assim ajudando outros, e como num ciclo, sendo ajudado logo adiante com boleto de um outro banco que você pode precisar.

Parabéns pela iniciativa, Elizeu Alcantara e todos os outros que também ajudaram de alguma forma, projetos como este sempre terão o meu apoio e o meu reconhecimento.

[]’s
Igor.

Evitando frustrações com sessões no PHP

Aplicações Web PHP podem acrescentar estado nas suas aplicações de forma muito fácil, porque a ilusão de estado é mantida através do ID de uma sessão e nela podemos transportar informações entre uma página e outra sem perdê-la no meio do caminho. Talvez você já tenha perdido uma produtividade potencial por conta de bugs bizarros ou até mesmo brechas de segurança por causa dessas belezinhas. Aqui vão quatro dicas para evitar que você fique perdendo tempo e garanta o seu site.

1. Não use underscores em hostnames

A menos que você tenha memorizado o RFC de caracteres permitidos no nome do host, você pode não estar ciente de que não é permitido colocar underscores em nomes de hosts. Em alguns browsers, como o firefox, não aplica esta proibição, mas o Internet Explorer vai se recusar a setar um cookie/session cujo hostname possua underscores. O IE vai fazer com que em cada página carregada seja gerado um novo ID de sessão. Mas o usuário nunca vai aceitá-la. Fonte: documentação set_cookie.

2. Atualize suas sessões depois de redirects

Você deve chamar a função  session_write_close (ou pelo alias session_commit) para escrever os dados na sessão antes que qualquer HTTP Location redirects seja emitido. Este comando também “libera” a sessão do usuário assim ele pode fazer outras atividades na sua aplicação. Veja os comentários por cenaculo e bkatz.

3. Prevenindo a fixação de sessão

Fixação de sessão ou session fixation, permite que qualquer usuário mal intencionado receba o id de uma sessão válida passando um simples link. Sem predizê-la ou roubá-la do cookie de algum usuário ou através de um $_GET comum. A vitima é pega utilizando o id da sessão gerada pelo “hacker” e não através do servidor. Você pode prevenir este tipo de ataque chamando a função  session_regenerate_id(), particularmente após armazenar informações importantes como o nome de um login ou uma flag. Isso vai mostrar para o “hacker” um id de sessão inútil. Chris Shifflet fez uma discussão mais meticulosa sobre Session Fixation.

Exemplo de ataque via Session Fixation

4- Não exponha id’s de sessão.

Cookies talvez sejam, relativamente, o lugar mais seguro para armazenar o id de suas sessões se comparando a incorporá-la diretamente na sua url (via PHPSESSID). Aqui vão duas configurações (via php.ini) para controlar este comportamento, cada um deles são muito importantes, por isso você deve setar ambos. Você deve setar o session.use_trans_sid para (off) e se você estiver utilizando PHP 4.3.0 ou superior você pode setar também session.use_only_cookies para “1?.

[]’s
Igor.

A função levenshtein(): Você quis dizer…

int levenshtein ( string $str1 , string $str2 , int $cost_ins , int $cost_rep , int $cost_del )

A função levenshtein, é uma função bastante interessante do PHP. Ela é capaz de calcular o numero de inserções, remoções e substituições necessárias para tornar a str1 na str2.

A função serviu como base de inspiração para várias ferramentas e serviços vistos e utilizados de maneira frequente na Internet; corretores ortográficos, o famoso “Did you mean” ou “Você quis dizer” do Google estão todos inclusos nesta lista.

Abaixo segue um exemplo da implementação do famoso “Did you mean” encontrado no próprio manual, utilizando a dita-cuja:

[php]
<?php
// input misspelled word
$input = ‘carrrot’;

// array of words to check against
$words = array(‘apple’,’pineapple’,’banana’,’orange’,
‘radish’,’carrot’,’pea’,’bean’,’potato’);

// no shortest distance found, yet
$shortest = -1;

// loop through words to find the closest
foreach ($words as $word) {
// calculate the distance between the input word,
// and the current word
$lev = levenshtein($input, $word);

// check for an exact match
if ($lev == 0) {
// closest word is this one (exact match)
$closest = $word;
$shortest = 0;

// break out of the loop; we’ve found an exact match
break;
}

// if this distance is less than the next found shortest
// distance, OR if a next shortest word has not yet been found
if ($lev <= $shortest || $shortest < 0) {
// set the closest match, and shortest distance
$closest = $word;
$shortest = $lev;
}
}

echo &quot;Input word: $input\n&quot;;
if ($shortest == 0) {
echo "Exact match found: $closest\n"";
} else {
echo "Did you mean: $closest?\n";
}
?>
[/php]

Saída

Input word: carrrot
Did you mean: carrot?

Espero que um dia seja útil para alguém!

Igor,
[]’s

Tradução: 31 dias para se tornar um blogueiro melhor.

Achei este texto interessante para as pessoas que costumam manter um blog então cai bem uma tradução para aqueles que tem mais dificuldade com o idioma.

Dia 1. Escreva melhor ’sobre’ a página. Escrever melhor ’sobre a pagina/blog’ ajuda a converter mais visitantes em fiéis leitores. Você pode ter uma página ‘ sobre’ mais efetiva simplesmente respondendo a pergunta: ‘O que esta página/blog tem a oferecer?’

Dia 2. Comece usando mais imagens em seus posts. Leitores gostam de imagens — Elas ajudam o tom do seu blog, ilustrando metáforas e geralmente tornam os seus posts mais interessantes de se olhar. Você pode usar um estoque gratuito de fotografias, mas você consegue também usar o sensacional Flickr images.

Dia 3. Escreva uma semana antes de antecêdencia. Desenvolvendo o hábito de escrever sempre antecipadamente ajuda você a te dar a segurança de conteúdo quando você estiver preguiçoso, ocupado ou sem inspiração. Escrever e publicar ao mesmo espaço de tempo conduzirá inevitavelmente a um errático hábito, por que seus leitores nunca sabem o que esperar de você. Escrever c0m andecêdencia o suficiente e poderá ganhar o dinheiro de ganhar um feriado blogger.

Dia 4. Desorganização da sua barra lateral(sidebar). A desorganização gosta da barra lateral da mesma forma que macacos gostam de árvores. Se você tem menos em sua barra lateral, Você pode concentrar maiores espaços para o que realmente importa (seus feeds, categorias e posts mais populares). Remova widgets desnecessários e coloque seu blogroll e arquivos de postagens em sua própria página dedicada. Também pode ser uma boa ideia remover anúncios de baixa performance.

Dia 5. Destaque seus posts mais populares. Colocar no seu blog de forma destacada os seus posts mais populares é uma ótima prática, por que isso da aos visitantes um novo lugar para ir. Eles não tem tempo para ficar procurando no seu blog um bom conteúdo: Eles querem ver o melhor que você tem a oferecer, imediatamente. Destacar estes links ajuda a manter os posts sempre vivos e os comentários sempre vindo, mesmo depois da postagens, meses depois

Dia 6. Comece fazendo amigos em serviços de redes sociais como o Digg ou StumbleUpon. Esses lugares são ótimos para você fazer o seu network, por que você vai estar mantendo um relacionamento com pessoas que tem potencial para estar enviando seus artigos para milhares de pessoas. Se você votar no seu conteúdo, talvez você estará colocando as pessoas para falar em favor do seu conteúdo no futuro.

Dia 7. Prova um post de sua autoria no mais popular blog do seu nicho. Posts de visitantes é um fantástico meio de trazer o seu perfil a tona e o tráfego de volta ao seu blog. Navegue no mais popular blog do seu nicho e pense em uma boa ideia para o próximo post (mas tenha certeza de que isso nunca foi postado anteriormente). Expresse sua ideia para o blog e comprometa-se em escrever um artigo completo caso for do interesse do mesmo. Se não, mesmo assim você consegue fazê-lo tentando em um outro blog, ou até mesmo no seu próprio blog.

Dia 8. Tenha uma lista de boas fontes. As listas são muito populares em serviços de mídia social e pode ser muito fácil de fazer, Principalmente se você já possui essa lista em mãos. Pegue um tópico do seu publico alvo é sutilmente interessante e crie um lista de tópicos relacionados com a mesma. Você pode usar a sua própria lista de favoritos se você tiver. Se sua lista estiver curta, use o del.icio.us e procure pelo seu tópico, você vai achar milhares de links úteis que as pessoas salvaram usando o tópico de sua escolha anexo a uma palavra chave.

Dia 9. Ofereça serviços gratuitos para os seus leitores (sem nenhuma expectativa de retorno). Se tratando de um redesing de um logo tipo, ideias, design review, votos de mídia social ou 15 minutos de consultoria grátis, dando algo de valor de graça sem expectativa de nada de volta vai deixar uma impressão duradoura nos seus leitores (e pode atrair alguns links também).

Dia 10. Prova seu link para um ou três blogs do seu nicho. Pegue o mais popular post do seu blog e repasse através de 3 grandes populares blogs do seu nicho. Se eles gostarem, Eles vão apontar um link para ele no próximo post.

Dia11. Adiciona links de midias sociais no rodapé dos seus posts e feeds. enquanto as pessoas votam no seu conteúdo através de barras de ferramentas, links em mídias sociais ou ícones relembra as pessoas a votarem a favor dos seus posts, se elas gostarem. É sempre mais que essencial adicionar esses botões em seus feeds, por que não há meio mais fácil para as pessoas votarem nos seus posts do que através dos leitores de feeds. Usando o FeedFlare você coloca um link ‘Adicione um comentário’ no rodapé dos seus feeds, é uma boa ideia. FeedFlares esta disponível Abaixo da tab ‘Publicize’ no painel de controle do seu Feedburner.

Dia 12. Participe dos comentários no seu blog. Os leitores sentiram que você esta interessando no que eles pensam a respeito do seu post, você pode aprender alguma coisa, e também incrementar o número de comentários no seus posts.

Dia 13. Trabalhe em um calendário editorial para o seu blog. É muito mais difícil escrever um post quando você sabe que o seu blog precisa de atualização. Trabalhando com um calendário editorial da ao seu blog um senso de ritmo. Isso pode te tornar mais produtivo impondo dead lines firmes para os próximos posts.

Dia 14. Seja mais rigoroso com a suas inscrições RSS. Eu acho que os blogueiros perdem muito mais tempo lendo blogs do que escrevendo. Escolhendo melhor a sua lista de blogs pode te ajudar a ganhar um tempo a mais. Se você se encontrar regularmente pulando posts de um determinado blog, ou se você não consegue pensar em nada que tenha aprendido neste blog, provavelmente seja melhor você remover este feed da sua lista.

Dia 15. Escreva um report ou um mini eBook. Poucas horas trabalho resultará em um relatório que você pode distribuir gratuitamente aos assinantes do feed, encorajando-os para compartilhar o mesmo, ou de qualquer forma trazer mais tráfego para o seu blog. Se for extremamente útil, o tráfego virá de forma viral.

Dia 16. Tente colocar novas fontes de renda em seu blog. Se eu não for muito claro, Programas de anúncios em blogs tendem ser incertos. Você pode estar muito feliz com o seu programa de anúncios atual, mas os serviços mudam(e como), E se mudar? E com essas mudanças vão junto o seus rendimentos? Se você monetiza o seu blog é uma boa ideia ter 2 bons programas de anúncios como opções, pois se algo da errado com um, você tem o seu backup(ou plano B…como preferir).

Dia 17. Pense em 20 ideias que você pode usar. Depois de saber o que você tem de escrever, começar se torna muito mais fácil. Tire um dia para fazer um brainstorm das 20 coisas que você quer ter em seu blog. Como alternativa, você pode simplesmente usar as vinte Ideias para seu post do Mark’s.

Dia 18. Agradeça seus leitores. tire um dia para dizer obrigado para seus leitores — mesmo que seja um curso espaço no final dos seu post. Claro!, se você quer inovar na hora de dizer obrigado aos seus leitores, é muito melhor para deixar uma boa impressão.

Dia 19. Atualize a versão do seu blog sempre!. Blogs desatualizados tendem a ter bugs e vulnerabilidades para ataques de hackers. Tenha certeza que na hora de atualizar a sua versão você tenha um backup da atual (e claro! saber o que você esta fazendo). Você precisa utilizar algum tempo para procurar mais detalhes sobre a transição de uma versão para outra.

Dia 20. Ótima força, passwords alfanuméricos para todas as contas. Se todas as senhas que você possui são iguais entre seus blogs, Palavras do dicionário ou letras somente, Seria muito fácil para um determinado hacker para quebrar uma de suas contas. Tire um dia para tornar as suas senhas mais fortes usando combinações de letras, números e pontuações ela precisa exceder 8 caracteres. Tenha certeza de estar guardando seus passwords em um local seguro (e as escreva com cuidado).

Dia 21. Sente e analise suas estatísticas do ultimo mês. As estatísticas dizem muito sobre o que você fez e o que você não fez. Analisar suas estatísticas durante um período pode relevar tendências, posts populares e qual das atividades promocionais que você se comprometeu a fazer eram dignas.

Dia 22. Peça a alguém para postar no seu blog. Se você é amigo de outro blog, convide-os para escrever no seu blog. Se o seu blog é mais popular que o deles você tem uma grande chance de ser aceito. O post de um visitante consegue inserir um pouco de frescor no seu blog, o mais importante, permite que você mantenha seu foco em outra matéria para o dia.

Dia 23. Pratique SEO no seu blog. SEO pode ser complicado, mas se você sabe um pouco sobre isso, tire um dia para revisar. Como alternativa, você pode aprender como otimizar o seu blog para os buscadores.

Dia 24. Compre uma campanha StumbleUpon de $5 dólares para o seu melhor post. $5 compra aproximadamente 300 visitantes. Se alguns destes visitantes resolver votar a favor do seus posts, o resultado pode ser uma gigantesca bola de nele cheia de visitantes muito mais que os seus 5 dólares pode pagar! Depois de começar você pode ler este post ProBlogger no Programa de anúncios StumbleUpon.

Dia 25. Crie uma logo personalizada para o seu blog, ou consiga alguém para fazer isso para você. O Blog branding é essencial. Se você usa um tema grátis sem nenhum distinção de branding, seu blog provavelmente vai parecer como outros milhares de blogs que usam o mesmo tema que você. Se você tem alguma habilidade em softwares de edição de imagens, crie uma logo customizada. Se você preferir a um passo a frente, você pode pagar um freelancer ou uma empresa para criar sua marca.

Dia 26. Entre para um fórum popular no seu nicho. Um link para o seu blog na sua assinatura do fórum pode trazer um pouco de tráfego e uma boa quantidade de comentários em outros blogs.

Dia 27. Use duas horas ou mais para cada post. Se você costuma utilizar várias horas em um único post você quer termina-lo agregando valor a ele. Investir um tempo extra em seus posts pode resultar em prêmios legais.

Dia 28. Esvazie sua caixa de entrada. Você precisa responder seus e-mails frequentemente, então por que não começar isso hoje? Uma caixa de entrada vazia para um blogger é sempre bem-vinda.

Dia 29. Comece a conversar com outro blogger do mesmo nicho. Diga Olá!, ofereça ajuda, comente nos posts que ele escreve — tanto faz faça isso, mande qualquer e-mail para outro blogger do seu nicho e não pergunte nada a ele. Se você conseguir uma conversa (ou uma conexão) isso pode criar oportunidades quando você faz um favor para um outro blogger e, depois, este favor pode ser devolvido.

Dia 30. Mantenha uma competição com um modesto prêmio. Quer seja um e-book, consultoria grátis, DVD ou um CD, um pequeno prêmio e uma pequena competição pode ajudar a impulsionar o leitor sem afetar suas finanças demasiadamente.

Day 31. Tire o dia de folga. Você mereceu isso! Sente um pouco e reflita sobre as três coisas que você fez para melhorar o seu blog. Você realmente deveria ter orgulho de si mesmo. ;)
Texto Original: 31 Days to becoming a better blogger.

Ufa! Realmente traduzir textos da trabalho :D
Tentei traduzir da melhor forma que eu pude, pode ser que tenha algumas coisas estranhas, mais foi de coração ;)

Espero que tenha contribuído!
[]’s
Igor.

O que é Robot Friendly?

Robot Friendly é um termo usado no exterior para afirmar quando um site é amigo dos buscadores, ou amigo do robô (spider).

Por que tornar o meu site Robot Friendly?

A primeira pergunta que devemos nos fazer é: por que alguns sites ficam sempre no topo dos resultados das buscas, independente se ele é patrocinado ou não?

Os robots possuem uma série de regras, que são colocadas em prática quando eles acessam algum site, para determinar a relevância do mesmo, para uma determinada palavra-chave.

Alguns destes sites precisam trabalhar muito para conseguir um lugar na primeira página, pois de palavra em palavra a concorrência varia e da mesma forma que você trabalha para sempre tornar o seu site relevante, a concorrência também não para.

Alguns sites possui muitos links, muitos mesmo, e alguns deles são favoritados pelos buscadores, ou seja, além de ser seu concorrente, o site ainda é favorito dos buscadores naquela palavra chave. Tem coisas que só o tempo pode dizer se o seu destino será o fracasso ou a vitória.

De todos os usuários na internet, a grande maioria deles não passam da segunda, terceira página de resultados em um buscador. Saibam que primeira página do google, é um reflexo do que a sociedade precisa e procura.

Se eu vou no buscador e procuro por “Windows“, ele não vai apresentar nos primeiros resultados uma fábrica americana enorme de janelas concorda? por mais que faça sentido é verdade… da mesma forma que se eu ir no buscador e procurar por “banco” ele também não vai trazer uma pagina inteira cheia de lojas que vendem bancos e cadeiras.

O fato da grande maioria dos usuários não passarem da primeira página, é o que mais encorajam as pessoas para sempre estar otimizando os seus sites, para estarem sempre nas buscas. Uma página a mais que se ganha pode gerar um lucro e um aumento de tráfego considerável para a sua empresa.

Como faço para tornar meu site amigo?

Em novembro de 2006 praticamente todos os maiores sistemas de busca concordaram em utilizar o padrão do sitemaps. No site do projeto, possuí todas as regras que os buscadores concordaram em seguir, para indexar suas páginas.

Se você tem problemas na hora de gerar o sitemaps, por não conseguir instalar o programa no servidor, fornecido pela google (em python) ou por não ter estrutura de servidor para ativar a ferramenta, na internet possui alguns sites ou softwares que são capazes de gerar gratuitamente para você, basta informa a URL ou pode também ser feito através da internet.

Recomendo o uso do programa GSiteCrawler para gerar este arquivo. Uma boa maneira de começar a “relacionamento” positivo com os buscadores é fornecendo este arquivo sitemap.xml através do Google Webmaster Tools, nesta ferramenta você indica a url do local onde esta o sitemap no seu domínio para que o google indexe as suas páginas de maneira mais prática e mais rápida.

O legal é que no sitemap você consegue fornecer a prioridade de cada arquivo e a frequência que o arquivo é atualizado para que o google sempre forneça um conteúdo atualizado no seu buscador.

Recentemente uma notícia bem legal foi dada pelos buscadores Google, Yahoo e Ask, indicando uma nova forma de indicar o local do arquivo sitemaps que seria indicando o seu endereço dentro do arquivo robots.txt.

Uma coisa que poucos sabem, é que o robots.txt é uma outra maneira de dar um passo a mais no relacionamento positivo com o seu buscador. Além do robots.txt servir para apontar as regras que o robot deverá seguir para indexar suas páginas, serve também para indicar para o buscador que o seu site esta online a ativo.

Imagine um grupo de 40 mil sites, 10% deles tem chances de estar offline, para verificar se um site esta online ou offline o retorno pode demorar de 15 a 30 segundos, multiplique isso pelos 10% destes 40 mil e você obterá o tempo perdido pelo spider para estes que estão offline, agora imagina o quão “P. da vida” o spider deve ficar com o seu endereço. ;)

Sendo assim, crie um arquivo robots.txt mesmo que seja em branco, você ganha pontos.

Agora segue algumas dicas que podem tornar o relacionamento do seu site com o seus buscadores mais saudável e positivo:

  • Faça com que todas as páginas do seu site sejam acessíveis a partir da página principal, não mais do que 3 cliques.
  • Crie o sitemap para o seu site indicando quais páginas você gostaria que o buscador indexe.
  • Considere ter no máximo 250-300 palavras em cada página do seu site, se você cria páginas muito longas, os spiders podem ignora-la. Geralmente os buscadores não indexam mais do que 100kb de textp mas páginas.
  • Evite colocar conteúdo em imagens ou em animações flash de forma não acessível, os buscadores não conseguem adivinhar o que tem nas imagens.
  • Tenha certeza de que seu site não tenha links quebrados ou erros comuns expostos.
  • Se possível não use crie navegações via script, os buscadores não conseguem ler tais scripts.
  • Se o seu site possui páginas dinâmicas, evite passar muitos parâmetros via query string, os buscadores não são espertos o suficiente para entender todos os parâmetros
  • Você pode usar o arquivo robots.txt para informar o spider como ele deve se portar no seu site.
  • Tenha certeza de que o seu site esta online o tempo todo.
  • Faça com seu site seja indicado em grandes sites do seu ramo de atuação ou relacionados ao conteúdo do seu site, isso fará com que seu site seja indexado rápidamente e com um nível alto de page-rank.
  • Dê uma atenção especial para as suas metas tags. Apesar delas estarem começando a ser extintas pelo uso de valor dos buscadores, a maioria delas tendem a desaparecer com o tempo, mas recomendo que não as ignore.

Estas são algumas das dicas para melhorar o relacionamento do seu site com os spiders. Temos que levar em consideração também que os buscadores não são preciptados, um grande número de sites são colocados no ar todos os dias e um fator crucial para saber se o site vai ou não para o topo é o “tempo de vida” de um portal. A idade do domínio influência muito na relevância e na força das palavras chaves que estão expostas no site.

Leitura complementar:
Meta Tags: Será que o titulo esta muito grande? ;)

Espero ter contribuído!
[]’s