doxy Posted October 5, 2012 at 02:12 PM Report #477862 Posted October 5, 2012 at 02:12 PM Boa tarde caros amigos, A minha dúvida é a seguinte: Estou a construir um site com o codeigniter (php). E tenho por exemplo uma BD com a tabela NOTICIAS e tem idNoticias, excertoNoticia, noticiaCompleta e ImagemNoticia. E na minha página HOME estou a mostrar as imagens de uma noticia e a frente o excerto da noticia, e assim sucessivamente para cada noticia. Agora, O que eu queria e não consigo fazer é: Carregar no excerto dessas notícias (que estão na página HOME.php) e abrir a página NOTICIAS.php onde mostrasse a notícia completa associada a esse excerto bem com a respectiva imagem. Como faço isto? Um abraço
taviroquai Posted October 5, 2012 at 02:19 PM Report #477863 Posted October 5, 2012 at 02:19 PM (edited) Viva, Podes no mesmo ficheiro HOME.php ter uma função para mostrar a noticia completa Nesse controlador home cria uma função: function noticia($id) { // ler noticia da base de dados // carregar view para mostrar a noticia completa } Na url terá o link para a noticia completa com /index.php/home/noticia/1 onde 1 é o id da notícia Edited October 5, 2012 at 02:19 PM by taviroquai
doxy Posted October 5, 2012 at 03:37 PM Author Report #477878 Posted October 5, 2012 at 03:37 PM Desde já o meu obrigado pela resposta... Então deixa ver se percebi.. Meto a função a mostrar a notícia completa mas na realidade não a faço aparecer não é... Mas através desse id, consigo depois fazer um consulta consoante esse id? é que eu tenho uma view chamada home.php e outra view chamada noticia.php. Mesmo assim estou confuso.. :S
taviroquai Posted October 5, 2012 at 03:44 PM Report #477881 Posted October 5, 2012 at 03:44 PM Meto a função a mostrar a notícia completa mas na realidade não a faço aparecer não é... Sim, só quando abrires no browser o caminho /index.php/home/noticia/1 é que a função é executada. Mas através desse id, consigo depois fazer um consulta consoante esse id? Sim, com esse id fazes a consulta a base de dados é que eu tenho uma view chamada home.php e outra view chamada noticia.php. Então deves usar essa view noticia.php nessa função que te indiquei.
doxy Posted October 5, 2012 at 03:59 PM Author Report #477882 Posted October 5, 2012 at 03:59 PM (edited) vou te mostrar o meu código amigo este é a função (no controlador) para a Home para mostrar as notícas public function index() { //$this->load->view('home'); //$config['main']='home'; $this->load->model('bd_geral'); $this->load->library('pagination'); $config['total_rows'] = $this->bd_geral->get_All_News_Rows(); $config['base_url'] = base_url().'geral/index'; $config['per_page'] = 3; $config['num_links'] = 5; $config['uri_segment'] = 3; $config['full_tag_open'] = ' '; $config['full_tag_close'] = ' ';[code] $config['cur_tag_open'] = '';$config['cur_tag_close'] = '';$config['next_link'] = 'Seguinte';$config['prev_link'] = 'Anterior';$config['display_pages'] = TRUE;$config['use_page_numbers'] = FALSE;$this->pagination->initialize($config);$data['news'] = $this->bd_geral->get_all_news($config['per_page'], $this->uri->segment('3'));$this->template(NULL,$data);}[/code] Na função das notícias (no controlador) tenho apenas isto por enquanto : public function noticias() { $config['main']= 'noticias'; $config['img'] = 'template/img_noticias'; $this->template($config, NULL); } No model tenho isto na parte do home para mostrar as noticias: public function get_all_news($perpage, $segment) { $data = array(); $this->db->select('*'); $this->db->order_by("data", "desc"); $query = $this->db->get('noticias',$perpage, $segment); if($query->num_rows() > 0) { foreach ($query->result() as $row) { $data[] = $row; } return $data; } } public function get_All_News_Rows() { return $this->db->get('noticias')->num_rows; } Então dizes para a função que ja tinha feito fazer assim: public function noticias($id) { $this->load->model('bd_geral'); $data ['notice'] = $this->bd_geral->get_noticias(); $this->template($config,$data); } e meto isto dentro da funcao index?? será? mas nao estou a visualizar com vai ter o $id... bem sou mesmo compreensão lenta... :S Edited October 5, 2012 at 03:53 PM by doxy
taviroquai Posted October 5, 2012 at 04:16 PM Report #477891 Posted October 5, 2012 at 04:16 PM (edited) Na função noticias($id) supostamente queres mostrar apenas 1 noticia completa certo? Já vi que tens um model onde devolves todas as noticias... mas agora precisas de uma função no model onde devolvas apenas 1 noticia. Consulta a documentação em http://codeigniter.com/user_guide/database/active_record.html No model cria uma função algo assim: public function get_noticia($id) { $data = array(); $this->db->select('*'); $query = $this->db->get_where('noticias', array('id' => $id)); // é aqui que obtens apenas 1 notícia! if ($query->num_rows() > 0) { foreach ($query->result() as $row) { $data[] = $row; } return $data; } } Depois a tua função noticia no controlador fica assim: public function noticias($id) { // carregar o model $this->load->model('bd_geral'); // usar o model para ler a noticia da base de dados com base no $id $data ['noticia'] = $this->bd_geral->get_noticia($id); // carregar a view para mostrar a noticia $this->load->view('noticia', $data); } Isto é muito básico, se tiveres dificuldades continua a ler a documentação e faz as coisas com calma... Edited October 5, 2012 at 04:20 PM by taviroquai
doxy Posted October 5, 2012 at 06:06 PM Author Report #477907 Posted October 5, 2012 at 06:06 PM (edited) Obrigado amigo.. vamos lá ver se consigo 🙂 porque a ideia é sempre que clico na noticia da home ele ficar com o id dessa noticia para usar na view noticias 😉 Eu já uma vez tentei fazer uma query dessa forma mas nunca consigo.. ele devolveu-me o seguinte erro: Um erro que o PHP foi encontrado Gravidade: Aviso Mensagem: Falta argumento 1 para Geral :: noticias () Filename: controllers / geral.php Número da linha: 181 Um erro que o PHP foi encontrado Gravidade: Aviso Mensagem: Undefined variable: id Filename: controllers / geral.php Número da linha: 187 Na linha 181 do controlador tenho: public function noticias($id) Na linha 187 tenho: $data ['noticias'] = $this->bd_geral->get_noticias($id); Edited October 5, 2012 at 06:03 PM by doxy
taviroquai Posted October 6, 2012 at 12:21 AM Report #477966 Posted October 6, 2012 at 12:21 AM Esse erro acontece quando não colocas o ID na URL. Consulta a documentação em http://codeigniter.com/user_guide/general/urls.html Tens que passar o ID na URL, por exemplo, /index.php/home/noticias/10
doxy Posted October 7, 2012 at 01:31 AM Author Report #478101 Posted October 7, 2012 at 01:31 AM (edited) hmm vou tentar amigo... eu não sei usar ainda muito bem isto.. vamos la ver se consigo.. Já digo algo 🙂 Obrigado pela dica.. se houver mais alguma dica por aí... 😄 Tenho de usar uma query string para isso não é? Não ficar um url muito estranho depois? Edited October 7, 2012 at 11:18 AM by doxy
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now