• Nenhum resultado encontrado

1 Criando a área administrativa do blog

N/A
N/A
Protected

Academic year: 2021

Share "1 Criando a área administrativa do blog"

Copied!
7
0
0

Texto

(1)

1 Criando a área administrativa do blog

1.1 Adicionando registros ao banco de dados

Para adicionar novos registros ao BD, é necessário um formulário no qual possamos inserí-los e também um método que receberá esses dados e os gravará no BD.

Vamos iniciar esse processo criando um novo controller que fará o carregamento da view com o formulário das novas postagens. Este controller pode estar na pasta-raiz dos controllers, mas, por conveniência e comodidade, é preferível criar uma subpasta chamadaadministracao na qual os con- trollers da área de administração serão alocados. Isso nos permite usar controllers com o mesmo nome em hierarquias diferentes. Então, adicione este código-fonte a um controller chamadoPostagens.php emapplication/controller/administracao:

1 <? php d e f i n e d(’ B A S E P A T H ’) OR exit(’ No direct script access a l l o w e d ’) ;

2 class P o s t a g e n s e x t e n d s C I _ C o n t r o l l e r {

3 public f u n c t i o n index () {

4 $this - > load - > helper (’ form ’) ;

5 $this - > load - > view (’ a d m i n i s t r a c a o / n o v a _ p o s t a g e m ’) ;

6 }

7 }

Adicione também a subpastaadministracao à pastaviews, conforme indicado no carregamento da view. Também crie a view nova_postagem.php com este código-fonte:

1 <! D O C T Y P E html >

2 < html lang =" pt - br ">

3 < head >

4 < meta c h a r s e t=" utf -8 ">

5 < title > Meu Blog - A d m i n i s tr ação </ title >

6 </ head >

7 < body >

8 <? php

9 echo anchor ( b a s e _ u r l () ," Home ") .

10 anchor ( b a s e _ u r l(" a d m i n i s t r a c a o/ p o s t a g e n s") ," P o s t a g e n s ") .

11 anchor ( b a s e _ u r l(" a d m i n i s t r a c a o/ logout ") , " Logout ") .

12 h e a d i n g(" A d i c i o n a r uma nova p o s t a g e m",3) ;

13 $ a t r i b u t o s = array(’ name ’ = > ’ f o r m u l a r i o _ p o s t a g e m ’,

14 ’ id ’ = > ’ f o r m u l a r i o _ p o s t a g e m ’) ;

15 echo f o r m _ o p e n ( b a s e _ u r l(’ a d m i n i s t r a c a o / p o s t a g e n s/ a d i c i o n a r ’) ,

$ a t r i b u t o s ) .

16 f o r m _ l a b e l(" Título : "," t x t _ t i t u l o") . br () .

17 f o r m _ i n p u t(’ t x t _ t i t u l o ’) . br () .

18 f o r m _ l a b e l(" Texto : "," t x t _ t e x t o") . br () .

19 f o r m _ t e x t a r e a (’ t x t _ t e x t o ’) . br () .

20 f o r m _ s u b m i t(" b t n _ e n v i a r"," C a d a s t r a r nova p o s t a g e m") .

21 f o r m _ c l o s e () ;

22 ? >

23 </ body >

24 </ html >

O formulário aponta paraadministracao/postagens/adicionar. Para criar o métodoadicionar() que receberá os dados do formulário e os gravará no BD, acrescente este código-fonte ao controllerPos- tagens.php:

1 public f u n c t i o n a d i c i o n a r () {

2 $data [’ titulo ’] = $this - > input - > post (’ t x t _ t i t u l o ’) ;

3 $data [’ texto ’] = $this - > input - > post (’ t x t _ t e x t o ’) ;

4 if( $this - >db - > insert (’ p o s t a g e n s ’, $data ) ) {

5 r e d i r e c t( b a s e _ u r l(’ a d m i n i s t r a c a o / p o s t a g e n s ’) ) ;

6 }else{

7 echo " Não foi p o s s í v e l gravar a p o s t a g e m no banco de dados ";

8 }

(2)

9 }

