SlideShare una empresa de Scribd logo
1 de 12
Descargar para leer sin conexión
O nascimento de um site com
Codeigniter - Intro
Olá a todos,

Decidi dar início a uma série de tutoriais à medida que vou, eu mesmo, desenvolvendo
uma aplicação web recorrendo ao CI.
A aplicação consiste num site que deverá ter pelo menos, o seguinte:

.Produtos e Categorias
.Login para administração.
.Validação de Formulários
.Paginação de Resultados.

Mas deixem-me pedir, desde já, desculpas. A qualidade, apesar do meu esforço
herculiano, será baixa. Senão veja só:

. Sou novo em OOP.
. Sou novo em PHP.
. Sou novo na Programação em geral.
. MVC é absolutamente complexo aos meus olhos.
. Não sou Programador (minha formação é em Filosofia).

No entanto, decidi avançar por três motivos:
a) partilho a minha experiência no desenvolvimento com CI com outros usuários
inexperientes que, apesar dos artigos não serem de grande nível podem, contudo, ajudar.
b) fico com o registo escrito daquilo que desenvolvi para que, mais tarde, caso queira
lembrar alguma coisa, aqui estará. :)
c) estou seguro pois, como pode haver comentários, se eu disser alguma parvoíce (ou
como dizem: bobagem), haverá sempre alguém que poderá dizer: "Isso não está
correcto."

Portanto, não vejam estes artigos como uma aula mas, antes, como uma partilha de
experiência ok? :)

Esta é a introdução, esta foi também uma apresentação aí para a malta do CI Brasil.

Vamos a isto então. :-)

Próxima paragem: O nascimento de um site com Codeigniter - Estrutura e Preparação
do Site - Parte I
O nascimento de um site com
Codeigniter - Estrutura e Preparação do
Site - Parte I

Antes de avançar para o código, uma das primeiras coisas com que teremos de tentar
perceber, é a estrutura de directorias do site.
Nesta parte I, vamos falar dessa estrutura de directórios.

1) AS PASTAS DO ARQUIVO CodeIgniter_1.7.1.zip :
Nós fazemos o download do CI (neste caso, versão 1.7.1) e vimos logo um conjunto de
directorias que queremos colocar no nosso servidor para começar a desenvolver com CI.
Contudo, antes mesmo de colocá-las no nosso servidor, resolvi fazer o seguinte:

1.1)
Remover a pasta user_guide; - Afinal ela estará online e sempre actual. Acho que não
vale a pena fazer upload do user guide.

1.2)
Aceder à pasta system e, lá dentro, mover a pasta "application" para o mesmo nível da
nossa passa system.

Teremos então a seguinte estrutura:

/application
/system
- index.php
- license.txt

2) FAZER O UPLOAD DOS FICHEIROS:
No meu host, e calculo que em muitos outros, existe uma pasta private que não é
acessível a partir do browser, (embora o seja a partir de FTP de script e localmente) e
uma pasta public_html ou www que é pública e, como tal, acessível a partir de um
cliente.

2.1)
Decidi então aproveitar essa estrutura já existente e colocar na pasta privada o seguinte:

/private
/application
/system

2.2)
Na pasta pública, decidi colocar o seguinte:
/www
/assets (pasta contendo os nossos ficheiros .js , .css, imagens etc... )
- index.php
- license.txt
- .htaccess

2.3)
A pasta controllers e views conterão uma subpasta chamada admin, onde terei o
código dos controladores e as views, referentes à zona de administração do site. Assim:

/private
/application
/controllers
/admin
/views
/admin

3) CONVENÇÕES
Finalmente, acho que é uma boa prática ter convenções de nomenclatura. Fazendo tudo
isso sozinho, não terei responsabilidades acrescidas para mostrar o meu código a outrem
e ser coerente. Mas, a verdade é que, mesmo para nós próprios, a coerência ajuda.

Resolvi usar as seguintes convenções:
.Todos os meus Models terão o prefixo de m_ ;
.Todos os meus Controllers terão o prefixo de c_ ;
.Todos os meus Views terão o prefixo de v_ ;

.Todos os meus Templates terão o sufixo de _tpl ;

Com esta estrutura, poderemos então fazer o upload. Uma vez feito, estaremos prontos
para tratar das configurações do CI. Essas configurações, contudo, serão tratadas no
nosso próximo tutorial:

O nascimento de um site com Codeigniter - Estrutura e Preparação do Site - Parte II

Abraço,
Márcio


O nascimento de um site com
Codeigniter - Estrutura e Preparação do
Site - Parte II
Este tópico é também bem simples, vamos então tratar das configurações da nossa
aplicação:

Note que algumas partes deste tópico foram já desenvolvidas num outro tutorial,
contudo, achei por bem, ainda assim, criar um tópico dedicado a isto. Notem porém que,
porque já há um tutorial bem detalhado sobre o .htaccess e a remoção do index.php e,
ainda por cima, feito por alguém bem mais capaz do que eu, resolvi colocar mais código
e menos comentário nesse tópico. Vamos a isso?

