Jump to content

Recommended Posts

Posted

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

Posted (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 by taviroquai
Posted

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

Posted

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.

Posted (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 by doxy
Posted (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 by taviroquai
Posted (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 by doxy
Posted (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 by doxy

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.