Nesse método o framework recebe os valores do formulário e atribui ao array $dados. Os nomes dos campos na tabela do BD devem coincidir com os índices do array; no caso, titulo e texto. Então, o método insert()da biblioteca de banco de dados recebe como parâmetro o nome da tabela(postagens, neste exemplo, e os dados de $dados.

Note, ainda, que os valores para os camposid e dataCadastro da tabela postagens são gerados automaticamente pelo SGBD - O campo id por ser do tipo autoincrement edataCadastroporque a função now() do MySQL foi definida como valor default do campo.

Como exercício, adicione a validação ao formulário do mesmo modo como fizemos para o formulário de contato.

1.2 Alterando e excluindo registros do Banco de Dados

Para carregar os dados das postagens em um formulário a fim de editá-los, começaremos alte- rando a página administracao/postagens incluindo a listagem das postagens existentes abaixo do formulário de inclusão de novas postagens. Altere o métodoindex() do controlleradministracao/- Postagens.php conforme este código-fonte:

1 public f u n c t i o n index () {

2 $data [’ p o s t a g e n s ’] = $this - > db - > get (’ p o s t a g e n s ’) -> result () ;

3 $this - > load - > helper (’ form ’) ;

4 $this - > load - > view (’ a d m i n i s t r a c a o/ n o v a _ p o s t a g e m ’, $data ) ;

5 }

Então é necessário alterar a view nova_postagem.php em views/administracao para que mostre os registros já existentes:

1 <! D O C T Y P E html >

2 < html lang =" pt - br ">

3 < head >

4 < meta c h a r s e t=" utf -8 ">

5 < title > Meu Blog - A d m i n i s tr ação </ title >

6 </ head >

7 < body >

8 <? php

9 echo anchor ( b a s e _ u r l () ," Home ") .

10 anchor ( b a s e _ u r l(" a d m i n i s t r a c a o/ p o s t a g e n s") ," P o s t a g e n s ") .

11 anchor ( b a s e _ u r l(" a d m i n i s t r a c a o/ logout ") , " Logout ") .

12 h e a d i n g(" A d i c i o n a r uma nova p o s t a g e m",3) ;

13 $ a t r i b u t o s = array(’ name ’ = > ’ f o r m u l a r i o _ p o s t a g e m ’,

14 ’ id ’ = > ’ f o r m u l a r i o _ p o s t a g e m ’) ;

15 echo f o r m _ o p e n ( b a s e _ u r l(’ a d m i n i s t r a c a o / p o s t a g e n s/ a d i c i o n a r ’) ,

$ a t r i b u t o s ) .

16 f o r m _ l a b e l(" Título : "," t x t _ t i t u l o") . br () .

17 f o r m _ i n p u t(’ t x t _ t i t u l o ’) . br () .

18 f o r m _ l a b e l(" Texto : "," t x t _ t e x t o") . br () .

19 f o r m _ t e x t a r e a (’ t x t _ t e x t o ’) . br () .

20 f o r m _ s u b m i t(" b t n _ e n v i a r"," C a d a s t r a r nova p o s t a g e m") .

21 f o r m _ c l o s e () .

22 h e a d i n g(" P o s t a g e n s e x i s t e n t e s",3) ;

23 f o r e a c h( $ p o s t a g e n s as $post ) {

24 echo anchor ( b a s e _ u r l(" a d m i n i s t r a c a o/ p o s t a g e n s/ e x c l u i r/ ". $post - >

id ) ,

25 " E x c l u i r - ") .

(3)

26 anchor ( b a s e _ u r l(" a d m i n i s t r a c a o/ p o s t a g e n s/ a l t e r a r/ ". $post - >

id ) ,

27 " A l t e r a r - ") .

28 " P o s t a g e m: " . date(" d / m / Y ", s t r t o t i m e( $post - > d a t a C a d a s t r o ) ) .

29 " - " . $post - > titulo . br () ;

30 }

31 ? >

32 </ body >

33 </ html >

Para que seja possível editar uma postagem, é necessário ler seus dados no BD e carregá-los em um formulário. Adicione o método alterar()ao controller administracao/Postagens.php:

1 public f u n c t i o n a l t e r a r( $id ) {

2 $this - >db - > where (’ id ’, $id ) ;

3 $data [’ p o s t a g e m ’] = $this - >db - > get (’ p o s t a g e n s ’) -> result () ;

4 $this - > load - > helper (’ form ’) ;

5 $this - > load - > view (’ a d m i n i s t r a c a o/ a l t e r a r _ p o s t a g e m ’, $data ) ;

6 }

Adicione a viewadministracao/alterar_postagem.php conforme esse código-fonte:

1 <! D O C T Y P E html >

2 < html lang =" pt - br ">

3 < head >

4 < meta c h a r s e t=" utf -8 ">

5 < title > Meu Blog - A d m i n i s tr ação </ title >

6 </ head >

7 < body >

8 <? php

9 echo anchor ( b a s e _ u r l () ," Home ") .

10 anchor ( b a s e _ u r l(" a d m i n i s t r a c a o/ p o s t a g e n s") ," P o s t a g e n s ") .

11 anchor ( b a s e _ u r l(" a d m i n i s t r a c a o/ logout ") , " Logout ") .

12 h e a d i n g(" A d i c i o n a r uma nova p o s t a g e m",3) ;

13 $ a t r i b u t o s = array(’ name ’ = > ’ f o r m u l a r i o _ p o s t a g e m ’,

14 ’ id ’ = > ’ f o r m u l a r i o _ p o s t a g e m ’) ;

15 echo f o r m _ o p e n ( b a s e _ u r l(’ a d m i n i s t r a c a o / p o s t a g e n s/ s a l v a r _ a l t e r a c a o ’) ,

16 $ a t r i b u t o s) .

17 f o r m _ h i d d e n(’ id ’, $ p o s t a g e m [0] - > id ) .

18 f o r m _ l a b e l(" Título : "," t x t _ t i t u l o") . br () .

19 f o r m _ i n p u t(’ t x t _ t i t u l o ’, $ p o s t a g e m [0] - > titulo ) . br () .

20 f o r m _ l a b e l(" Texto : "," t x t _ t e x t o") . br () .

21 f o r m _ t e x t a r e a (’ t x t _ t e x t o ’, $ p o s t a g e m [0] - > texto ) . br () .

22 f o r m _ s u b m i t(" b t n _ e n v i a r"," Salvar p o s t a g e m") .

23 f o r m _ c l o s e () ;

24 ? >

25 </ body >

26 </ html >

Agora, adicione o métodosalvar_alteracao() ao controller administracao/Postagens.php:

1 public f u n c t i o n s a l v a r _ a l t e r a c a o () {

2 $data [’ titulo ’] = $this - > input - > post (’ t x t _ t i t u l o ’) ;

3 $data [’ texto ’] = $this - > input - > post (’ t x t _ t e x t o ’) ;

4 $this - >db - > where (’ id ’, $this - > input - > post (’ id ’) ) ;

5 if( $this - >db - > update (’ p o s t a g e n s ’, $data ) ) {

6 r e d i r e c t( b a s e _ u r l(’ a d m i n i s t r a c a o / p o s t a g e n s ’) ) ;

7 }else{

8 echo " Não foi p o s s í v e l gravar a a l t e r a ç ã o da p o s t a g e m no banco de dados "

;

9 }

10 }

(4)

resta ainda acrescentar o método que faz a exclusão de uma postagem. Adicione o método excluir() ao controlleradministracao/Postagens.php:

1 public f u n c t i o n e x c l u i r( $id ) {

2 $this - >db - > where (’ id ’, $id ) ;

3 if( $this - >db - >delete(’ p o s t a g e n s ’) ) {

4 r e d i r e c t( b a s e _ u r l(’ a d m i n i s t r a c a o / p o s t a g e n s ’) ) ;

5 }else{

6 echo " Não foi p o s s í v e l e x c l u i r a p o s t a g e m no banco de dados ";

7 }

8 }

1.3 Protegendo a página de administração com senha

Este exemplo é uma maneira bastante simplificada de trabalhar com sessões. Vamos adicionar o controle de acesso à área de administração exigindo a autenticação do usuário por meio de usuário e senha. O processo de controle é extremamente simples: se existir uma sessão com dados válidos, é permitido acessar a página; se não, o usuário é redirecionado para a página de login.

Vamos começar criando o controlador Login.php na pasta application/controllers/adminis- tracao com o código-fonte que fará o carregamento da view com o formulário de login.

1 <? php d e f i n e d(’ B A S E P A T H ’) OR exit(’ No direct script access a l l o w e d ’) ;

2 class Login e x t e n d s C I _ C o n t r o l l e r {

3 public f u n c t i o n index () {

4 $this - > load - > l i b r a r y(’ s e s s i o n ’) ;

5 $this - > load - > helper (’ form ’) ;

6 $this - > load - > view (’ a d m i n i s t r a c a o / login ’) ;

7 }

8 }

Crie também a viewadministracao/login.php com o formulário de login:

1 <! D O C T Y P E html >

2 < html lang =" pt - br ">

3 < head >

4 < meta c h a r s e t=" utf -8 ">

5 < title > Meu Blog - A d m i n i s tr ação </ title >

6 </ head >

7 < body >

8 <? php

9 $ a t r i b u t o s = array(’ name ’ = > ’ f o r m u l a r i o _ l o g i n ’, ’ id ’ = > f o r m u l a r i o _ l o g i n ’) ;

10 echo f o r m _ o p e n ( b a s e _ u r l(’ a d m i n i s t r a c a o / login / e f e t u a r _ l o g i n ’) ,

$ a t r i b u t o s ) .

11 f o r m _ l a b e l(" U s u á r i o: "," t x t _ u s u a r i o ") . br () .

12 f o r m _ i n p u t(’ t x t _ u s u a r i o ’) . br () .

13 f o r m _ l a b e l(" Senha : "," t x t _ s e n h a") . br () .

14 f o r m _ p a s s w o r d (’ t x t _ s e n h a ’) . br () .

15 f o r m _ s u b m i t(" b t n _ e n v i a r", " E f e t u a r Login ") .

16 f o r m _ c l o s e () ;

17 ? >

18 </ body >

19 </ html >

Para adicionar a regra que controla o login e cria a sessão, implemente o seguinte método ao controlador Login.php

1 public f u n c t i o n e f e t u a r _ l o g i n () {

2 $this - > load - > l i b r a r y(’ s e s s i o n ’) ;

3 $ u s u a r i o = $this - > input - > post (’ t x t _ u s u a r i o ’) ;

4 $senha = $this - > input - > post (’ t x t _ s e n h a ’) ;

5 if( $ u s u a r i o == " a d m i n i s t r a d o r" && $senha == " 12345 ") {

(5)

6 $array = array(" logado "= >TRUE) ;

7 $this - > session - > s e t _ u s e r d a t a ( $array ) ;

8 r e d i r e c t(" a d m i n i s t r a c a o/ p o s t a g e n s") ;

9 }else{

10 $this - > session - > s e s s _ d e s t r o y () ;

11 r e d i r e c t(" a d m i n i s t r a c a o / login ") ;

12 }

13 }

No controlador das Postagens, é necessário inserir a veriricação para checar se o usuário está ou não logado antes que ele tenha acesso a qualquer funcionalidade relativa à administração das postagens.

Uma maneira simples e efetiva de fazer essa verificação é adicionar um construtor à classe e, em seguida, o controle de acesso ao construtor.

Um construtor de uma classe é um método que será executado sempre que qualquer outro método da classe for executado ou sempre que a classe for instanciada. Dessa forma, ao acessar qualquer método da classe Postagens, ocorrerá uma checagem para verificar se o usuário está ou não logado.

Adicione o construtor antes dos demais métodos conforme este código-fonte:

1 <? php d e f i n e d(’ B A S E P A T H ’) OR exit(’ No direct script access a l l o w e d ’) ;

2 class P o s t a g e n s e x t e n d s C I _ C o n t r o l l e r {

3 public f u n c t i o n _ _ c o n s t r u c t () {

4 parent :: _ _ c o n s t r u c t () ;

5 $this - > load - > l i b r a r y(’ s e s s i o n ’) ;

6 if(! $this - > session - > u s e r d a t a(’ logado ’) ) {

7 r e d i r e c t(" a d m i n i s t r a c a o/ login ") ;

8 }

9 }

Para concluir, é necessário permitir que o usuário faça o logout do sistema. Como nosso link de logout aponta para administracao/logout, será necessário criar uma rota apontando para a classe correta e também o método de logout na classe. Acrescente esta rota ao arquivo de configuração routes.php

1 $route [’ a d m i n i s t r a c a o / logout ’] = ’ a d m i n i s t r a c a o / login / logout ’;

Agora, adicione o métodologout() ao controlador Login.php

1 public f u n c t i o n logout () {

2 $this - > load - > l i b r a r y(’ s e s s i o n ’) ;

3 $this - > session - > s e s s _ d e s t r o y () ;

4 r e d i r e c t(" a d m i n i s t r a c a o / login ") ;

5 }

Esse método destrói a sessão com$this->session->sess_destroy()e redireciona o usuário para a página de login novamente.

Os três métodos do controlador Login.php carregam a biblioteca de sessão individualmente. Isso pode ser feito uma única vez adicionando-se o carregamento da biblioteca ao construtor da classe:

1 <? php d e f i n e d(’ B A S E P A T H ’) OR exit(’ No direct script access a l l o w e d ’) ;

2 class Login e x t e n d s C I _ C o n t r o l l e r {

3 public f u n c t i o n _ _ c o n s t r u c t () {

4 parent :: _ _ c o n s t r u c t () ;

5 $this - > load - > l i b r a r y(’ s e s s i o n ’) ;

6 }

7 // Outros m é t o d o s da classe c o n t i n u a m aqui ...

Com isso, as outras chamadas à $this->load->library(’session’) nos demais métodos dessa classe podem ser eliminadas. O código fica mais limpo e organizado.

1.4 Adicionando formatação CSS ao blog

É tarefa rotineira acrescentar arquivos CSS e outros ao cabeçalho HTML de um site ou uma aplicação. O CodeIgniter permite fazer o link a arquivos externos de forma simplifica com o auxílio do HTML Helper.

(6)

Uma informação importante a ser observada é onde colocar arquivos CSS, JavaScript, de imagens etc. na estrutura física do projeto. Deve-se lembrar que esses arquivos necessariamente precisam ter acesso público, portanto é desejável separar o acesso a eles do restante da aplicação. O modo mais simples é criar uma estrutura de pastas específica para cada tipo de arquivo na raiz da aplicação, conforme mostrado na figura 1.

Figura 1: Estrutura de Pastas auxiliares para arquivos CSS, JavaScript e de imagens

Assim é possível acessar qualquer uma dessas pastas a partir da URL-base da aplicação, configurar permissão de escrita etc.

Crie uma pasta nomeada assets e sua subpasta nomeada css conforme mostrado na figura 1 e inclua o arquivo estilo.css com os seguintes estilos:

1 *{

2 font - family : ’ Roboto C o n d e n s e d ’, sans - serif ;

3 }

4 body {

5 background - color : # EFEFEF ;

6 margin : 20 px ;

7 }

8 a {

9 color : # 000;

10 text - d e c o r a t i o n : none ;

11 d i s p l a y: inline - block ;

12 p a d d i n g: 15 px ;

13 margin : 2 px ;

14 background - color : # DDD;

15 border - radius : 6 px ;

16 }

17 h1 , h2 , h3 , h4 , h5 , h6 {

18 text - align : center ;

19 border - bottom : solid 1 px # BBB;

20 }

21 p {

22 background - color : # FFF;

23 p a d d i n g: 20 px ;

24 border - radius : 6 px ;

25 }

26 ul {

27 p a d d i n g: 0 px ;

28 margin : 0 px ;

29 }

30 li {

(7)

31 list- style : none ;

32 width : 100%;

33 background - color : # DDD;

34 border - radius : 6 px ;

35 margin - bottom : 4 px ;

36 }

Então, modifique as views incluindo o link para os arquivos de estilo conforme mostrado neste trecho de código-fonte:

1 <! D O C T Y P E html >

2 < html lang =" pt - br ">

3 < head >

4 < meta c h a r s e t=" utf -8 ">

5 < title > Meu Blog </ title >

6 <? php

7 echo l i n k _ t a g(’ https :// fonts . g o o g l e a p i s. com / css ? family = Roboto + C o n d e n s e d ’) ;

8 echo l i n k _ t a g(’ assets / css/ estilo . css ’) ;

9 ? >

10 </ head >

11 < body >

Com o auxílio doHTML Helper foram inseridos dois arquivos CSS nas views: um arquivo de fonte do Google Fonts e o arquivoestilo.css.

2 Referência Bibliográfica

Exemplo extraído de:

Gabardo, Ademir C.Criando um E-Commerce com CodeIgniter. Novatec. São Paulo, 2015

Referências

Documentos relacionados

Os projetos dos cursos deverão conter: a proposta pedagógica do curso, a descrição das soluções tecnológicas de apoio ao processo de ensino-aprendizagem a serem utilizadas, o

14.1.1 Estar ciente das condições da licitação, que assume responsabilidade pela autenticidade de todos os documentos apresentados e que fornecerá quaisquer

Assim os objetivos com este estágio consistiram em entender/contactar com a realidade e a importância da Farmácia Comunitária, bem como o papel do farmacêutico

Considere o intervalo de tempo desde o instante em que as esferas iniciam a queda, após uma dada inversão, até ao instante imediatamente após a sua colisão com a base inferior do

A Ameixa Sêca do Blog Canela Moída , me perguntou se no Brasil temos o tipo de abóbora do post anterior com a receita do Doce de Gila. Ameixa, eu não sei te dizer, mas

A avaliação dos questionários aplicados aos acadêmicos mostrou que o envolvimento deles no processo de montagem de postagens para o blog trouxe benefícios, como mostrado nos

Suas imagens são profundamente marcadas pela identidade cultural da região norte do Brasil, e permitem, através de uma atmosfera que se constitui como um elo, vislumbrar

A disease of the Brazil Nut Tree (Castanheira do Pará) is reported as caused by a new species of fungus, Cercospora bertholletiae Albuquerque n.. 1 - Castanheira do Pará com