I am stuck with this problem. I get 404 error when try to access admin pages in codeigniter, I can only access the fronted pages. Here you have my route.php file:
$route['default_controller'] = "page";
$route['404_override'] = '';
$route[':any'] = "page/index/$1"; **WORKS**
$route['admin/page'] = "admin/page"; **WORKS**
$route['admin/page/order'] = "admin/page/order"; **NOT WORKING** <!-- this i my issue -->
$route['admin/page/edit'] = "admin/page/edit"; **WORKS**
$route['admin/page/edit/(:num)'] = "admin/page/edit/$1"; **NOT WORKING** <!-- this i my issue -->
Admin Controller
class Admin_Controller extends MY_Controller
{
function __construct ()
{
parent::__construct();
$this->data['meta_title'] = 'My awesome CMS';
$this->load->helper('form');
$this->load->library('form_validation');
$this->load->library('session');
$this->load->model('user_m');
// Login check
$exception_uris = array(
'admin/user/login',
'admin/user/logout'
);
if (in_array(uri_string(), $exception_uris) == FALSE) {
if ($this->user_m->loggedin() == FALSE) {
redirect('admin/user/login');
}
}
}
}
Frontend pages format
http://www.my_site.com/index.php/about
Backend format
http://www.my_site.com/admin/page
http://www.my_site.com/index.php/admin/page/edit/1
Please, can anyone help me? Thanks in advance.
Guys thanks for the reply Here you have my Page Admin Controller and also I have amended the route.php above.
<?php
class Page extends Admin_Controller
{
public function __construct ()
{
parent::__construct();
$this->load->model('page_m');
}
public function index ()
{
// Fetch all pages
$this->data['pages'] = $this->page_m->get_with_parent();
// Load view
$this->data['subview'] = 'admin/page/index';
$this->load->view('admin/_layout_main', $this->data);
}
public function order ()
{
$this->data['sortable'] = TRUE;
$this->data['subview'] = 'admin/page/order';
$this->load->view('admin/_layout_main', $this->data);
}
public function order_ajax ()
{
// Save order from ajax call
if (isset($_POST['sortable'])) {
$this->page_m->save_order($_POST['sortable']);
}
// Fetch all pages
$this->data['pages'] = $this->page_m->get_nested();
// Load view
$this->load->view('admin/page/order_ajax', $this->data);
}
public function edit ($id = NULL)
{
// Fetch a page or set a new one
if ($id) {
$this->data['page'] = $this->page_m->get($id);
count($this->data['page']) || $this->data['errors'][] = 'page could not be found';
}
else {
$this->data['page'] = $this->page_m->get_new();
}
// Pages for dropdown
$this->data['pages_no_parents'] = $this->page_m->get_no_parents();
// Set up the form
$rules = $this->page_m->rules;
$this->form_validation->set_rules($rules);
// Process the form
if ($this->form_validation->run() == TRUE) {
$data = $this->page_m->array_from_post(array(
'title',
'slug',
'body',
'template',
'parent_id'
));
$this->page_m->save($data, $id);
redirect('admin/page');
}
// Load the view
$this->data['subview'] = 'admin/page/edit';
$this->load->view('admin/_layout_main', $this->data);
}
public function delete ($id)
{
$this->page_m->delete($id);
redirect('admin/page');
}
public function _unique_slug ($str)
{
// Do NOT validate if slug already exists
// UNLESS it's the slug for the current page
$id = $this->uri->segment(4);
$this->db->where('slug', $this->input->post('slug'));
! $id || $this->db->where('id !=', $id);
$page = $this->page_m->get();
if (count($page)) {
$this->form_validation->set_message('_unique_slug', '%s should be unique');
return FALSE;
}
return TRUE;
}
}
Front End Page Controller
<?php
class Page extends Frontend_Controller{
public function __construct(){
parent::__construct();
$this->load->model('page_m');
}
public function index(){
// Fetch the page template
$this->data['page'] = $this->page_m->get_by(array('slug' => (string) $this->uri->segment(1)), TRUE);
count($this->data['page']) || show_404(current_url());
// Fetch the page data
$method = '_' . $this->data['page']->template;
if (method_exists($this, $method)) {
$this->$method();
}
else {
log_message('error', 'Could not load template ' . $method .' in file ' . __FILE__ . ' at line ' . __LINE__);
show_error('Could not load template ' . $method);
}
//Fetch the view
$this->data['subview'] = $this->data['page']->template;
$this->load->view('_main_layout', $this->data);
}
private function _page(){
dump('welcome from the page template');
}
private function _homepage(){
$this->load->model('article_m');
$this->db->where('pubdate <=', date('Y-m-d'));
$this->db->limit(6);
$this->data['articles'] = $this->article_m->get();
}
private function _news_archive(){
$this->load->model('article_m');
// Count all articles
$this->db->where('pubdate <=', date('Y-m-d'));
$count = $this->db->count_all_results('articles');
// Set up pagination
$perpage = 4;
if ($count > $perpage) {
$this->load->library('pagination');
$config['base_url'] = site_url($this->uri->segment(1) . '/');
$config['total_rows'] = $count;
$config['per_page'] = $perpage;
$config['uri_segment'] = 2;
$this->pagination->initialize($config);
$this->data['pagination'] = $this->pagination->create_links();
$offset = $this->uri->segment(2);
}
else {
$this->data['pagination'] = '';
$offset = 0;
}
// Fetch articles
$this->db->where('pubdate <=', date('Y-m-d'));
$this->db->limit($perpage, $offset);
$this->data['articles'] = $this->article_m->get();
}
}
Hope you can have help me Thanks
I dont see any routes nor URLs that point to your Admin_Controller
. If a user types http://.../admin/page
Codeigniter will try to look for a controller named Admin
not Admin_controller
unless you have routes set up.
Also, you have this route: $route[':any'] = "page/index/$1";
This route will take any URL given and redirect the user to the Page
controller (which you have not provided any code on). I would get rid of it, or what is its function?
What you need to decide is whether your admin URL should be this: http://www.my_site.com/admin/page
or this: http://www.my_site.com/admin_controller/page
Personally I would choose the first one since it looks cleaner. Which then means you have to decide whether your controller should stay named as Admin_Controller
or just Admin
. I would chose Admin
so that you dont have to deal with routes.
The final result should be this:
Your admin URL: http://www.my_site.com/admin/page
Your Controller: application/controllers/Admin.php
class Admin extends MY_Controller {
public function __construct() {
//... your code here
}
public function page() {
//... your code here
}
}