.htaccess:
O ficheiro .htaccess conterá o seguinte: (notem os comentários no .htaccess (que
começam pelo cardinal).

   1. #Para não permitir o acesso ao ficheiro .htaccess vamos
      colocá-lo com permissões:644. E, adicionar o seguinte:
   2. <Files .htaccess>
   3. order allow,deny
   4. deny from all
   5. </Files>
   6.
   7. #Nao permitir o Directory Listing:
   8. Options -Indexes
   9.
   10.     #Remove o índex.php do URL - url friendly:
   11.     <IfModule mod_rewrite.c>
   12.     RewriteEngine On
   13.     RewriteCond %{REQUEST_FILENAME} !-f
   14.     RewriteCond %{REQUEST_FILENAME} !-d
   15.
   16.     RewriteRule ^(.+)$ index.php?$1 [L]
   17.
   18.     #Nao permitir hotlinking:
   19.     RewriteCond %{HTTP_REFERER} !^$
   20.     RewriteCond %{HTTP_REFERER}
      !^http://(www.)?mysite.com/.*$ [NC]
   21.     RewriteRule .(gif|jpg|js|css|png|jpeg|swf)$ -
      [F,NC,L]
   22.     </IfModule>

application/config/config.php:

   1. $config['base_url']     = "http://mysite.com/";
   2. $config['index_page'] = ‘’;

em application/config/routes.php:

   1. /*
   2. * o nome do ficheiro controller que vai ser activo quando
      se escreve:
   3. * <a href="http://www.meusite.com"
      title="http://www.meusite.com">http://www.meusite.com</a>
      :
   4. *
   5. */
   6. $route['default_controller'] = 'c_homepage';

em application/config/autoload.php, vamos colocar libraries e helpers do CI que
iremos usar com frequencia ao longo do site:
Coloque-as de acordo com as necessidades do seu projecto, para não estar a ocupar
recursos desnecessariamente:

   1. $autoload['libraries'] =
      array('database','session','email','validation','paginatio
      n');
   2. $autoload['helper'] =
      array('url','form','text','date','security');

Não se esqueça que mudamos a localização das pastas para uma pasta private no tutorial
anterior. Ora, temos de editar o nosso index.php da seguinte forma(pelo user guide do
CI, sabemos que temos de usar um fullpath)

   1. $system_folder = "/home/mysite/private/system";
   2. $application_folder = "/home/mysite/private/application";

application/config/database.php
Finalmente, veja configure o ficheiro database.php. (Note a mudança no uft8)

   1. $active_group = "default";
   2. $active_record = TRUE;
   3.
   4. $db['default']['hostname'] = "localhost:/tmp/mysql.sock";
   5. $db['default']['username'] = "myusername";
   6. $db['default']['password'] = "mypassword";
   7. $db['default']['database'] = "mydatabase";
   8. $db['default']['dbdriver'] = "mysql";
   9. $db['default']['dbprefix'] = "";
   10.     $db['default']['pconnect'] = TRUE;
   11.     $db['default']['db_debug'] = TRUE;
   12.     $db['default']['cache_on'] = FALSE;
   13.     $db['default']['cachedir'] = "";
   14.     $db['default']['char_set'] = "utf8";
   15.     $db['default']['dbcollat'] = "utf8_unicode_ci";
      //unicode em vez de general

Este foi bem rápido e leve. Contudo, procurei ser correcto nos nomes e usar alguns
nomes em inglês para que, caso algum conceito não seja claro para si, possa recorrer a
um motor de pesquisa, e encontrar o(s) seu(s) significados. (ie. hotlinking, libraries,
helpers...).

Bem, o interessante está ainda para vir. :-)
No próximo tutorial, vamos falar da estrutura das Views. Como o tópico é bem grande,
iremos dividi-lo em episódios.
Até ao próximo tutorial: O nascimento de um site com Codeigniter - Estrutura e
Preparação do Site - Parte III - Episódio 1 de 3

ps- vou escrevendo conforme vou tendo tempo, uns tutoriais podem seguir seguidos,
outros podem levar semanas de intervalo. :( Depende do trabalho aqui deste lado ok?

Abraço,
Márcio
Se logue ou se registre para poder enviar comentários
       6039 leituras

Deveria ta na documentação do codeigniter
Enviado por drfranca em qua, 11/10/2010 - 18:08.

Seu post salvou a lavoura, deveria ter algo assim no Introdução do Codeigniter.
Brigadão!

       Se logue ou se registre para poder enviar comentários

Oi márcio, antes de mais nada
Enviado por vitor.vgb em sex, 09/25/2009 - 20:55.

Oi márcio, antes de mais nada gostaria de parabeniza-lo pelos post... muito interessante,
tou ansioso pra testar. Só queria se fosse possível vc me explicasse essa parte
"application/config/routes.php:"
"
$route['default_controller'] = 'c_homepage';
"
Mais especificamente esse comando. eu deixo do jeito que tá mesmo?!
abraço




O nascimento de um site com
Codeigniter - Estrutura e Preparação do
Site - Parte III - Episódio 1 de 3
Olá uma vez mais. :-)

Este é um assunto bem grande. Bem, no fundo, todos são assuntos bem grandes,
dependendo apenas da profundidade com que os estudamos. Mas neste, eu tive que
perceber bem, como funciona isto das Views. Nesta altura, ainda não percebi tudo. Mas
o suficiente para as fazer funcionar. Vamos ver.
Existem muitas maneiras de lidar com as views. Podemos estender o controller,
podemos usar um sistema de templates tipo smarty ou outro. Na Wiki do CI haverá
ainda algumas outras opções. Mas, como eu gosto de manter tudo muito simples quando
estou aprendendo, optei por seguir a sugestão dada aqui:
(http://codeigniter.com/forums/viewthread/97702/)

1) - O template:
A dificuldade deste tópico prende-se, não tanto com as próprias views e modo como nós
podemos vê-las a funcionar pois, felizmente, a gooracle está cheio de exemplos desse
tipo, a dificuldade está em como estruturar essas várias views que haveremos de ter, de
maneira eficiente. É na resposta a esta eficiência que esta questão se torna complicada,
contudo, apesar das várias formas de resolver a questão apontadas em cima, nós
optamos aqui por usar templates.

1.1)
Conceptualmente, deveremos imaginar um template como um molde, onde as várias
páginas do nosso site irão se adequar. Dito isto, deveremos analisar (olhando para o
layout das páginas que estamos a desenvolver) quais as partes que vão se manter e quais
vão mudar, de página para página.
Imaginemos que, na nossa estrutura, temos um cabeçalho sempre igual e um rodapé
sempre igual mas que, contudo, a parte central vai-se modificando de página para
página.
Detectamos então 3 partes:
Um $header; um $main e um $footer.

Vejamos o nosso template chamado geral_tpl.php :

   1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
      Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
      strict.dtd">
   2. <html xmlns="http://www.w3.org/1999/xhtml">
   3. <head>
   4.         <meta http-equiv="Content-Type"
      content="text/html; charset=utf-8" />
   5.
   6.         <!--Esta é a uma parte dinâmica do nosso
      template. -->
   7.         <title><?php echo $titulo;?></title>
   8.
   9. </head>
   10.
   11.     <body>
   12.             <div id="container">
   13.
   14.
   15.                             <!--Chamada estática a
      uma view-->
   16.                             <?php $this->load-
      >view('v_header'); ?>
   17.
   18.                             <!--Esta é outra parte
      dinâmica do nosso template. -->
   19.                             <?php $this->load-
      >view($main); ?>
   20.
   21.
   22.                             <!--Chamada estática do
      footer-->
   23.                             <?php $this->load-
      >view('v_footer'); ?>
   24.
   25.
26.                    </div><!--EO Container-->
   27.        </body>
   28.        </html>

1.2) A explicação - as views v_header e v_footer:
Esta é a nossa primeira view. :-)
Em vez de chamarmos o cabeçalho e o rodapé em cada página, optamos por chamá-los
apenas no template. Assim, de cada vez que um controlador chamar uma view, ele
poderá chamar a view template que, por sua vez, chamará as views do cabeçalho e do
rodapé.

