I am working on the news section example as demonstrated in the link below:
http://www.codeigniter.com/userguide2/tutorial/news_section.html
It contains two functions in the controller index and view.
When I remove the view function from my controller even then I get the same output. Can any one of you help me understanding the need of function view in the controller?
<?php
class News extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('news_model');
}
public function index()
{
$data['news'] = $this->news_model->get_news();
$data['title'] = 'News archive';
$this->load->view('templates/header', $data);
$this->load->view('news/index', $data);
$this->load->view('templates/footer');
}
public function view($slug)
{
$data['news_item'] = $this->news_model->get_news($slug);
if (empty($data['news_item']))
{
show_404();
}
$data['title'] = $data['news_item']['title'];
$this->load->view('templates/header', $data);
$this->load->view('news/view', $data);
$this->load->view('templates/footer');
}
}
How CodeIgniter URLS work is the following:
example.com/controller/method/param1[/param2...]
From: http://www.codeigniter.com/userguide2/general/urls.html
When you go to yoursite.com/news, it automatically runs the index() function. But, what if you went to yoursite.com/news/view/1234?
Then it would run your view() function and pass '1234' as a parameter ($slug).
Related
I'm following the Codeigniter tutorial: http://localhost:8080/myproject/user_guide/tutorial/news_section.html
When i point my browser to http://localhost:8080/myproject/news as the tutorial indicates at the final of the section, "Point your browser to your document root, followed by index.php/news and watch your news page." appears a blank page.
I tried to point to localhost:8080/index.php/news or /myproject/news but occurs the same problem.
Also i tried to set in autoload.php the next: $autoload['libraries'] = array('database');
as is indicated in codeigniter news section tutorial not working but not solve, so i leave it like this: $autoload['libraries'] = array('');
This is the routes:
$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';
The News.php:
<?php
class News extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('news_model');
$this->load->helper('url_helper');
}
public function index()
{
$data['news'] = $this->news_model->get_news();
}
public function view($slug = NULL)
{
$data['news_item'] = $this->news_model->get_news($slug);
if (empty($data['news_item']))
{
show_404();
}
$data['title'] = $data['news_item']['title'];
$this->load->view('templates/header', $data);
$this->load->view('news/view', $data);
$this->load->view('templates/footer');
}
}
the view.php:
<?php
echo '<h2>'.$news_item['title'].'</h2>';
echo $news_item['text'];
and the News_model.php:
<?php
class News_model extends CI_Model {
public function __construct()
{
$this->load->database();
}
public function get_news($slug = FALSE)
{
if ($slug === FALSE)
{
$query = $this->db->get('news');
return $query->result_array();
}
$query = $this->db->get_where('news', array('slug' =>
$slug));
return $query->row_array();
}
}
I expect to watch the news page
I Have following step by step the documentation in news section. In news, CI can open data from database. in database there are 2 data like this
Put news data from database
In there, there is view article link. but after click the link, CI open error 404 like this
News Item from View article
can help me to solve the problem? i'm sorry my english is bad
News_model.php
<?php
class News_model extends CI_Model {
public function __construct()
{
$this->load->database();
}
public function get_news($slug = FALSE)
{
if ($slug === FALSE)
{
$query = $this->db->get('news');
return $query->result_array();
}
$query = $this->db->get_where('news', array('slug' => $slug));
return $query->row_array();
}
}
Controller (News.php)
<?php
class News extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('news_model');
}
public function index()
{
$data['news'] = $this->news_model->get_news();
$data['title'] = 'News archive';
$this->load->view('templates/header', $data);
$this->load->view('news/index', $data);
$this->load->view('templates/footer');
}
public function view($slug)
{
$data['news'] = $this->news_model->get_news($slug);
if (empty($data['news_item']))
{
show_404();
}
$data['title'] = $data['news_item']['title'];
$this->load->view('templates/header', $data);
$this->load->view('news/view', $data);
$this->load->view('templates/footer');
}
}
Index.php in news View
<?php foreach ($news as $news_item): ?>
<h2><?php echo $news_item['title'] ?></h2>
<div id="main">
<?php echo $news_item['text'] ?>
</div>
<p>View article</p>
<?php endforeach ?>
view.php in view
<?php
echo '<h2>'.$news_item['title'].'</h2>';
echo $news_item['text'];
You haven't completed the "Routing" section at the end of that tutorial.
Also, don't start learning with CodeIgniter 2.x - it's no longer supported - go for version 3 instead.
Hey guys im learning codeigniter and im on the news tutorial. Im pretty much finished but my view method is showing 404 rather than the news itself. I've tried to debug with the following code
echo '<pre>';
var_dump($this->news_model->get_news($slug));
exit();
and that returns
NULL
heres how my controller works thats calling the method
<?php
class News extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->model('news_model');
}
public function index() {
//echo '<pre>';
//var_dump($this->news_model->get_news());
//exit();
$data['news'] = $this->news_model->get_news();
$data['title'] = 'News archive';
$this->load->view('templates/header',$data);
$this->load->view('news/index',$data);
$this->load->view('templates/footer');
}
public function view($slug) {
//echo '<pre>';
//var_dump($this->news_model->get_news($slug));
//exit();
$data['news'] = $this->news_model->get_news($slug);
if (empty($data['news_item'])) {
show_404();
}
$data['title'] = $data['news_item']['title'];
$this->load->view('templates/header',$data);
$this->load->view('news/view',$data);
$this->load->view('templates/footer');
}
}
im still a beginner so my debugging solutions are limited.
$data['news'] = $this->news_model->get_news($slug);
should be
$data['news_item'] = $this->news_model->get_news($slug);
according to the rest of your code.
don't use $slug, the tutorial $slug set true when you insert data from set_news but i don't understand why the attribute type varchar slug can save boolean type. Here the code to set variable $slug and all attribute to db. Here the code of controller news
public function set_news()
{
$this->load->helper('url');
$slug = url_title($this->input->post('title'), 'dash', TRUE);
$data = array(
'title' => $this->input->post('title'),
'slug' => $slug,
'text' => $this->input->post('text')
);
return $this->db->insert('news', $data);
}
edit the code of method view to
public function view($slug = NULL)
{
$data['news'] = $this->news_model->get_news();
//echo print_r($data['news_item']['0']['title'], true);
if (empty($data['news']))
{
show_404();
}
$data['title'] = $data['news']['0']['title'];
$this->load->view('templates/header', $data);
$this->load->view('news/view', $data);
$this->load->view('templates/footer');
}
and edit the views/news/view.php to
<?php foreach ($news as $news_item): ?>
<h3><?php echo $news_item['title']; ?></h3>
<div class="main">
<?php echo $news_item['text']; ?>
</div>
<p>View article</p><?php endforeach; ?>
I wrote a small application from CodeIgnitor user guide but when I run it, display the given message
Fatal error: Call to a member function get_news() on a non-object in C:\xampp\htdocs\CodeIgniter_Practice\application\controllers\news.php on line 11
The code is
class News extends CI_Controller{
public function _construct()
{
parent::_construct();
$this->load->model('news_model');
}
public function index()
{
$data['news'] = $this->news_model->get_news();
$data['title'] = 'News archive';
$this->load->view('templates/header',$data);
$this->load->view('news/index',$data);
$this->load->view('templates/footer');
}
}
Line 11 is :
$data['news'] = $this->news_model->get_news();
By looking at your code, i could see that you've missed one '_'(underscore) while defining your construct.
It has to be as below:
public function __construct()
{
parent::__construct();
$this->load->model('news_model');
}
You can call your model by getting your Instance as well:
class News extends CI_Controller{
public function __construct()
{
parent::__construct();
$this->CI = & get_instance();
$this->CI->load->model('news_model');
}
public function index()
{
$data['news'] = $this->CI->news_model->get_news();
$data['title'] = 'News archive';
$this->load->view('templates/header',$data);
$this->load->view('news/index',$data);
$this->load->view('templates/footer');
}
}
Hello I am pretty new to codeIgniter and I've created a contact page with controller and a view.. the only problem is that I don't get anything when I go to the link http://www.mydomain.nl/index.php/contact
My controller is as follows
<?php
class Contact extends CI_Controller {
public function index()
{
$this->load->helper('form');
$this->load->library('form_validation');
$data['title'] = 'Contact';
$this->form_validation->set_rules('name', 'Naam', 'trim|required');
$this->form_validation->set_rules('beschrijving', 'Beschrijving', 'trim');
$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email')
if ($this->form_validation->run() === FALSE)
{
$this->load->view('templates/header', $data);
$this->load->view('contact/index');
$this->load->view('templates/footer');
}
else
{
$this->load->view('templates/header', $data);
$this->load->view('contact/formsucces');
$this->load->view('templates/footer');
}
}
}
with this controller i've also created a folder in my view called contact
in this folder i've got 2 files the index.php and a formsucces.php for when the form is beeing submitted.
My question is what am i doing wrong? i've looked all the examples I could find but nothing helps..
edit: added more code
This is a controller for the news section. the controller and the view is the same as the contact controller and view.
<?php
class News extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('news_model');
}
public function index()
{
$data['news'] = $this->news_model->get_news();
$data['title'] = 'News archive';
$this->load->view('templates/header', $data);
$this->load->view('news/index', $data);
$this->load->view('templates/footer');
}
and to be really really sure that my directory, paths etc are correct here is the print screen of my directory