Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Separate Admin and Front in codeigniter

What is the best way to separate admin and front-end for a website in codeigniter where as I was to use all libraries, models, helpers etc. in common, but only controllers and Views will be separate.

I want a more proper way, up for performance, simplicity, and sharing models and libraries etc.

like image 791
Sohail Avatar asked Sep 22 '11 07:09

Sohail


3 Answers

I highly suggest reading the methods outlined in this article by CI dev Phil Sturgeon:

http://philsturgeon.co.uk/blog/2009/07/Create-an-Admin-panel-with-CodeIgniter

My advice: Use modules for organizing your project.

https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/wiki/Home

Create a base controller for the front and/or backend. Something like this:

// core/MY_Controller.php
/**
 * Base Controller
 * 
 */ 
class MY_Controller extends CI_Controller {
                      // or MX_Controller if you use HMVC, linked above
    function __construct()
    {
        parent::__construct();
        // Load shared resources here or in autoload.php
    }
}

/**
 * Back end Controller
 * 
 */ 
class Admin_Controller extends MY_Controller {

    function __construct()
    {
        parent::__construct();
        // Check login, load back end dependencies
    }
}

/**
 * Default Front-end Controller
 * 
 */ 
class Public_Controller extends MY_Controller {

    function __construct()
    {
        parent::__construct();
        // Load any front-end only dependencies
    }
}

Back end controllers will extend Admin_Controller, and front end controllers will extend Public_Controller. The front end base controller is not really necessary, but there as an example, and can be useful. You can extend MY_Controller instead if you want.

Use URI routing where needed, and create separate controllers for your front end and back end. All helpers, classes, models etc. can be shared if both the front and back end controllers live in the same application.

like image 107
Wesley Murch Avatar answered Nov 12 '22 01:11

Wesley Murch


I use a very simple approach: file folders. Check out the CI User Guide section, Organizing Your Controllers into Sub-folders.

I have my public-facing website built as any other would be built with CodeIgniter. Then I have two additional folders, controllers/admin and views/admin.

The admin controllers are accessed via http://[hostname]/admin/controller, and behave just as any other controller except they have specific authentication checks. Likewise, the views are simply called with the folder name included: $this->load->view('admin/theview');.

I haven't found a reason to do anything more complicated than that.

like image 20
Mike S. Avatar answered Nov 12 '22 01:11

Mike S.


You all can find complete solution over here, https://github.com/bhuban/modular

Module separation for admin and front-end using HMVC and template separation using template libraries

I am using two third party libraries, you can find it in zip file.

  1. HMVC for modular developed by wiredesignz
  2. Template engine for templating by Phil Sturgeon

Just unzip it into your webserver root directory and run

localhost/modular for front-end

and

localhost/modular/admin for back-end

application/back-modules, it is for the back-end modules

application/front-modules, it is for the front-end modules

similarly templates/admin for the back-end templates templates/front for the front-end templates

themes/admin for the back-end themes themes/front for the front-end themes

Nothing hacked in original code just configured using config.php and index.php

like image 3
Bhuban Avatar answered Nov 12 '22 00:11

Bhuban