<?php $this->load->view('v_header'); ?>

<?php $this->load->view('v_footer'); ?>

O nosso cabeçalho e o nosso rodapé não poderiam ser mais simples:
Cabeçalho:

   1. <div id="header">
   2.         <p>Eu sou um cabeçalho.</p>
   3. </div>

Rodapé:

   1. <div id="footer">
   2.         <p>Eu sou um rodapé.</p>
   3. </div>

No próximo episódio da série das views, tentaremos explicar as partes dinâmicas do
nosso template. Próximo episódio:
O nascimento de um site com Codeigniter - Estrutura e Preparação do Site - Parte III -
Episódio 2 de 3


O nascimento de um site com
Codeigniter - Estrutura e Preparação do
Site - Parte III - Episódio 2 de 3
Sim... o último episódio até foi pequeno mas, a razão para tal, deveu-se à necessidade de
dar um foco maior às partes dinâmicas do template, pois elas não parecem ser assim tão
fáceis de compreender. Pelo menos, não o são para mim. Vamos a isso?

1.3) A explicação - as partes dinâmicas do nosso template - geral
o nosso template não tratará apenas de chamar as views. Lembre-se, o principal do
template é conter toda a informação que poderá ser utilizada de igual modo, num
número significativo de páginas do nosso site.
Se nós temos um css que deverá ser usado em várias páginas, porque não chamá-lo
dentro da head tag do nosso template? Se nós temos um javascript que poderá ser usado
em várias páginas porque não, também, colocar as suas instruções dentro do template?
Está seguindo a lógica? Espero que sim.
E o nosso menu de navegação? Imaginando que temos um menu de navegação no topo
da nossa página. Onde deveremos colocar ele? No template? Ou na nossa view de
cabeçalho - v_header ?
Eu diria que depende de SUA organização. Livre escolha. :)

Mas, continuemos a analisar o nosso template:
De onde vem esta variável $titulo? E esta variável $main? É claro que estas serão as
variáveis responsáveis por dar dinamismo ao nosso template. Mas vamos por partes.

1.3.1) A explicação - as partes dinâmicas do nosso template - o $titulo

Primeiro o $titulo:
<title><?php echo $titulo;?></title>
A variável $titulo vem dos nossos controllers. Se nós tivermos falando do título da
página de produtos, então, o nosso controller de produto, deverá ter um array onde, a
sua key terá o nome de ‟titulo‟ e o seu valor, a seguinte string: “Os nossos produtos”.
Depois, esse array será carregado e associado ao nosso template. Feito isso, nós
poderemos aceder a elementos desse array a partir de variáveis. Eis um exemplo:
No nosso controller:
c_produtos.php

   1. $data['titulo'] = "Os nossos produtos";
   2. $this->load->vars($data);
   3. $this->load->view('geral_tpl');


Simples hm? Ele guardou os dados da variável, colocou esses dados disponíveis para todas as
views através do método load->vars(), e finalmente, nós podemos carregar o nosso template
com a variável $titulo definida, que os valores aparecerão no nosso titulo da página.

Mas, não só de um controlador se faz o nosso site. Eu disse atrás que a variável $titulo
vem dos nossos controladores. O plural foi propositado. Cada controlador definirá a key
titulo com valores diferentes. Como aparece então um título diferente para cada página?
Como saberá ele que controlador carregar para mostrar uma determinada informação e
não outra?
A resposta: Pelo URI.

Estou em crer, e cada vez mais começo a notar, que o router é um elemento bem
poderoso de uma Framework. Se nós tivermos um URI assim:
http://www.meusite.com/c_produtos/ nós saberemos que o controlador a ser chamado
será o dos produtos. Logo, podemos ficar descansados que, a view que será chamada e
os dados que a view irá conter, serão os dados fornecidos por esse controlador.

1.3.2) A explicação - as partes dinâmicas do nosso template - o $main

Agora o $main:
<?php $this->load->view($main); ?>
Aqui nós estamos, claramente, a fazer o processo de load de uma view, dentro de outra
view. Confuso? Eu acho bem simples, quando comparado com o método de estender o
controller. Mas, vamos seguir o rasto desta variável $main. :)

Pelo que foi dito acerca da variável $titulo, já deveremos saber que esta variável $main
virá de um controlador, certo? E saberemos mais do que isso. Saberemos que esta
variável $main virá de um array no controlador, cuja key terá o nome de „main‟.
Ora, na nossa view, nós estamos colocando a variável $main em vez de um nome de
uma view, logo, que valor deverá ter a nossa key „main‟ no nosso array no controlador?
Espero que já tenha respondido mentalmente: “O valor da nossa key „main‟
corresponderá ao nome[1] de uma view”.

Por isso, e sem mais demoras:

    1. $data['main'] = 'v_produto';
    2.
    3. $this->load->vars($data);
    4.
    5. $this->load->view('geral_tpl');

O processo é idêntico ao feito para a variável $titulo. Mas aqui, nós estamos passando
na key main, os nomes de uma view, neste caso, v_produto. Vamos espreitar esta view:

    1. <div id=”produto”>
    2. <p>Aqui estarão os detalhes dos produtos.</p>
    3. </div>


E é isto. Simples simples.

[1] Qual nome? O nome da classe, ou o nome do ficheiro? O nome do ficheiro. Sem a
extensão. Porquê o nome do ficheiro e não da classe? Porque estamos trabalhando com
o URI e, lá, o valor é baseado nos ficheiros e não nos nomes das classes. O mesmo já
não se passará com os nomes dos métodos. O nosso URI poderá conter o nome dos
nossos métodos dentro das classes.

No próximo e último episódio, iremos completar o nosso template com duas coisas que
são muito frequentes ao longo de nossas páginas: CSS e Javascript em,
O nascimento de um site com Codeigniter - Estrutura e Preparação do Site - Parte III -
Episódio 3 de 3
Até lá. :)
Se logue ou se registre para poder enviar comentários
        4408 leituras

Parabens e uma duvida...
Enviado por vtpa em seg, 12/07/2009 - 10:14.

Bem, primeiramente parabéns pela serie de tutoriais.. realmente muito bom!

A minha duvida é exatamente sobre as views... onde ficam os códigos html?
dentro de um arquivo com o mesmo nome e com alguma extensão padrão (tipo .php ou
.html) em qual pasta?
ou no Banco de Dados, ou em algum outro lugar?

Desculpe, talvez seja uma pergunta básica, mas nao podia deixar de perguntar!

