da argila ao forte - como desenvolver uma loja virtual

52
Da argila ao forte: como desenvolver uma loja virtual

Upload: michael-castillo-granados

Post on 13-Dec-2014

3.913 views

Category:

Technology


3 download

DESCRIPTION

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.

TRANSCRIPT

Page 1: Da Argila Ao Forte - Como desenvolver uma loja virtual

Da argila ao forte: como desenvolver uma loja virtual

Page 2: Da Argila Ao Forte - Como desenvolver uma loja virtual
Page 3: Da Argila Ao Forte - Como desenvolver uma loja virtual

O ambiente

• Sistema Operacional (Windows, Linux, Mac)

• Linguagem (PHP, óbvio)

• Banco de dados (mysql, postgree, sqlite)

• Controle de versão (SVN, GIT, Mercurial)

Page 4: Da Argila Ao Forte - Como desenvolver uma loja virtual

Controle de Versão

RepositórioFTP

Programador SkyWalker Programador Darth Vader

Page 5: Da Argila Ao Forte - Como desenvolver uma loja virtual

Controle de Versão

RepositórioFTP

Programador SkyWalker Programador Darth Vader

Upload

Page 6: Da Argila Ao Forte - Como desenvolver uma loja virtual

Controle de Versão

RepositórioFTP

Programador SkyWalker Programador Darth Vader

Arruma o bug online

Page 7: Da Argila Ao Forte - Como desenvolver uma loja virtual

Controle de Versão

RepositórioFTP

Programador SkyWalker Programador Darth Vader

Upload

Page 8: Da Argila Ao Forte - Como desenvolver uma loja virtual

Controle de Versão

RepositórioSVN

Programador SkyWalker Programador Darth Vader

Page 9: Da Argila Ao Forte - Como desenvolver uma loja virtual

Controle de Versão

RepositórioSVN

Programador SkyWalker Programador Darth Vader

Commit

Page 10: Da Argila Ao Forte - Como desenvolver uma loja virtual

Controle de Versão

RepositórioSVN

Programador SkyWalker Programador Darth Vader

Commit

Page 11: Da Argila Ao Forte - Como desenvolver uma loja virtual

Controle de Versão

RepositórioSVN

Programador SkyWalker Programador Darth Vader

Commit

Page 12: Da Argila Ao Forte - Como desenvolver uma loja virtual

Controle de Versão

RepositórioSVN

Programador SkyWalker Programador Darth Vader

Update

Page 13: Da Argila Ao Forte - Como desenvolver uma loja virtual

Controle de Versão

RepositórioSVN

Programador SkyWalker Programador Darth Vader

Commit

Page 14: Da Argila Ao Forte - Como desenvolver uma loja virtual

Controle de Versão

RepositórioSVN

Servidor online

Update

Commits

Page 15: Da Argila Ao Forte - Como desenvolver uma loja virtual

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’);

Page 16: Da Argila Ao Forte - Como desenvolver uma loja virtual

O MVC

• Model (manipula o banco de dados)

• View (as telas em si)

• Controller (quem faz a coisa funcionar)

Page 17: Da Argila Ao Forte - Como desenvolver uma loja virtual

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

Page 18: Da Argila Ao Forte - Como desenvolver uma loja virtual

Model

• PDO, claro!

Page 19: Da Argila Ao Forte - Como desenvolver uma loja virtual

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;

}

Page 20: Da Argila Ao Forte - Como desenvolver uma loja virtual

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',

);

Page 21: Da Argila Ao Forte - Como desenvolver uma loja virtual

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();

}

}

}

Page 22: Da Argila Ao Forte - Como desenvolver uma loja virtual

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();

}

}

}

Page 23: Da Argila Ao Forte - Como desenvolver uma loja virtual

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();

}

}

}

Page 24: Da Argila Ao Forte - Como desenvolver uma loja virtual

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();

}

}

}

Page 25: Da Argila Ao Forte - Como desenvolver uma loja virtual

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();

}

}

}

Page 26: Da Argila Ao Forte - Como desenvolver uma loja virtual

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();

}

}

}

Page 27: Da Argila Ao Forte - Como desenvolver uma loja virtual

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();

}

}

}

Page 28: Da Argila Ao Forte - Como desenvolver uma loja virtual

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();

}

}

}

Page 29: Da Argila Ao Forte - Como desenvolver uma loja virtual

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();

}

}

}

Page 30: Da Argila Ao Forte - Como desenvolver uma loja virtual

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();

}

}

}

Page 31: Da Argila Ao Forte - Como desenvolver uma loja virtual

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();

}

}

}

Page 32: Da Argila Ao Forte - Como desenvolver uma loja virtual

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();

Page 33: Da Argila Ao Forte - Como desenvolver uma loja virtual

O resultado

class Inicio {

function get($attr1, $attr2, $attr3){

// seu controller}

function post() { // opcional

}}

Page 34: Da Argila Ao Forte - Como desenvolver uma loja virtual

O resultado

class Inicio {

function get($attr1, $attr2, $attr3){

// seu controller}

function post() { // opcional

}}

Page 35: Da Argila Ao Forte - Como desenvolver uma loja virtual

O resultado

class Inicio {

function get($attr1, $attr2, $attr3){

// seu controller}

function post() { // opcional

}}

Page 36: Da Argila Ao Forte - Como desenvolver uma loja virtual

O resultado

class Inicio {

function get($attr1, $attr2, $attr3){

// seu controller}

function post() { // opcional

}}

Page 37: Da Argila Ao Forte - Como desenvolver uma loja virtual

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');

}}

Page 38: Da Argila Ao Forte - Como desenvolver uma loja virtual

A home

class Inicio extends Template{

protected $_title = 'Bem vindo';function get(){

$con =& get_con();$produtos = $con->prodRand();include('template/inicio.php');

}}

Page 39: Da Argila Ao Forte - Como desenvolver uma loja virtual

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'));

}}

Page 40: Da Argila Ao Forte - Como desenvolver uma loja virtual

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!!!

Page 41: Da Argila Ao Forte - Como desenvolver uma loja virtual

Formas de pagamento

• Boleto bancário

• Cartão de crédito

• Cartões de débito

• Transação entre contas

• ... ou usar o PagSeguro

Page 42: Da Argila Ao Forte - Como desenvolver uma loja virtual
Page 43: Da Argila Ao Forte - Como desenvolver uma loja virtual
Page 44: Da Argila Ao Forte - Como desenvolver uma loja virtual
Page 45: Da Argila Ao Forte - Como desenvolver uma loja virtual

POST

Page 46: Da Argila Ao Forte - Como desenvolver uma loja virtual

Usuário - POST

Page 47: Da Argila Ao Forte - Como desenvolver uma loja virtual

Usuário - POST

Usuário - GET

Page 48: Da Argila Ao Forte - Como desenvolver uma loja virtual

Usuário - POST

Usuário - GET

Robô POST

Page 49: Da Argila Ao Forte - Como desenvolver uma loja virtual

Usuário - POST

Usuário - GET

Robô POST

Bad GuyPOST?

Page 50: Da Argila Ao Forte - Como desenvolver uma loja virtual

Usuário - POST

Usuário - GET

Robô POST

POST – TOKEN

VERIFICADO/FALSO

Bad GuyPOST?

Page 51: Da Argila Ao Forte - Como desenvolver uma loja virtual

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)

Page 52: Da Argila Ao Forte - Como desenvolver uma loja virtual

Perguntas?!

http://meadiciona.com/dgmike