O nascimento de um site comCodeigniter - IntroOlá a todos,Decidi dar início a uma série de tutoriais à medida que vou, eu ...
O nascimento de um site comCodeigniter - Estrutura e Preparação doSite - Parte IAntes de avançar para o código, uma das pr...
/www/assets (pasta contendo os nossos ficheiros .js , .css, imagens etc... )- index.php- license.txt- .htaccess2.3)A pasta...
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 m...
Coloque-as de acordo com as necessidades do seu projecto, para não estar a ocuparrecursos desnecessariamente:   1. $autolo...
Se logue ou se registre para poder enviar comentários       6039 leiturasDeveria ta na documentação do codeigniterEnviado ...
contudo, apesar das várias formas de resolver a questão apontadas em cima, nósoptamos aqui por usar templates.1.1)Conceptu...
26.                    </div><!--EO Container-->   27.        </body>   28.        </html>1.2) A explicação - as views v_h...
Está seguindo a lógica? Espero que sim.E o nosso menu de navegação? Imaginando que temos um menu de navegação no topoda no...
Aqui nós estamos, claramente, a fazer o processo de load de uma view, dentro de outraview. Confuso? Eu acho bem simples, q...
Se logue ou se registre para poder enviar comentários        4408 leiturasParabens e uma duvida...Enviado por vtpa em seg,...
O que será que eu fiz de errado?       Se logue ou se registre para poder enviar comentáriosc_produtos - Corrigindo erroEn...
Upcoming SlideShare
Loading in...5
×

Tutorial codeigniter

5,120

Published on

