HUFERSIL.WEBDEVELOPER

Criando um catálogo de produtos com Lumine e CodeIgniter.

Criando um catálogo de produtos com Lumine e CodeIgniter.

Como tive vários pedidos para mostrar melhor uma forma de integrar o Lumine com CodeIgniter, resolvi fazer um exemplo um pouco mais complexo, que estaremos montando ao longo de alguns tutoriais.
Neste primeiro artigo, iremos:
Baixar os pacotes necessários e configurando a pasta corretamente;
Criar o banco de dados;
Efetuar a engenharia reversa;
Testar se tudo está correto.

Baixar os pacotes necessários e configurando a pasta corretamente

A pasta raiz durante esta série de tutoriais será a "C:\www\vitrine", sendo "C:\www" o document-root do servidor web.
Sendo assim, a nossa URL padrão será: http://localhost/vitrine/

Para este exemplo, vamos utilizar o Lumine versão 1.6 e CodeIgniter 2.1.0.

Baixe primeiramente o CodeIgniter e descompacte dentro da pasta raiz. Sua estrutura de pastas e arquivos deverá ser:

C:\www\vitrine\application
C:\www\vitrine\system
C:\www\vitrine\user_guide
C:\www\vitrine\index.php
C:\www\vitrine\license.txt

Se quiser, você poderá apagar a pasta "user_guide". Não usaremos ela durante o desenvolvimento.
Feita esta estrutura, baixe o Lumine, versão 1.6

 

Descompacte os arquivos de Lumine dentro do diretório "C:\www\vitrine\application\libraries\lumine".

A estrutura final deverá ficar semelhante a 

C:\www\vitrine\application\libraries\lumine\lib\
C:\www\vitrine\application\libraries\lumine\changelog.txt
C:\www\vitrine\application\libraries\lumine\Lumine.php

Pronto. Agora vamos criar o nosso banco de dados.

Criar o banco de dados.

Crie um banco de dados chamado "vitrine".

Importe a estrutura abaixo para criar as tabelas necessarias.

Este "dump" já vem com um usuário padrao (e-mail: hufersil@gmail.com, senha: "123456").

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `categoria`
--