Obrigado e mais uma vez parabéns, aguardo o próximo tuto! ^^

www.viniciusalmeida.com.br

        Se logue ou se registre para poder enviar comentários

Resposta e outra dúvida
Enviado por NeiPCs em sex, 12/11/2009 - 03:23.

Sobre a organização das views eu entendi:
Extensão: .php
Local: /private/application/views

Quando ele menciona v_produto por exemplo, é uma view, logo deve ser criada na
pasta acima, com o nome v_produto.php.
Ao passo que c_produtos é um controller, e deve ser criado na pasta
/private/application/controllers com o nome c_produtos.php

A menção da pasta "private" é supondo que você está usando uma pasta remota via FTP
/ Painel de controle do seu site.

-----
Acessando o link do controller, me dá este erro:
Fatal error: Using $this when not in object context in
/home/meuusuario/private/application/controllers/c_produtos.php on line 4

Meu c_produtos.php esta assim:

   1.   <?php
   2.   $data['titulo'] = "Os nossos produtos";
   3.   $data['main'] = 'v_produto';
   4.   $this->load->vars($data);
   5.   $this->load->view('geral_tpl');
   6.   ?>
O que será que eu fiz de errado?

       Se logue ou se registre para poder enviar comentários

c_produtos - Corrigindo erro
Enviado por manives em sab, 11/06/2010 - 23:45.

Olá NeiPCs!
Também sou novo no CI, mas estudando é que e praticando é que se desenvolve o
conhecimento.
O que faltou no seu controller foi declarar o escopo dentro de uma classe c_produtos.

   1. <?php
   2. class c_produtos extends Controller {
   3.
   4.          function index()
   5.          {
   6.                  $data['titulo'] = "Os nossos produtos";
   7.                  $data['main'] = 'v_produto'
   8.                  $this->load->view('geral_tpl',$data);
   9.          }
   10.      }
   11.      ?>
   12.
   13.      Se você não colocar, $this->load->vars($data); as
      variáveis também ficam disponíveis na memória.
   14.
   15.      Minha primeira contribuição para o fórum.
   16.
   17.      Abraços,
   18.      Manoel Carvalho.

Manoel Carvalho
Desenvolvedor Web

       Se logue ou se registre para poder enviar comentários

Tente fazer de outra maneira
Enviado por siclaudio-acara em qui, 02/04/2010 - 13:42.

tente fazer desta maneira.

   1. $this->load->view('geral_tpl',$data);

Más contenido relacionado

La actualidad más candente

ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2Cezar Souza
 
Apresentação zend framework 2 parte 1
Apresentação zend framework 2   parte 1 Apresentação zend framework 2   parte 1
Apresentação zend framework 2 parte 1 Edgar Dantas
 
Zend Framework 1.11
Zend Framework 1.11Zend Framework 1.11
Zend Framework 1.11Cezar Souza
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com PythonPythOnRio
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsIgo Coelho
 
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCCriando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCFlávio Lisboa
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteMichael Cardoso
 
Desenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi BuilderDesenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi BuilderDaniel Paz
 
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...iMasters
 
Curso de Introdução - PHP Zend Framework
Curso de Introdução - PHP Zend FrameworkCurso de Introdução - PHP Zend Framework
Curso de Introdução - PHP Zend FrameworkEvandro Klimpel Balmant
 
PDO: TRABALHANDO COM BANCO DO JEITO CERTO
PDO: TRABALHANDO COM BANCO DO JEITO CERTOPDO: TRABALHANDO COM BANCO DO JEITO CERTO
PDO: TRABALHANDO COM BANCO DO JEITO CERTOPerla Coutinho Barbosa
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorAllyson Barros
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Anderson Araújo
 
Construindo aplicações web java com netbeans
Construindo aplicações web java com netbeansConstruindo aplicações web java com netbeans
Construindo aplicações web java com netbeansSliedesharessbarbosa
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem JavaUFPA
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPiMasters
 

La actualidad más candente (20)

ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
 
Web Scale Data Management
Web Scale Data ManagementWeb Scale Data Management
Web Scale Data Management
 
Apresentação zend framework 2 parte 1
Apresentação zend framework 2   parte 1 Apresentação zend framework 2   parte 1
Apresentação zend framework 2 parte 1
 
Zend Framework 1.11
Zend Framework 1.11Zend Framework 1.11
Zend Framework 1.11
 
Minicurso Yii2
Minicurso Yii2Minicurso Yii2
Minicurso Yii2
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com Python
 
Desenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e ServletsDesenvolvimento web em java com JSP e Servlets
Desenvolvimento web em java com JSP e Servlets
 
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISCCriando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
Criando Aplicações PHP Poderosas com Zend Framework 2 - 8º SOLISC
 
Zend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil CompetenteZend Framework 2 - Desenvolvimento Ágil Competente
Zend Framework 2 - Desenvolvimento Ágil Competente
 
Desenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi BuilderDesenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi Builder
 
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
 
Framework Yii
Framework YiiFramework Yii
Framework Yii
 
Curso de Introdução - PHP Zend Framework
Curso de Introdução - PHP Zend FrameworkCurso de Introdução - PHP Zend Framework
Curso de Introdução - PHP Zend Framework
 
PDO: TRABALHANDO COM BANCO DO JEITO CERTO
PDO: TRABALHANDO COM BANCO DO JEITO CERTOPDO: TRABALHANDO COM BANCO DO JEITO CERTO
PDO: TRABALHANDO COM BANCO DO JEITO CERTO
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?
 
Construindo aplicações web java com netbeans
Construindo aplicações web java com netbeansConstruindo aplicações web java com netbeans
Construindo aplicações web java com netbeans
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem Java
 
Mean Stack
Mean StackMean Stack
Mean Stack
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
 

Similar a Desenvolvimento de um site com Codeigniter

Guião demotécnica
Guião demotécnicaGuião demotécnica
Guião demotécnicaSilvio Dias
 
Guiao demotecnica
Guiao demotecnicaGuiao demotecnica
Guiao demotecnicaSilvio Dias
 
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...Dextra Sistemas / Etec Itu
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Daniel Makiyama
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterEric Silva
 
Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013Guga Alves
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisrafaelberlanda
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
Criando Sites Com CMS
Criando Sites Com CMSCriando Sites Com CMS
Criando Sites Com CMSClaudio Toldo
 
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDesenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDextra Sistemas / Etec Itu
 
Clean code: programando com WordPress de forma profissional
Clean code: programando com WordPress de forma profissionalClean code: programando com WordPress de forma profissional
Clean code: programando com WordPress de forma profissionalLeo Baiano
 
