sempre Realimentação positiva
O comércio pela internet vem se tornando cada vez mais comum na vida dos brasileiros, segundo a 21ª edição do Relatório WebShoppers da e-bit. Somente em 2009, as vendas pela web cresceram 30 por cento, estabelecendo faturamento de R$10,6 bilhões.
No ano passado, 17,6 milhões de consumidores fizeram compras pela internet, um crescimento de 33 por cento em relação a 2008.
O crescimento foi resultado do cumprimento dos prazos estabelecidos para entrega de grande parte dos produtos e por conta do aumento de confiança e satisfação dos consumidores em relação ao sistema e formas de pagamento.
As expectativas para esse ano são altas. De acordo com o relatório, a Copa do Mundo tem grandes chances de elevar o faturamento brasileiro ainda no primeiro semestre de 2010, por conta da venda de aparelhos de televisão. A previsão é de faturamento de R$13,6 bilhões e crescimento de 35 por cento dos consumidores em relação a 2009.
Fonte: http://olhardigital.uol.com.br/digital_news/noticia.php?id_conteudo=11057&/E_COMMERCE+CRESCE+30+NO+BRASIL
Decidi fazer esse pequeno guia para quem usa conexão ssh e enfrenta uns 10 segundos para poder digitar a senha de acesso ssh. O problema está relacionado com o DNS, onde o OpenSSH tenta negociar com o servidor. Resolvendo:
Edite o arquivo:
/etc/ssh/sshd_config
Caso o parametro
#UseDNS no
esteja comentado, retire o ‘#’. Caso não esteja, adicione no fim do arquivo, salve e reinicie o ssh.
sudo /etc/init.d/ssh restart
Pronto, lentidão resolvida.
Um dos grandes problemas com linguagem interpretada é na hora de vender a aplicação. Ou seja, além de vendê-la, você disponibiliza o código fonte.
Em alguns casos o código aberto não é uma solução muito estratégica.
Para isso existe uma alternativa em pecl: bcompiler.
Este possibilita, dentre várias alternativas, a pré-compilação e compilação do código PHP.
Instalando no Linux
Obs: Esta demonstração será na distro ubuntu 9.10 com php5 e bcompiler0.9.2.
Package necessários:
php5-dev libbz2-dev
Para instalar:
sudo apt-get install php5-dev libbz2-dev
Baixando o bcompiler
http://pecl.php.net/package/bcompiler/
Baixe a última versão
phpize ./configure make make test make install
Após esses passos, entre com o gedit ou outro editor e edite o php.ini:
sudo gedit /etc/php5/apache2/php.ini
Adicione no final do arquivo:
extension=bcompiler.so
E reinicie o Apache:
sudo /etc/init.d/apache2 restart
Crie o phpinfo:
Você poderá visualizar as informações da instalação do bcompiler.
<php phpinfo(); ?>
Um pequeno exemplo da utilização do bcompiler
Informações: www.php.net/bcompile
Crie um arquivo myclass.php:
<?php class MyClass { private $test = null; public function setVar($var){ $this->var = $var; } public function getVar(){ return $this->var; } }
Agora criaremos o arquivo compiler.php que transformará nosso arquivo myclass.php em bytecodes:
<?php $fh = fopen("myclass.phb", "w"); bcompiler_write_header($fh); bcompiler_write_file($fh, "myclass.php"); bcompiler_write_footer($fh); fclose($fh); ?>
Execute o compiler.php e o script criará um arquivo myclass.phb.
Pronto! Este arquivo já esta em bytecode.
Seu manuseio é semelhante a um arquivo php.
Exemplo: include “myclass.phb”;
Por hoje é so…
Bom, vai parecer um pouco, ou melhor, bastante duplicados, mas vou ensinar os passos para instalar o LAMP no ubuntu. Utilizarei a distro ubuntu 9.10. Instalando o Apache No terminal, execute:
sudo apt-get install apache2
Com isso você já terá o apache rodando. Teste: http://localhost/ Instalando o PHP
sudo apt-get install php5 libapache2-mod-php5
sudo /etc/init.d/apache2 restart
Instalando o MySQL
sudo apt-get install mysql-server
sudo apt-get install libapache2-mod-auth-mysql php5-mysql phpmyadmin
E por fim, o que não poderia faltar: habilitando o Mod_Rewrite do Apache
sudo a2enmod rewrite
sudo sed -i '//{N;N;s/none$/All/i}' /etc/apache2/sites-enabled/000-defaultsudo apache2ctl restart
Hoje tive um problema no qual nunca tinha passado: uma tela branca depois de mandar os arquivos para o servidor e acessar a url.
Nada de erro, nada de nada… Pronto, pânico!
Procurando um pouquinho na net, me deparei com um post do Tulio, que passou por este mesmo problema.
Foi resolvido mandando os arquivos para o servidor no modo Binário.
Aqui funcionou depois de trocar o modo de transferência.
Ps: Também tive que colocar 1 transferência simultânea.
Tenho visto várias pessoas com dúvidas em relaxão a utilização do componente Auth, por este motivo descidi escrever este pequeno tutorial.
Tudo começa com seu app_controller
app_controller.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | <?php class AppController extends Controller { public $components = array('Auth'); public function beforeFilter(){ /** * Configuração das para que o Auth identifique os * campos de acesso no sistema */ $this->Auth->fields = array( 'username' => 'email', 'password' => 'password' ); /** * Caso acesso a area restrita e não logado é * redirecionado para efetuar login */ $this->Auth->loginAction = array( 'controller' => 'users', 'action' => 'login', Configure::read('Routing.admin') => true ); /** * Redirecionamento após login */ $this->Auth->loginRedirect = array( 'controller' => 'users', 'action' => 'index', Configure::read('Routing.admin') => true ); /** * Redirecionado quando o usuário requesita logout */ $this->Auth->logoutRedirect = array( 'controller' => 'users', 'action' => 'login', Configure::read('Routing.admin') => true ); /** * Somente user ativo e administradores */ $this->Auth->userScope = array('User.status' => 1); // Autenticação somente para admin if (!isset($this->params['prefix'][Configure::read('Routing.admin')])) { $this->Auth->allowedActions = array('*'); }else{ $this->Auth->allowedActions = array( 'admin_recover_password', // Caixa para colocar e-mail e recuperar senha 'admin_edit_password' // link que é enviado por email para cadastrar nova senha ); } $this->Auth->loginError = 'Erro na autenticação'; $this->Auth->authError = 'É necessário a autenticação no sistema'; $this->Auth->authorize = 'controller'; } /** * Verifica se usuário esta logado * * @return boolean */ public function isAuthorized(){ return true; } } |
em meu controller
users_controller.php
1 2 3 4 5 | <?php class UsersController extends AppController { public function login(){} } ... |
Feito estes ajustes é so criar as view e pronto o component Auth fará o resto.
ps: Ao adicionar um usuário o Auth se encaregará de fazer o hash da senhas.
até a proxima.
Uma exelente receita de bolo para paginação entre dados que estão relacionados em HABTM
http://cakebaker.42dh.com/2007/10/17/pagination-of-data-from-a-habtm-relationship/
Esses dias estava refletindo o quanto fico fácil programar para internet, claro com ajuda dos diversos frameworks.
Uma ferramenta indispensável para mim é o Framework de desenvolvimento a-lá JavaScript jQuery, esta excelente caixa de ferramentas ajuda muito com o desenvolvimento de efeitos e melhorias na acessibilidade de um site. Pensando nisso separei alguns plugins os quais eu mais uso.
Validation
link: http://docs.jquery.com/Plugins/Validation
função: Validação de campos de formulários
exemplo:
<input type="text" name="name" class="required" />
1 2 3 | $(document).ready(function(){ $("#form").validate(); }); |
Masked Input
link: http://www.tidbits.com.br/plugin-de-mascara-para-jquery-masked-input
função: Mascara em objetos de formulários
exemplo:
1 2 3 4 5 6 | $(document).ready(function(){ $("#telefone").mask("9999-9999"); $("#cpf").mask("999.999.999-99"); $("#cep").mask("99999-999"); $("#data").mask("99/99/9999"); }); |
Uploadify
link: http://www.uploadify.com/demo/
função: Alternativa muito boa para o swfupload totalmente em JQuery e aberto para modificação no flash.
exemplo:
1 2 3 4 5 6 7 8 | $(document).ready(function() { $("#fileInput1").uploadify({ 'uploader' : '/_scripts/uploadify.swf', 'script' : '/_scripts/uploadify.php', 'cancelImg' : '/_images/cancel.png', 'folder' : '/_uploads', 'multi' : false }); |
Datepicker
link: http://jqueryui.com/demos/datepicker/
função: Calendaria e mais calendario.
exemplo:
1 2 3 | $(function() { $("#datepicker").datepicker(); }); |
jwysiwyg
link: http://code.google.com/p/jwysiwyg/
função: Este editor wysiwyg é excelente apesar de não ser o mais famoso é bem usado no meio JQuery.
exemplo:
1 2 3 | $(function(){ $('#wysiwyg').wysiwyg(); }); |
Uma coisa muito chata é quando você da commit no Tortoise e ele também adiciona na lista os arquivos tmp do CakePHP.
Solução:
Entre em propriedades do Tortoise na pasta tmp
Entre no opção New…
Selecione a opção svn:ignore no campo Property name
No campo Property value adicione o *
Selecione a opção Apply property recursively e click em ok
Pronto quando você der commit as próximas vezes ele ignorará a pasta tmp e seu conteúdo.
ufa
Plugin PagSeguro
Finalmente consegui achar tempo para fazer este plugin. A idéia dele é bem simples. Você tem à disposição um component e um helper. Você manda um array com todas as informações da compra para o component e ele reorganiza tais informações, passando para o padrão do PagSeguro. Após isso, é só mandar para view e chamar o helper para criar o form e os hiddens padrões.
Segue um exemplo:
Utilizando o pligin
Em seu controller, chame o component e o helper:
var $components = array('Pagseguro.PagSeguro?'); var $helpers = array('Pagseguro.Formpg');
Array padrão referente às informações necessárias e opcionais para o PagSeguro:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | $sale = array( 'email_cobranca' => null, 'tipo' => 'CP', 'moeda' => 'BRL', 'tipo_frete' => 'SD', //opcional 'ref_transacao' => null, //opcional 'produto' => array( 1. => array( 'item_id' => null, 'item_descr' => null, 'item_valor' => null, 'item_quant' => null, 'item_frete' => null, //opcional 'item_peso' => null, //opcional 'item_quant' => null ) ), 'cliente' => array( //opcional 'nome' => null, //opcional 'cep' => null, //opcional 'end' => null, //opcional 'num' => null, //opcional 'compl' => null, //opcional 'bairro' => null, //opcional 'cidade' => null, //opcional 'uf' => null, //opcional 'pais' => null, //opcional 'ddd' => null, //opcional 'tel' => null, //opcional 'email' => null //opcional ) ); |
Arrumando valores referentes à dinheiro, se seu sistema jogar o valor com vírgula ou ponto. Exemplo: 30,99 ou 30.99.
$valor = $this->PagSeguro->parcePagSeguro('30.98'); //retorno 3098;
Setando os dados:
$this->PagSeguro->setSale($sale);
Arrumando no padrão e mandando para a view:
$this->set('data', $this->PagSeguro->generateInformation());
Na view:
echo $formpg->create(); echo $formpg->hidden($data); echo $formpg->submit(array('img' => 'btnFinalizar.jpg')); //opções: btnFinalizaBR.jpg btnConcluirBR.jpg btnFinalizar.jpg btnConcluir.jpg echo $formpg->end();
Download
Repositório em desenvolvimeto
svn checkout http://pagseguro.googlecode.com/svn/trunk/
Última versão estável
svn checkout http://pagseguro.googlecode.com/svn/tags/0.1.0
Site do oficial das ferramentas PagSeguro
http://visie.com.br/pagseguro/cake.php
Bugs, sugestões, duvídas ou elogios:
http://code.google.com/p/pagseguro/
Residente em São Paulo/SP Brasil, Cursando Engenharia da Computação Na Universidade São Judas Tadeu desenvolvedor de PHP a 5 anos e grande utilizador de CakePHP.