DROP TABLE IF EXISTS `categoria`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `categoria` (
  `codcategoria` int(11) NOT NULL AUTO_INCREMENT,
  `codpai` int(11) DEFAULT NULL,
  `nome` varchar(100) DEFAULT NULL,
  `permalink` varchar(100) DEFAULT NULL,
  `ordem` int(11) DEFAULT NULL,
  PRIMARY KEY (`codcategoria`),
  KEY `codpai` (`codpai`),
  CONSTRAINT `categoria_ibfk_1` FOREIGN KEY (`codpai`) REFERENCES `categoria` (`codcategoria`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `categoria`
--

LOCK TABLES `categoria` WRITE;
/*!40000 ALTER TABLE `categoria` DISABLE KEYS */;
/*!40000 ALTER TABLE `categoria` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `foto`
--

DROP TABLE IF EXISTS `foto`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `foto` (
  `codfoto` int(11) NOT NULL AUTO_INCREMENT,
  `codproduto` int(11) NOT NULL,
  `thumb` varchar(100) NOT NULL,
  `grande` varchar(100) NOT NULL,
  `ordem` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`codfoto`),
  KEY `codproduto` (`codproduto`),
  CONSTRAINT `foto_ibfk_1` FOREIGN KEY (`codproduto`) REFERENCES `produto` (`codproduto`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `foto`
--

LOCK TABLES `foto` WRITE;
/*!40000 ALTER TABLE `foto` DISABLE KEYS */;
/*!40000 ALTER TABLE `foto` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `produto`
--

DROP TABLE IF EXISTS `produto`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `produto` (
  `codproduto` int(11) NOT NULL AUTO_INCREMENT,
  `codcategoria` int(11) NOT NULL,
  `nome` varchar(200) DEFAULT NULL,
  `permalink` varchar(200) DEFAULT NULL,
  `descricao` text,
  `valor` float DEFAULT NULL,
  `observacoes_tecnicas` text,
  `data_cadastro` datetime DEFAULT NULL,
  PRIMARY KEY (`codproduto`),
  KEY `codcategoria` (`codcategoria`),
  CONSTRAINT `produto_ibfk_1` FOREIGN KEY (`codcategoria`) REFERENCES `categoria` (`codcategoria`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `produto`
--

LOCK TABLES `produto` WRITE;
/*!40000 ALTER TABLE `produto` DISABLE KEYS */;
/*!40000 ALTER TABLE `produto` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `usuario`
--

DROP TABLE IF EXISTS `usuario`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `usuario` (
  `codusuario` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(150) NOT NULL,
  `email` varchar(150) NOT NULL,
  `senha` varchar(32) NOT NULL,
  PRIMARY KEY (`codusuario`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `usuario`
--

LOCK TABLES `usuario` WRITE;
/*!40000 ALTER TABLE `usuario` DISABLE KEYS */;
INSERT INTO `usuario` VALUES (1,'Hugo Silva','hufersil@gmail.com','e10adc3949ba59abbe56e057f20f883e');
/*!40000 ALTER TABLE `usuario` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

Efetuando a engenharia reversa

 

Com a estrutura do banco de dados criada, fica fácil gerar as classes de acesso.
Para isso, basta efetuar a engenharia reversa que Lumine (http://www.hufersil.com.br/lumine/engenharia_reversa) já oferece.
Acesse pelo browser: http://localhost/vitrine/application/libraries/lumine/lib/ui/reverse.php

Nota: caso apareça a mensagem "Forbidden", é porque existe um arquivo chamado ".htaccess" dentro do diretório "application". 
Renomeie este arquivo para poder acessar os arquivos dentro da pasta "application" durante o processo de desenvolvimento.
Quando terminar e for colocar em produção, restaure este arquivo.

Deverá ser exibida a seguinte tela:

Preencha as abas como mostrado abaixo:

 

Na aba "Tabelas", clique em "Atualizar Tabelas".

Deverão ser exibidas as tabelas em seu banco de dados "vitrine", como na tela abaixo:

 

 

Selecione todas elas e clique no botão "Gerar Classes". Você será direcionado para a aba "Log de geração" onde poderá acompanhar o que Lumine está fazendo.

Caso corra tudo sem problemas, a mensagem final deverá ser "Engenharia reversa terminada!".

 

Nota: o servidor web deverá ter permissão de escrita nas pastas:
C:\www\vitrine\application
C:\www\vitrine\application\libraries
C:\www\vitrine\application\models

Os seguintes arquivos deverão ter sido criados:
 
C:\www\vitrine\application\lumine-conf.php
C:\www\vitrine\application\libraries\Lumine_ApplicationContext.php
C:\www\vitrine\application\models\Categoria.php
C:\www\vitrine\application\models\Foto.php
C:\www\vitrine\application\models\Produto.php
C:\www\vitrine\application\models\Usuario.php
Confira se estes arquivos foram criados corretamente.
 
Abra o arquivo "Lumine_ApplicationContext.php" e troque a linha

 

require_once 'lumine/Lumine.php';

por

require_once APPPATH . '/libraries/lumine/Lumine.php';

e a linha

include 'lumine-conf.php';

por

include APPPATH . '/lumine-conf.php';

Pronto! Agora podemos testar nossa aplicação.

Testar se tudo está correto

Abra a controller padrão que vem com a instalação do CodeIgniter.
Ela deverá estar em "application/controllers/welcome.php".

Apague o método "index" que ela possui e coloque este:

public function index(){
	// trocando o timezone para nao ficar aparecendo varios warnings
	// isto depende da configuracao do servidor, e nao do Lumine ou CodeIgniter
	date_default_timezone_set('America/Sao_Paulo');
	// importando a inicializacao de Lumine
	$this->load->library('Lumine_ApplicationContext');
	// ligando o log
	Lumine_Log::setLevel(3);
	// listando os usuarios
	$userList = new Usuario();
	$userList->find();

	while($userList->fetch()){
		echo 'Nome do usuario: ', $userList->nome, '';
		echo 'E-mail: ', $userList->email, '';
	}
}

 

Se aparecer um log e as informações:
Nome do usuario: Hugo Silva
E-mail: hufersil@gmail.com

Significa que está tudo certo!

Na próxima matéria vamos aprender a:

configurar a base do CodeIgniter
criar uma controller base
criar uma controller base de administração
criando a tela de login

@braços e fiquem com Deus!

 

9 Responses to “Criando um catálogo de produtos com Lumine e CodeIgniter.”

  • Tiago diz:

    Olá amigo, estou seguindo seu tutorial.
    Mas ao tentar a etapa que verifica se tudo está correto, gerando o método ‘index’ que está no exemplo, me acorreu este erro:
    “08/03/2012 23:41:01 – ALERTA: Opcao inexistente: auto_cast_dto (D:\wampserver2\www\balancasriograndense\application\libraries\lumine\lib\Configuration.php, 196)”

  • Roberto diz:

    Amigo, fiz tudo certinho, porem quando fui trocar o metodo index. apareu o seguinte erro.

    Parse error: syntax error, unexpected $end, expecting T_FUNCTION in /home/desmix/public_html/vitrine/application/controllers/welcome.php on line 39

    o que pode ser ?

    • Hugo Silva diz:

      Provavelmente você deve ter esquecido algum ponto-e-vírgula, chaves ou parenteses.

      Dê uma olhada com calma em seu código porque fiz como está e funcionou sem problemas.

      • Roberto diz:

        revirei o copdigo e nao funcionou .
        por favor alguem me ajude pois estou meio atrapalhado nisso agora.
        achei até os exemplos ja criados para baixar, mas tamebm nao funcionaram.
        alguem me de uma luz por favor

        • Gustavo diz:

          Roberto, vc deve ter esquecido de fechar com um } a classe Welcome ao copiar o método daqui do site. Dá um confere como ficou a minha classe:

          <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

          class Welcome extends CI_Controller {

          /**
          * Index Page for this controller.
          *
          * Maps to the following URL
          * http://example.com/index.php/welcome
          * - or –
          * http://example.com/index.php/welcome/index
          * - or -
          * Since this controller is set as the default controller in
          * config/routes.php, it's displayed at http://example.com/
          *
          * So any other public methods not prefixed with an underscore will
          * map to /index.php/welcome/
          * @see http://codeigniter.com/user_guide/general/urls.html
          *
          public function index()
          {
          $this->load->view(‘welcome_message’);
          }
          }
          */

          public function index(){
          // trocando o timezone para nao ficar aparecendo varios warnings
          // isto depende da configuracao do servidor, e nao do Lumine ou CodeIgniter
          date_default_timezone_set(‘America/Sao_Paulo’);
          // importando a inicializacao de Lumine
          $this->load->library(‘Lumine_ApplicationContext’);
          // ligando o log
          Lumine_Log::setLevel(3);
          // listando os usuarios
          $userList = new Usuario();
          $userList->find();

          while($userList->fetch()){
          echo ‘Nome do usuario: ‘, $userList->nome, ”;
          echo ‘E-mail: ‘, $userList->email, ”;
          }
          }

          }

          /* End of file welcome.php */
          /* Location: ./application/controllers/welcome.php */

  • Ola eu fiz tudo conferme vc ensinou mas o arquivo Lumine_ApplicationContext.php não esta sendo criado sabe me informar o porq que ele não pe criado ?

  • Alessandro diz:

    Esta dando erro. Ja coloquei no php.ini : date.timezone = “America/Sao_Paulo”
    E mesmo assim continua os erros, alguem poderia me ajudar?

    “01/02/2013 19:36:58 – ALERTA: Conexao inexistente: models (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/ConnectionManager.php, 103)
    01/02/2013 19:36:58 – LOG: Armazenando conexao: models (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/ConnectionManager.php, 61)
    01/02/2013 19:36:58 – ALERTA: Opcao inexistente: charset (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Configuration.php, 196)
    01/02/2013 19:36:58 – LOG: Iniciando engenharia reversa (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 115)
    01/02/2013 19:36:58 – LOG: Criando conexao com desenv_vitrine (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Connection/MySQL.php, 60)
    01/02/2013 19:36:58 – LOG: Analisando tabela categoria (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 159)
    01/02/2013 19:36:58 – LOG: Formatando o nome da classe de categoria (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 180)
    01/02/2013 19:36:58 – LOG: Utilizando conexao cacheada com desenv_vitrine (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Connection/MySQL.php, 37)
    01/02/2013 19:36:58 – LOG: Criando entidade reversa de categoria (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 187)
    01/02/2013 19:36:58 – LOG: Recuperando chaves estrangeiras de categoria (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 193)
    01/02/2013 19:36:58 – LOG: Utilizando conexao cacheada com desenv_vitrine (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Connection/MySQL.php, 37)
    01/02/2013 19:36:58 – LOG: Utilizando conexao cacheada com desenv_vitrine (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Connection/MySQL.php, 37)
    01/02/2013 19:36:58 – LOG: Recuperando os campos de categoria (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 196)
    01/02/2013 19:36:58 – ALERTA: Opcao inexistente: dto_package_mapping (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Configuration.php, 196)
    01/02/2013 19:36:58 – ALERTA: Opcao inexistente: create_models (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Configuration.php, 196)
    01/02/2013 19:36:58 – LOG: Analisando tabela foto (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 159)
    01/02/2013 19:36:58 – LOG: Formatando o nome da classe de foto (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 180)
    01/02/2013 19:36:58 – LOG: Utilizando conexao cacheada com desenv_vitrine (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Connection/MySQL.php, 37)
    01/02/2013 19:36:58 – LOG: Criando entidade reversa de foto (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 187)
    01/02/2013 19:36:58 – LOG: Recuperando chaves estrangeiras de foto (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 193)
    01/02/2013 19:36:58 – LOG: Utilizando conexao cacheada com desenv_vitrine (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Connection/MySQL.php, 37)
    01/02/2013 19:36:58 – LOG: Utilizando conexao cacheada com desenv_vitrine (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Connection/MySQL.php, 37)
    01/02/2013 19:36:58 – LOG: Recuperando os campos de foto (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 196)
    01/02/2013 19:36:58 – LOG: Analisando tabela produto (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 159)
    01/02/2013 19:36:58 – LOG: Formatando o nome da classe de produto (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 180)
    01/02/2013 19:36:58 – LOG: Utilizando conexao cacheada com desenv_vitrine (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Connection/MySQL.php, 37)
    01/02/2013 19:36:58 – LOG: Criando entidade reversa de produto (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 187)
    01/02/2013 19:36:58 – LOG: Recuperando chaves estrangeiras de produto (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 193)
    01/02/2013 19:36:58 – LOG: Utilizando conexao cacheada com desenv_vitrine (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Connection/MySQL.php, 37)
    01/02/2013 19:36:58 – LOG: Utilizando conexao cacheada com desenv_vitrine (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Connection/MySQL.php, 37)
    01/02/2013 19:36:58 – LOG: Recuperando os campos de produto (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 196)
    01/02/2013 19:36:58 – LOG: Analisando tabela usuario (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 159)
    01/02/2013 19:36:58 – LOG: Formatando o nome da classe de usuario (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 180)
    01/02/2013 19:36:58 – LOG: Utilizando conexao cacheada com desenv_vitrine (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Connection/MySQL.php, 37)
    01/02/2013 19:36:58 – LOG: Criando entidade reversa de usuario (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 187)
    01/02/2013 19:36:58 – LOG: Recuperando chaves estrangeiras de usuario (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 193)
    01/02/2013 19:36:58 – LOG: Utilizando conexao cacheada com desenv_vitrine (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Connection/MySQL.php, 37)
    01/02/2013 19:36:58 – LOG: Utilizando conexao cacheada com desenv_vitrine (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Connection/MySQL.php, 37)
    01/02/2013 19:36:58 – LOG: Recuperando os campos de usuario (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 196)
    01/02/2013 19:36:58 – LOG: Gerando arquivo para Categoria (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 379)
    01/02/2013 19:36:58 – LOG: Gerando arquivo para Foto (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 379)
    01/02/2013 19:36:58 – LOG: Gerando arquivo para Produto (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 379)
    01/02/2013 19:36:58 – LOG: Gerando arquivo para Usuario (/home/desenv/public_html/vitrine/application/libraries/lumine/lib/Reverse.php, 379)

    Fatal error: date() [function.date]: Timezone database is corrupt – this should *never* happen! in /home/desenv/public_html/vitrine/application/libraries/lumine/lib/Log.php on line 144″

Deixar uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

*

Pode usar estas etiquetas HTML e atributos: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">