Otimização Front-end para WordPress
Otimização Front-end para WordPressOtimização Front-end para WordPress
Otimização Front-end para WordPressGuga Alves
 

Similar a Desenvolvimento de um site com Codeigniter (20)

Cake Php
Cake PhpCake Php
Cake Php
 
Guião demotécnica
Guião demotécnicaGuião demotécnica
Guião demotécnica
 
Guiao demotecnica
Guiao demotecnicaGuiao demotecnica
Guiao demotecnica
 
Crud
CrudCrud
Crud
 
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniter
 
Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013Otimizacao Front-End para WordPress - OlhoSEO 2013
Otimizacao Front-End para WordPress - OlhoSEO 2013
 
Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
 
Programando php com excelência
Programando php com excelênciaProgramando php com excelência
Programando php com excelência
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portais
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
Criando Sites Com CMS
Criando Sites Com CMSCriando Sites Com CMS
Criando Sites Com CMS
 
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDesenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
 
Palestra
PalestraPalestra
Palestra
 
Clean code: programando com WordPress de forma profissional
Clean code: programando com WordPress de forma profissionalClean code: programando com WordPress de forma profissional
Clean code: programando com WordPress de forma profissional
 
Gsp313 desafio selo_01
Gsp313 desafio selo_01Gsp313 desafio selo_01
Gsp313 desafio selo_01
 
Nao sensivel
Nao sensivelNao sensivel
Nao sensivel
 
Otimização Front-end para WordPress
Otimização Front-end para WordPressOtimização Front-end para WordPress
Otimização Front-end para WordPress
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 

Último

William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfAdrianaCunha84
 
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptxApostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptxIsabelaRafael2
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniCassio Meira Jr.
 
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptxSlides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptxLuizHenriquedeAlmeid6
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?Rosalina Simão Nunes
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditaduraAdryan Luiz
 
Regência Nominal e Verbal português .pdf
Regência Nominal e Verbal português .pdfRegência Nominal e Verbal português .pdf
Regência Nominal e Verbal português .pdfmirandadudu08
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMVanessaCavalcante37
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOColégio Santa Teresinha
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024Jeanoliveira597523
 
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chaveAula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chaveaulasgege
 
Sociologia Contemporânea - Uma Abordagem dos principais autores
Sociologia Contemporânea - Uma Abordagem dos principais autoresSociologia Contemporânea - Uma Abordagem dos principais autores
Sociologia Contemporânea - Uma Abordagem dos principais autoresaulasgege
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesMary Alvarenga
 
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptxthaisamaral9365923
 
Prova uniasselvi tecnologias da Informação.pdf
Prova uniasselvi tecnologias da Informação.pdfProva uniasselvi tecnologias da Informação.pdf
Prova uniasselvi tecnologias da Informação.pdfArthurRomanof1
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalJacqueline Cerqueira
 
Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasCassio Meira Jr.
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfManuais Formação
 
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaAula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaaulasgege
 

Último (20)

William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdf
 
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptxApostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
 
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e TaniModelos de Desenvolvimento Motor - Gallahue, Newell e Tani
Modelos de Desenvolvimento Motor - Gallahue, Newell e Tani
 
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptxSlides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
Slides Lição 4, CPAD, Como se Conduzir na Caminhada, 2Tr24.pptx
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?
 
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
 
trabalho wanda rocha ditadura
trabalho wanda rocha ditaduratrabalho wanda rocha ditadura
trabalho wanda rocha ditadura
 
Regência Nominal e Verbal português .pdf
Regência Nominal e Verbal português .pdfRegência Nominal e Verbal português .pdf
Regência Nominal e Verbal português .pdf
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
 
ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024ABRIL VERDE.pptx Slide sobre abril ver 2024
ABRIL VERDE.pptx Slide sobre abril ver 2024
 
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chaveAula - 2º Ano - Cultura e Sociedade - Conceitos-chave
Aula - 2º Ano - Cultura e Sociedade - Conceitos-chave
 
Sociologia Contemporânea - Uma Abordagem dos principais autores
Sociologia Contemporânea - Uma Abordagem dos principais autoresSociologia Contemporânea - Uma Abordagem dos principais autores
Sociologia Contemporânea - Uma Abordagem dos principais autores
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das Mães
 
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx“Sobrou pra mim” - Conto de Ruth Rocha.pptx
“Sobrou pra mim” - Conto de Ruth Rocha.pptx
 
Prova uniasselvi tecnologias da Informação.pdf
Prova uniasselvi tecnologias da Informação.pdfProva uniasselvi tecnologias da Informação.pdf
Prova uniasselvi tecnologias da Informação.pdf
 
Gerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem OrganizacionalGerenciando a Aprendizagem Organizacional
Gerenciando a Aprendizagem Organizacional
 
Habilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e EspecíficasHabilidades Motoras Básicas e Específicas
Habilidades Motoras Básicas e Específicas
 
UFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdfUFCD_10392_Intervenção em populações de risco_índice .pdf
UFCD_10392_Intervenção em populações de risco_índice .pdf
 
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologiaAula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
Aula - 1º Ano - Émile Durkheim - Um dos clássicos da sociologia
 

