Da Argila Ao Forte - Como desenvolver uma loja virtual

4,360 views

Published on

No 2º PHP-MG fiz uma palestra sobre como desenvolver um ecommerce em menos de 2 horas. Para isso foi desenvolvido um microframework em PHP que com auxilio de PDO e MVC resolve os problemas mais comuns de desenvolvimento. Para a implementação do checkout foi usado o gateway de pagamento PagSeguro. Também detalho sobre SVN e porque usá-lo.

Published in: Technology, Business
1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total views
4,360
On SlideShare
0
From Embeds
0
Number of Embeds
1,838
Actions
Shares
0
Downloads
66
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Da Argila Ao Forte - Como desenvolver uma loja virtual

  1. 1. Da argila ao forte: como desenvolver uma loja virtual
  2. 2. O ambiente • Sistema Operacional (Windows, Linux, Mac) • Linguagem (PHP, óbvio) • Banco de dados (mysql, postgree, sqlite) • Controle de versão (SVN, GIT, Mercurial)
  3. 3. Controle de Versão Repositório FTP Programador SkyWalker Programador Darth Vader
  4. 4. Controle de Versão Repositório FTP Programador SkyWalker Programador Darth Vader Upload
  5. 5. Controle de Versão Arruma o bug online Repositório FTP Programador SkyWalker Programador Darth Vader
  6. 6. Controle de Versão Repositório FTP Programador SkyWalker Programador Darth Vader Upload
  7. 7. Controle de Versão Repositório SVN Programador SkyWalker Programador Darth Vader
  8. 8. Controle de Versão Repositório SVN Programador SkyWalker Programador Darth Vader Commit
  9. 9. Controle de Versão Repositório SVN Programador SkyWalker Programador Darth Vader Commit
  10. 10. Controle de Versão Repositório SVN Programador SkyWalker Programador Darth Vader Commit
  11. 11. Controle de Versão Update Repositório SVN Programador SkyWalker Programador Darth Vader
  12. 12. Controle de Versão Repositório SVN Programador SkyWalker Programador Darth Vader Commit
  13. 13. Controle de Versão Update Repositório Servidor online SVN Commits
  14. 14. Ferramenta de Banco: PDO • Consistente • Um comando, vários bancos • Fácil de usar new PDO(‘mysql:dbname=banco;host=localhost’, ‘usuario’, ‘senha’); new PDO(‘sqlite:/opt/database/mydb.sq3’);
  15. 15. O MVC • Model (manipula o banco de dados) • View (as telas em si) • Controller (quem faz a coisa funcionar)
  16. 16. Um microframework • Manipula Banco de dados • Métodos mágicos definidos por você • Reaproveitamento de código • URLs amigáveis • Segurança • Fácil de entender • Simples de dar manutenção
  17. 17. Model • PDO, claro!
  18. 18. Métodos auxiliares (helpers) • Funções que serão chamadas quando necessário function error(){ die('Page not found.'); } function url($url){ return 'http://localhost/index.php/'.$url; }
  19. 19. Mapeamento de URLs $urls = array( '/?' => 'Inicio', '/categoria/(d+)/?' => 'Categoria', '/produto/(d+)/?' => 'Produto', '/adiciona/(d+)/?' => 'Adiciona', '/adiciona/(d+)(/ajax)/?' => 'Adiciona', '/remove/(d+)/?' => 'Remove', '/carrinho/?' => 'Carrinho', '/comprar/?' => 'Comprar', '/obrigado/?' => 'Retorno', );
  20. 20. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  21. 21. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  22. 22. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  23. 23. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  24. 24. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  25. 25. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  26. 26. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  27. 27. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  28. 28. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  29. 29. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  30. 30. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } }
  31. 31. Fazendo a mágica $url = $_SERVER['PATH_INFO']; foreach ($urls as $key => $value) { $find = '@^'.$key.'$@'; if (preg_match($find, $url, $attrs)) { array_shift($attrs); if (class_exists($value)) { $value = new $value; $method = $_POST ? 'post' : 'get‘; call_user_method_array($method, $value, $attrs); die(); } } } erro();
  32. 32. O resultado class Inicio { function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional } }
  33. 33. O resultado class Inicio { function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional } }
  34. 34. O resultado class Inicio { function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional } }
  35. 35. O resultado class Inicio { function get($attr1, $attr2, $attr3) { // seu controller } function post() { // opcional } }
  36. 36. Template class Template { public $categorias = false; function __construct() { $con =& get_con(); $this->categorias = $con->categorias(); include('template/topo.php'); // View } function __destruct() { include('template/bottom.php'); } }
  37. 37. A home class Inicio extends Template { protected $_title = 'Bem vindo'; function get() { $con =& get_con(); $produtos = $con->prodRand(); include('template/inicio.php'); } }
  38. 38. Adicionando um produto class Adiciona { public function get($id, $ajax = false) { $con =& get_con(); if (!$con->produto($id)) { error(); } if (isset($_SESSION['carrinho'][$id])) { $_SESSION['carrinho'][$id]++; } else { $_SESSION['carrinho'][$id] = 1; } header('Location: '.url('carrinho')); } }
  39. 39. E-commerce pronto?! • Para que o e-commerce esteja pronto de fato, falta apenas um detalhe: o comprador deve comprar Vamos por a mão na massa!!!
  40. 40. Formas de pagamento • Boleto bancário • Cartão de crédito • Cartões de débito • Transação entre contas • ... ou usar o PagSeguro
  41. 41. POST
  42. 42. Usuário - POST
  43. 43. Usuário - POST Usuário - GET
  44. 44. Usuário - POST Usuário - GET Robô POST
  45. 45. Usuário - POST Usuário - GET Bad Guy POST? Robô POST
  46. 46. Usuário - POST Usuário - GET POST – TOKEN Bad Guy POST? Robô POST VERIFICADO/FALSO
  47. 47. Referências • http://php.net/ • http://br.php.net/pdo • http://subversion.tigris.org/ • http://trac.edgewall.org/ • http://visie.com.br/pagseguro • http://www.generatedata.com/ • http://tinyurl.com/mkmu58 (W3C: HTML5)
  48. 48. Perguntas?! http://meadiciona.com/dgmike

×