LAB 10 Programação com o framework CodeIgniter [parte 2] O objectivo deste laboratório é repetir a funcionalidade do site desenhado nos labs 5, 6, e 7 mas agora construído com o framework CodeIgniter e a template engine Smarty. Assume-se aqui que já realizou com sucesso o LAB9. 1. Construa o template register_template.tpl adaptando o template register_template.html realizado no LAB5 O template deve ser colocado na pasta public_html/lab9_10/application/views/templates O código PHP do controlador responsavel pela página de registo deverá encontrar-se na função register() dentro do ficheiro que define a classe do controlador (public_html/lab9_10/application/controllers/blog.php) public function register() $this->load->library('form_validation');... LabCodeigniter2 1/7
if ($this->form_validation->run() === FALSE) $this->smarty->view('register_template.tpl', $data); $this->blog_model->register_user(); $data['message']="success: New user registered ; $this->smarty->view('message_template.tpl'); Apresenta-se acima um esboço deste controlador. Adicione o código necessário para: O controlador é simultâneamente o controlador do template register_template e da acção register O controlador utiliza a livraria form_validation para validar os dados introduzidos O controlador utiliza a função register_user() para actualizar a base de dados O controlador carrega o template message_template em caso de sucesso no registo (sugere-se a mensagem Success: New user registered ) 2. O controlador trabalha em colaboração com a classe responsavel pelo acesso à base de dados (public_html/lab9_10/application/models/blog_model.php). Construa a função register_user() responsável pela query à base de dados public function register_user() $pass1_utilizador = $this->input->post('pass1_utilizador'); /*md5('$pass') -> encripta a password*/ $passwd = substr(md5($pass1_utilizador),0,32); /*Guarda os dados do Cliente*/ $present_date = date("y-m-d H:i:s"); $query = "... return $this->db->query($query); 3. Utilizando o template login_template.tpl pretende-se construir a página de login no site. Adapte o template login_template.html realizado no LAB6. LabCodeigniter2 2/7
O código PHP do controlador responsavel pela página de login deverá encontrar-se na função login() public function login() 4. O código PHP do controlador responsavel pela acção de login deverá encontrar-se na função login_action() public function login_action() $tupple = $this->blog_model->validate_user(); if (isset($tupple))... $data['message'] = 'Welcome back!' ; $this->smarty->view('message_template.tpl', $data); $data['message'] = 'Login failed' ; $this->smarty->view('login_template.tpl', $data); Apresenta-se acima um esboço deste controlador. Adicione o código necessário para: LabCodeigniter2 3/7
Em caso de sucesso guardar no array de sessão o id, nome e email do utilizador validado Em caso de sucesso carregar o template 'message_template' (sugere-se Welcome back! ) Em caso de insucesso carregar novamente o template 'login_template' com a mensagem Login failed 5. Utilizando o template blog_template.tpl pretende-se construir a página de criar/alterar blog no site. Adapte o template blog_template.html realizado no LAB7. O código PHP do controlador responsavel pela página de registo deverá encontrar-se na função post($blog_id) public function post($blog_id = FALSE)... if ($blog_id) $tupple = $this->blog_model->get_blog($blog_id); $data['content'] = $tupple->content; $data['blog_id'] = $blog_id; $this->load->library('form_validation');... if ($this->form_validation->run() === FALSE) $this->smarty->view('blog_template.tpl', $data); if ($blog_id == FALSE) LabCodeigniter2 4/7
$this->blog_model->new_blog(); $this->blog_model->update_blog($blog_id); redirect('/blog'); Apresenta-se acima um esboço deste controlador. Adicione o código necessário para: O controlador é simultâneamente o controlador do template blog_template e da acção post O controlador utiliza a livraria form_validation para validar o texto introduzido O controlador utiliza a função new_blog() para inserir na base de dados o novo post O controlador utiliza as funções get_blog($blog_id) e update_blog($blog_id) para actualizar a base de dados com o texto actualizado do post O controlador redirecciona para a pagina de rosto 6. Construa as funções new_blog(), get_blog($blog_id), update_blog($blog_id), responsaveis pelas queries corresponentes à base de dados 7. Construa a função que destroi a sessão quando o utilizador faz logout. O controlador carrega o template 'message_template' (sugere-se See you back soon! ), e que ao fim de 5 segundos redirecciona para a página de rosto) public function logout() $data['name'] = $_SESSION['name'] ; $this->session->sess_destroy(); $data['message'] = 'See you back soon!' ; $this->smarty->view('message_template.tpl', $data); 3. Se realizou o lab no seu computador pessoal, faça o upload dos ficheiros Blog.php Blog_model.php LabCodeigniter2 5/7
para os directorios application/controllers e application/models respectivamente na pasta LAB9_10 no seu site web pessoal, bem como dos templates para o directório application/views/templates. Teste o funcionamento do site no url * http://all.deei.fct.ualg.pt/~a12345/lab9_10/index.php/blog Considere o lab concluído quando obtiver a mesma funcionalidade que foi requerida nos LAB5, LAB6, e LAB7.(Nota: a funcionalidade Remember Me do LAB8 é opcional.) REFERÊNCIAS: http://all.deei.fct.ualg.pt/~a999990/ci_exame2/blog http://www.codeigniter.com/user_guide/tutorial/index.html https://www.tutorialspoint.com/codeigniter/ http://intranet.deei.fct.ualg.pt/daw/codeigniter.pdf http://all.deei.fct.ualg.pt/codeigniter/ * NOTA: o site http://intranet.deei.fct.ualg.pt/~a12345/lab9_10/index.php/blog NÃO corre código CodeIgniter LabCodeigniter2 6/7
ANEXO 1 : estrutura da base de dados A estrutura da base de dados pode ser consultada em http://all.deei.fct.ualg.pt/phpmyadmin CREATE TABLE `users` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) default NULL, `email` varchar(255) default NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, `password_digest` varchar(255) default NULL, `remember_digest` varchar(255) default NULL, `admin` tinyint(1) default NULL, `activation_digest` varchar(255) default NULL, `activated` tinyint(1) default NULL, `activated_at` datetime default NULL, `reset_digest` varchar(255) default NULL, `reset_sent_at` datetime default NULL, PRIMARY KEY (`id`), UNIQUE KEY `index_users_on_email` (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `microposts` ( `id` int(11) NOT NULL auto_increment, `content` text, `user_id` int(11) default NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, PRIMARY KEY (`id`), CONSTRAINT FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; LabCodeigniter2 7/7