Desenvolvimento de um site com Codeigniter

  • 1. O nascimento de um site com Codeigniter - Intro Olá a todos, Decidi dar início a uma série de tutoriais à medida que vou, eu mesmo, desenvolvendo uma aplicação web recorrendo ao CI. A aplicação consiste num site que deverá ter pelo menos, o seguinte: .Produtos e Categorias .Login para administração. .Validação de Formulários .Paginação de Resultados. Mas deixem-me pedir, desde já, desculpas. A qualidade, apesar do meu esforço herculiano, será baixa. Senão veja só: . Sou novo em OOP. . Sou novo em PHP. . Sou novo na Programação em geral. . MVC é absolutamente complexo aos meus olhos. . Não sou Programador (minha formação é em Filosofia). No entanto, decidi avançar por três motivos: a) partilho a minha experiência no desenvolvimento com CI com outros usuários inexperientes que, apesar dos artigos não serem de grande nível podem, contudo, ajudar. b) fico com o registo escrito daquilo que desenvolvi para que, mais tarde, caso queira lembrar alguma coisa, aqui estará. :) c) estou seguro pois, como pode haver comentários, se eu disser alguma parvoíce (ou como dizem: bobagem), haverá sempre alguém que poderá dizer: "Isso não está correcto." Portanto, não vejam estes artigos como uma aula mas, antes, como uma partilha de experiência ok? :) Esta é a introdução, esta foi também uma apresentação aí para a malta do CI Brasil. Vamos a isto então. :-) Próxima paragem: O nascimento de um site com Codeigniter - Estrutura e Preparação do Site - Parte I
  • 2. O nascimento de um site com Codeigniter - Estrutura e Preparação do Site - Parte I Antes de avançar para o código, uma das primeiras coisas com que teremos de tentar perceber, é a estrutura de directorias do site. Nesta parte I, vamos falar dessa estrutura de directórios. 1) AS PASTAS DO ARQUIVO CodeIgniter_1.7.1.zip : Nós fazemos o download do CI (neste caso, versão 1.7.1) e vimos logo um conjunto de directorias que queremos colocar no nosso servidor para começar a desenvolver com CI. Contudo, antes mesmo de colocá-las no nosso servidor, resolvi fazer o seguinte: 1.1) Remover a pasta user_guide; - Afinal ela estará online e sempre actual. Acho que não vale a pena fazer upload do user guide. 1.2) Aceder à pasta system e, lá dentro, mover a pasta "application" para o mesmo nível da nossa passa system. Teremos então a seguinte estrutura: /application /system - index.php - license.txt 2) FAZER O UPLOAD DOS FICHEIROS: No meu host, e calculo que em muitos outros, existe uma pasta private que não é acessível a partir do browser, (embora o seja a partir de FTP de script e localmente) e uma pasta public_html ou www que é pública e, como tal, acessível a partir de um cliente. 2.1) Decidi então aproveitar essa estrutura já existente e colocar na pasta privada o seguinte: /private /application /system 2.2) Na pasta pública, decidi colocar o seguinte:
  • 3. /www /assets (pasta contendo os nossos ficheiros .js , .css, imagens etc... ) - index.php - license.txt - .htaccess 2.3) A pasta controllers e views conterão uma subpasta chamada admin, onde terei o código dos controladores e as views, referentes à zona de administração do site. Assim: /private /application /controllers /admin /views /admin 3) CONVENÇÕES Finalmente, acho que é uma boa prática ter convenções de nomenclatura. Fazendo tudo isso sozinho, não terei responsabilidades acrescidas para mostrar o meu código a outrem e ser coerente. Mas, a verdade é que, mesmo para nós próprios, a coerência ajuda. Resolvi usar as seguintes convenções: .Todos os meus Models terão o prefixo de m_ ; .Todos os meus Controllers terão o prefixo de c_ ; .Todos os meus Views terão o prefixo de v_ ; .Todos os meus Templates terão o sufixo de _tpl ; Com esta estrutura, poderemos então fazer o upload. Uma vez feito, estaremos prontos para tratar das configurações do CI. Essas configurações, contudo, serão tratadas no nosso próximo tutorial: O nascimento de um site com Codeigniter - Estrutura e Preparação do Site - Parte II Abraço, Márcio O nascimento de um site com Codeigniter - Estrutura e Preparação do Site - Parte II Este tópico é também bem simples, vamos então tratar das configurações da nossa aplicação: Note que algumas partes deste tópico foram já desenvolvidas num outro tutorial, contudo, achei por bem, ainda assim, criar um tópico dedicado a isto. Notem porém que,
  • 4. porque já há um tutorial bem detalhado sobre o .htaccess e a remoção do index.php e, ainda por cima, feito por alguém bem mais capaz do que eu, resolvi colocar mais código e menos comentário nesse tópico. Vamos a isso? .htaccess: O ficheiro .htaccess conterá o seguinte: (notem os comentários no .htaccess (que começam pelo cardinal). 1. #Para não permitir o acesso ao ficheiro .htaccess vamos colocá-lo com permissões:644. E, adicionar o seguinte: 2. <Files .htaccess> 3. order allow,deny 4. deny from all 5. </Files> 6. 7. #Nao permitir o Directory Listing: 8. Options -Indexes 9. 10. #Remove o índex.php do URL - url friendly: 11. <IfModule mod_rewrite.c> 12. RewriteEngine On 13. RewriteCond %{REQUEST_FILENAME} !-f 14. RewriteCond %{REQUEST_FILENAME} !-d 15. 16. RewriteRule ^(.+)$ index.php?$1 [L] 17. 18. #Nao permitir hotlinking: 19. RewriteCond %{HTTP_REFERER} !^$ 20. RewriteCond %{HTTP_REFERER} !^http://(www.)?mysite.com/.*$ [NC] 21. RewriteRule .(gif|jpg|js|css|png|jpeg|swf)$ - [F,NC,L] 22. </IfModule> application/config/config.php: 1. $config['base_url'] = "http://mysite.com/"; 2. $config['index_page'] = ‘’; em application/config/routes.php: 1. /* 2. * o nome do ficheiro controller que vai ser activo quando se escreve: 3. * <a href="http://www.meusite.com" title="http://www.meusite.com">http://www.meusite.com</a> : 4. * 5. */ 6. $route['default_controller'] = 'c_homepage'; em application/config/autoload.php, vamos colocar libraries e helpers do CI que iremos usar com frequencia ao longo do site:
  • 5. Coloque-as de acordo com as necessidades do seu projecto, para não estar a ocupar recursos desnecessariamente: 1. $autoload['libraries'] = array('database','session','email','validation','paginatio n'); 2. $autoload['helper'] = array('url','form','text','date','security'); Não se esqueça que mudamos a localização das pastas para uma pasta private no tutorial anterior. Ora, temos de editar o nosso index.php da seguinte forma(pelo user guide do CI, sabemos que temos de usar um fullpath) 1. $system_folder = "/home/mysite/private/system"; 2. $application_folder = "/home/mysite/private/application"; application/config/database.php Finalmente, veja configure o ficheiro database.php. (Note a mudança no uft8) 1. $active_group = "default"; 2. $active_record = TRUE; 3. 4. $db['default']['hostname'] = "localhost:/tmp/mysql.sock"; 5. $db['default']['username'] = "myusername"; 6. $db['default']['password'] = "mypassword"; 7. $db['default']['database'] = "mydatabase"; 8. $db['default']['dbdriver'] = "mysql"; 9. $db['default']['dbprefix'] = ""; 10. $db['default']['pconnect'] = TRUE; 11. $db['default']['db_debug'] = TRUE; 12. $db['default']['cache_on'] = FALSE; 13. $db['default']['cachedir'] = ""; 14. $db['default']['char_set'] = "utf8"; 15. $db['default']['dbcollat'] = "utf8_unicode_ci"; //unicode em vez de general Este foi bem rápido e leve. Contudo, procurei ser correcto nos nomes e usar alguns nomes em inglês para que, caso algum conceito não seja claro para si, possa recorrer a um motor de pesquisa, e encontrar o(s) seu(s) significados. (ie. hotlinking, libraries, helpers...). Bem, o interessante está ainda para vir. :-) No próximo tutorial, vamos falar da estrutura das Views. Como o tópico é bem grande, iremos dividi-lo em episódios. Até ao próximo tutorial: O nascimento de um site com Codeigniter - Estrutura e Preparação do Site - Parte III - Episódio 1 de 3 ps- vou escrevendo conforme vou tendo tempo, uns tutoriais podem seguir seguidos, outros podem levar semanas de intervalo. :( Depende do trabalho aqui deste lado ok? Abraço, Márcio
  • 6. Se logue ou se registre para poder enviar comentários 6039 leituras Deveria ta na documentação do codeigniter Enviado por drfranca em qua, 11/10/2010 - 18:08. Seu post salvou a lavoura, deveria ter algo assim no Introdução do Codeigniter. Brigadão! Se logue ou se registre para poder enviar comentários Oi márcio, antes de mais nada Enviado por vitor.vgb em sex, 09/25/2009 - 20:55. Oi márcio, antes de mais nada gostaria de parabeniza-lo pelos post... muito interessante, tou ansioso pra testar. Só queria se fosse possível vc me explicasse essa parte "application/config/routes.php:" " $route['default_controller'] = 'c_homepage'; " Mais especificamente esse comando. eu deixo do jeito que tá mesmo?! abraço O nascimento de um site com Codeigniter - Estrutura e Preparação do Site - Parte III - Episódio 1 de 3 Olá uma vez mais. :-) Este é um assunto bem grande. Bem, no fundo, todos são assuntos bem grandes, dependendo apenas da profundidade com que os estudamos. Mas neste, eu tive que perceber bem, como funciona isto das Views. Nesta altura, ainda não percebi tudo. Mas o suficiente para as fazer funcionar. Vamos ver. Existem muitas maneiras de lidar com as views. Podemos estender o controller, podemos usar um sistema de templates tipo smarty ou outro. Na Wiki do CI haverá ainda algumas outras opções. Mas, como eu gosto de manter tudo muito simples quando estou aprendendo, optei por seguir a sugestão dada aqui: (http://codeigniter.com/forums/viewthread/97702/) 1) - O template: A dificuldade deste tópico prende-se, não tanto com as próprias views e modo como nós podemos vê-las a funcionar pois, felizmente, a gooracle está cheio de exemplos desse tipo, a dificuldade está em como estruturar essas várias views que haveremos de ter, de maneira eficiente. É na resposta a esta eficiência que esta questão se torna complicada,
  • 7. contudo, apesar das várias formas de resolver a questão apontadas em cima, nós optamos aqui por usar templates. 1.1) Conceptualmente, deveremos imaginar um template como um molde, onde as várias páginas do nosso site irão se adequar. Dito isto, deveremos analisar (olhando para o layout das páginas que estamos a desenvolver) quais as partes que vão se manter e quais vão mudar, de página para página. Imaginemos que, na nossa estrutura, temos um cabeçalho sempre igual e um rodapé sempre igual mas que, contudo, a parte central vai-se modificando de página para página. Detectamos então 3 partes: Um $header; um $main e um $footer. Vejamos o nosso template chamado geral_tpl.php : 1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1- strict.dtd"> 2. <html xmlns="http://www.w3.org/1999/xhtml"> 3. <head> 4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5. 6. <!--Esta é a uma parte dinâmica do nosso template. --> 7. <title><?php echo $titulo;?></title> 8. 9. </head> 10. 11. <body> 12. <div id="container"> 13. 14. 15. <!--Chamada estática a uma view--> 16. <?php $this->load- >view('v_header'); ?> 17. 18. <!--Esta é outra parte dinâmica do nosso template. --> 19. <?php $this->load- >view($main); ?> 20. 21. 22. <!--Chamada estática do footer--> 23. <?php $this->load- >view('v_footer'); ?> 24. 25.
  • 8. 26. </div><!--EO Container--> 27. </body> 28. </html> 1.2) A explicação - as views v_header e v_footer: Esta é a nossa primeira view. :-) Em vez de chamarmos o cabeçalho e o rodapé em cada página, optamos por chamá-los apenas no template. Assim, de cada vez que um controlador chamar uma view, ele poderá chamar a view template que, por sua vez, chamará as views do cabeçalho e do rodapé. <?php $this->load->view('v_header'); ?> <?php $this->load->view('v_footer'); ?> O nosso cabeçalho e o nosso rodapé não poderiam ser mais simples: Cabeçalho: 1. <div id="header"> 2. <p>Eu sou um cabeçalho.</p> 3. </div> Rodapé: 1. <div id="footer"> 2. <p>Eu sou um rodapé.</p> 3. </div> No próximo episódio da série das views, tentaremos explicar as partes dinâmicas do nosso template. Próximo episódio: O nascimento de um site com Codeigniter - Estrutura e Preparação do Site - Parte III - Episódio 2 de 3 O nascimento de um site com Codeigniter - Estrutura e Preparação do Site - Parte III - Episódio 2 de 3 Sim... o último episódio até foi pequeno mas, a razão para tal, deveu-se à necessidade de dar um foco maior às partes dinâmicas do template, pois elas não parecem ser assim tão fáceis de compreender. Pelo menos, não o são para mim. Vamos a isso? 1.3) A explicação - as partes dinâmicas do nosso template - geral o nosso template não tratará apenas de chamar as views. Lembre-se, o principal do template é conter toda a informação que poderá ser utilizada de igual modo, num número significativo de páginas do nosso site. Se nós temos um css que deverá ser usado em várias páginas, porque não chamá-lo dentro da head tag do nosso template? Se nós temos um javascript que poderá ser usado em várias páginas porque não, também, colocar as suas instruções dentro do template?
  • 9. Está seguindo a lógica? Espero que sim. E o nosso menu de navegação? Imaginando que temos um menu de navegação no topo da nossa página. Onde deveremos colocar ele? No template? Ou na nossa view de cabeçalho - v_header ? Eu diria que depende de SUA organização. Livre escolha. :) Mas, continuemos a analisar o nosso template: De onde vem esta variável $titulo? E esta variável $main? É claro que estas serão as variáveis responsáveis por dar dinamismo ao nosso template. Mas vamos por partes. 1.3.1) A explicação - as partes dinâmicas do nosso template - o $titulo Primeiro o $titulo: <title><?php echo $titulo;?></title> A variável $titulo vem dos nossos controllers. Se nós tivermos falando do título da página de produtos, então, o nosso controller de produto, deverá ter um array onde, a sua key terá o nome de ‟titulo‟ e o seu valor, a seguinte string: “Os nossos produtos”. Depois, esse array será carregado e associado ao nosso template. Feito isso, nós poderemos aceder a elementos desse array a partir de variáveis. Eis um exemplo: No nosso controller: c_produtos.php 1. $data['titulo'] = "Os nossos produtos"; 2. $this->load->vars($data); 3. $this->load->view('geral_tpl'); Simples hm? Ele guardou os dados da variável, colocou esses dados disponíveis para todas as views através do método load->vars(), e finalmente, nós podemos carregar o nosso template com a variável $titulo definida, que os valores aparecerão no nosso titulo da página. Mas, não só de um controlador se faz o nosso site. Eu disse atrás que a variável $titulo vem dos nossos controladores. O plural foi propositado. Cada controlador definirá a key titulo com valores diferentes. Como aparece então um título diferente para cada página? Como saberá ele que controlador carregar para mostrar uma determinada informação e não outra? A resposta: Pelo URI. Estou em crer, e cada vez mais começo a notar, que o router é um elemento bem poderoso de uma Framework. Se nós tivermos um URI assim: http://www.meusite.com/c_produtos/ nós saberemos que o controlador a ser chamado será o dos produtos. Logo, podemos ficar descansados que, a view que será chamada e os dados que a view irá conter, serão os dados fornecidos por esse controlador. 1.3.2) A explicação - as partes dinâmicas do nosso template - o $main Agora o $main: <?php $this->load->view($main); ?>
  • 10. Aqui nós estamos, claramente, a fazer o processo de load de uma view, dentro de outra view. Confuso? Eu acho bem simples, quando comparado com o método de estender o controller. Mas, vamos seguir o rasto desta variável $main. :) Pelo que foi dito acerca da variável $titulo, já deveremos saber que esta variável $main virá de um controlador, certo? E saberemos mais do que isso. Saberemos que esta variável $main virá de um array no controlador, cuja key terá o nome de „main‟. Ora, na nossa view, nós estamos colocando a variável $main em vez de um nome de uma view, logo, que valor deverá ter a nossa key „main‟ no nosso array no controlador? Espero que já tenha respondido mentalmente: “O valor da nossa key „main‟ corresponderá ao nome[1] de uma view”. Por isso, e sem mais demoras: 1. $data['main'] = 'v_produto'; 2. 3. $this->load->vars($data); 4. 5. $this->load->view('geral_tpl'); O processo é idêntico ao feito para a variável $titulo. Mas aqui, nós estamos passando na key main, os nomes de uma view, neste caso, v_produto. Vamos espreitar esta view: 1. <div id=”produto”> 2. <p>Aqui estarão os detalhes dos produtos.</p> 3. </div> E é isto. Simples simples. [1] Qual nome? O nome da classe, ou o nome do ficheiro? O nome do ficheiro. Sem a extensão. Porquê o nome do ficheiro e não da classe? Porque estamos trabalhando com o URI e, lá, o valor é baseado nos ficheiros e não nos nomes das classes. O mesmo já não se passará com os nomes dos métodos. O nosso URI poderá conter o nome dos nossos métodos dentro das classes. No próximo e último episódio, iremos completar o nosso template com duas coisas que são muito frequentes ao longo de nossas páginas: CSS e Javascript em, O nascimento de um site com Codeigniter - Estrutura e Preparação do Site - Parte III - Episódio 3 de 3 Até lá. :)
  • 11. Se logue ou se registre para poder enviar comentários 4408 leituras Parabens e uma duvida... Enviado por vtpa em seg, 12/07/2009 - 10:14. Bem, primeiramente parabéns pela serie de tutoriais.. realmente muito bom! A minha duvida é exatamente sobre as views... onde ficam os códigos html? dentro de um arquivo com o mesmo nome e com alguma extensão padrão (tipo .php ou .html) em qual pasta? ou no Banco de Dados, ou em algum outro lugar? Desculpe, talvez seja uma pergunta básica, mas nao podia deixar de perguntar! Obrigado e mais uma vez parabéns, aguardo o próximo tuto! ^^ www.viniciusalmeida.com.br Se logue ou se registre para poder enviar comentários Resposta e outra dúvida Enviado por NeiPCs em sex, 12/11/2009 - 03:23. Sobre a organização das views eu entendi: Extensão: .php Local: /private/application/views Quando ele menciona v_produto por exemplo, é uma view, logo deve ser criada na pasta acima, com o nome v_produto.php. Ao passo que c_produtos é um controller, e deve ser criado na pasta /private/application/controllers com o nome c_produtos.php A menção da pasta "private" é supondo que você está usando uma pasta remota via FTP / Painel de controle do seu site. ----- Acessando o link do controller, me dá este erro: Fatal error: Using $this when not in object context in /home/meuusuario/private/application/controllers/c_produtos.php on line 4 Meu c_produtos.php esta assim: 1. <?php 2. $data['titulo'] = "Os nossos produtos"; 3. $data['main'] = 'v_produto'; 4. $this->load->vars($data); 5. $this->load->view('geral_tpl'); 6. ?>
  • 12. O que será que eu fiz de errado? Se logue ou se registre para poder enviar comentários c_produtos - Corrigindo erro Enviado por manives em sab, 11/06/2010 - 23:45. Olá NeiPCs! Também sou novo no CI, mas estudando é que e praticando é que se desenvolve o conhecimento. O que faltou no seu controller foi declarar o escopo dentro de uma classe c_produtos. 1. <?php 2. class c_produtos extends Controller { 3. 4. function index() 5. { 6. $data['titulo'] = "Os nossos produtos"; 7. $data['main'] = 'v_produto' 8. $this->load->view('geral_tpl',$data); 9. } 10. } 11. ?> 12. 13. Se você não colocar, $this->load->vars($data); as variáveis também ficam disponíveis na memória. 14. 15. Minha primeira contribuição para o fórum. 16. 17. Abraços, 18. Manoel Carvalho. Manoel Carvalho Desenvolvedor Web Se logue ou se registre para poder enviar comentários Tente fazer de outra maneira Enviado por siclaudio-acara em qui, 02/04/2010 - 13:42. tente fazer desta maneira. 1. $this->load->view('geral_tpl',$data);