Programando com Codeigniter

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
5,120
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
199
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Tutorial codeigniter

  1. 1. O nascimento de um site comCodeigniter - IntroOlá a todos,Decidi dar início a uma série de tutoriais à medida que vou, eu mesmo, desenvolvendouma 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çoherculiano, 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áriosinexperientes 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 queiralembrar alguma coisa, aqui estará. :)c) estou seguro pois, como pode haver comentários, se eu disser alguma parvoíce (oucomo 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 deexperiê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çãodo Site - Parte I
  2. 2. O nascimento de um site comCodeigniter - Estrutura e Preparação doSite - Parte IAntes de avançar para o código, uma das primeiras coisas com que teremos de tentarperceber, é 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 dedirectorias 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ãovale a pena fazer upload do user guide.1.2)Aceder à pasta system e, lá dentro, mover a pasta "application" para o mesmo nível danossa passa system.Teremos então a seguinte estrutura:/application/system- index.php- license.txt2) 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) euma pasta public_html ou www que é pública e, como tal, acessível a partir de umcliente.2.1)Decidi então aproveitar essa estrutura já existente e colocar na pasta privada o seguinte:/private/application/system2.2)Na pasta pública, decidi colocar o seguinte:
  3. 3. /www/assets (pasta contendo os nossos ficheiros .js , .css, imagens etc... )- index.php- license.txt- .htaccess2.3)A pasta controllers e views conterão uma subpasta chamada admin, onde terei ocódigo dos controladores e as views, referentes à zona de administração do site. Assim:/private/application/controllers/admin/views/admin3) CONVENÇÕESFinalmente, acho que é uma boa prática ter convenções de nomenclatura. Fazendo tudoisso sozinho, não terei responsabilidades acrescidas para mostrar o meu código a outreme 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 prontospara tratar das configurações do CI. Essas configurações, contudo, serão tratadas nonosso próximo tutorial:O nascimento de um site com Codeigniter - Estrutura e Preparação do Site - Parte IIAbraço,MárcioO nascimento de um site comCodeigniter - Estrutura e Preparação doSite - Parte IIEste tópico é também bem simples, vamos então tratar das configurações da nossaaplicaçã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. 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ódigoe menos comentário nesse tópico. Vamos a isso?.htaccess:O ficheiro .htaccess conterá o seguinte: (notem os comentários no .htaccess (quecomeç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 queiremos usar com frequencia ao longo do site:
  5. 5. Coloque-as de acordo com as necessidades do seu projecto, para não estar a ocuparrecursos 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 tutorialanterior. Ora, temos de editar o nosso index.php da seguinte forma(pelo user guide doCI, sabemos que temos de usar um fullpath) 1. $system_folder = "/home/mysite/private/system"; 2. $application_folder = "/home/mysite/private/application";application/config/database.phpFinalmente, 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 generalEste foi bem rápido e leve. Contudo, procurei ser correcto nos nomes e usar algunsnomes em inglês para que, caso algum conceito não seja claro para si, possa recorrer aum 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 ePreparação do Site - Parte III - Episódio 1 de 3ps- 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. 6. Se logue ou se registre para poder enviar comentários 6039 leiturasDeveria ta na documentação do codeigniterEnviado 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áriosOi márcio, antes de mais nadaEnviado 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çoO nascimento de um site comCodeigniter - Estrutura e Preparação doSite - Parte III - Episódio 1 de 3Olá 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 queperceber bem, como funciona isto das Views. Nesta altura, ainda não percebi tudo. Maso 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 quandoestou 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óspodemos vê-las a funcionar pois, felizmente, a gooracle está cheio de exemplos dessetipo, a dificuldade está em como estruturar essas várias views que haveremos de ter, demaneira eficiente. É na resposta a esta eficiência que esta questão se torna complicada,
  7. 7. contudo, apesar das várias formas de resolver a questão apontadas em cima, nósoptamos aqui por usar templates.1.1)Conceptualmente, deveremos imaginar um template como um molde, onde as váriaspáginas do nosso site irão se adequar. Dito isto, deveremos analisar (olhando para olayout das páginas que estamos a desenvolver) quais as partes que vão se manter e quaisvã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 parapá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. 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á-losapenas no template. Assim, de cada vez que um controlador chamar uma view, elepoderá chamar a view template que, por sua vez, chamará as views do cabeçalho e dorodapé.<?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 donosso template. Próximo episódio:O nascimento de um site com Codeigniter - Estrutura e Preparação do Site - Parte III -Episódio 2 de 3O nascimento de um site comCodeigniter - Estrutura e Preparação doSite - Parte III - Episódio 2 de 3Sim... o último episódio até foi pequeno mas, a razão para tal, deveu-se à necessidade dedar um foco maior às partes dinâmicas do template, pois elas não parecem ser assim tãofá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 - geralo nosso template não tratará apenas de chamar as views. Lembre-se, o principal dotemplate é conter toda a informação que poderá ser utilizada de igual modo, numnú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á-lodentro da head tag do nosso template? Se nós temos um javascript que poderá ser usadoem várias páginas porque não, também, colocar as suas instruções dentro do template?
  9. 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 topoda nossa página. Onde deveremos colocar ele? No template? Ou na nossa view decabeç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 asvariá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 $tituloPrimeiro o $titulo:<title><?php echo $titulo;?></title>A variável $titulo vem dos nossos controllers. Se nós tivermos falando do título dapágina de produtos, então, o nosso controller de produto, deverá ter um array onde, asua 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óspoderemos 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 asviews através do método load->vars(), e finalmente, nós podemos carregar o nosso templatecom 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 $titulovem dos nossos controladores. O plural foi propositado. Cada controlador definirá a keytitulo 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 enão outra?A resposta: Pelo URI.Estou em crer, e cada vez mais começo a notar, que o router é um elemento bempoderoso de uma Framework. Se nós tivermos um URI assim:http://www.meusite.com/c_produtos/ nós saberemos que o controlador a ser chamadoserá o dos produtos. Logo, podemos ficar descansados que, a view que será chamada eos 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 $mainAgora o $main:<?php $this->load->view($main); ?>
  10. 10. Aqui nós estamos, claramente, a fazer o processo de load de uma view, dentro de outraview. Confuso? Eu acho bem simples, quando comparado com o método de estender ocontroller. 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 $mainvirá de um controlador, certo? E saberemos mais do que isso. Saberemos que estavariá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 deuma 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 passandona 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 aextensão. Porquê o nome do ficheiro e não da classe? Porque estamos trabalhando como 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 dosnossos métodos dentro das classes.No próximo e último episódio, iremos completar o nosso template com duas coisas quesã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 3Até lá. :)
  11. 11. Se logue ou se registre para poder enviar comentários 4408 leiturasParabens 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áriosResposta e outra dúvidaEnviado por NeiPCs em sex, 12/11/2009 - 03:23.Sobre a organização das views eu entendi:Extensão: .phpLocal: /private/application/viewsQuando ele menciona v_produto por exemplo, é uma view, logo deve ser criada napasta 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.phpA 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 4Meu 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. 12. O que será que eu fiz de errado? Se logue ou se registre para poder enviar comentáriosc_produtos - Corrigindo erroEnviado 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 oconhecimento.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 CarvalhoDesenvolvedor Web Se logue ou se registre para poder enviar comentáriosTente fazer de outra maneiraEnviado por siclaudio-acara em qui, 02/04/2010 - 13:42.tente fazer desta maneira. 1. $this->load->view(geral_tpl,$data);

×