Skip to the content.

CI3 Fire Starter (ci3-fire-starter)

NOW THAT CODEIGNITER 4 HAS BEEN RELEASED, THIS PROJECT WILL NOT BE UPDATED OR SUPPORTED ANYMORE.

VIEW THE DEMO

TABLE OF CONTENTS

INTRODUCTION

CI3 Fire Starter is a CodeIgniter3 skeleton application that includes jQuery and Twitter Bootstrap. It is intended to be light weight, minimalistic and not get in your way of building great CodeIgniter 3 applications. It is also intended for new CodeIgniter developers who want a simple, easy platform for learning the framework.

That should cover the basic needs for kickstarting many small CodeIgniter 3 projects. While there are some CodeIgniter CMS applications (see below), sometimes you don’t need a full CMS or you need a completely customizable solution. That’s why I created CI3 Fire Starter. I was tired of always having to do the same things over and over again. So I took some best practices, included all the addons and functions I most commonly use, and this was the end result, which I use to start many of my smaller projects.

I hope you find it useful. Please fork it on Github and help make it better!

NOTE: This documentation assumes you are already familiar with PHP and CodeIgniter. To learn more about PHP, visit php.net. If you need to learn more about CodeIgniter, visit the CodeIgniter User Guide.

Welcome Screen

SYSTEM REQUIREMENTS

See CodeIgniter’s Server Requirements for the complete list.

INSTALLATION

UPDATES

Since version 3.2.4, anytime changes to the database are required, you’ll find SQL files in /data/schema_updates

(NOT) MODULAR

The former versions of CI Fire Starter (prior to v3.0.0) used to utilize wiredesign’s Modular Extensions. At this time I have opted not to include it, however, if you have an argument in support of reimplementing it, just let me know and we can open it up for discussion.

BASE CLASSES

Phil Sturgeon wrote a very helpful blog post years ago called “CodeIgniter Base Classes: Keeping it DRY”. The methods he described in that article have been implemented in CI3 Fire Starter. All base classes are located in the /application/core folder.

MY_Controller

This is the main core class used for loading settings, defining includes that get passed to the views, loading logged-in user data, setting the configured timezone, and turning the profiler on or off. All other classes extend this class.

Public_Controller

This extends MY_Controller and drives all your public pages (home page, etc). Any controller that extends Public_Controller will be open for the whole world to see.

Private_Controller

This extends MY_Controller and drives all your private pages (user profile, etc). Any controller that extends Private_Controller will require authentication. Specific page requests are stored in session and will redirect upon successful authentication.

Profile Screen

Admin_Controller

This extends MY_Controller and drives all your administration pages. Any controller that extends Admin_Controller will require authentication from a user with administration privileges. Specific page requests are stored in session and will redirect upon successful authentication.

Cron_Controller

This extends MY_Controller and drives all your cron methods. See comments in /application/controllers/Cron.php on how to use.

API_Controller

This extends MY_Controller and drives all your API functions. Any controller that extends API_Controller will be open for the whole world to see (see below for details).

Understanding Includes

Includes can be appended and/or overwritten from any controller function.

CORE FILES

Several core files have been included to simplify customizations:

Core Config

In /application/config there is a file core.php. This file allows you to set site-wide variables. It is set up with site version, default templates, pagination settings, login attempt settings, enable/disable the profiler and default form validation error delimiters.

Core Language

In /application/language/english is a file core_lang.php. This file allows you to set language variables that could be used throughout the entire site (such as the words Home or Logout).

Core Helper

In /application/helpers is a file core_helper.php. This includes the following useful functions:

INTERNATIONALIZATION

Thanks to contributions from the community, the list of language translations is growing:

Registered users can set their own preferred language, admins can set preferred languauges for each user, and non-registered users can use the language selector to render the site in their preferred language. The application looks for a session variable ($this->session->language) to determine which language to show. If one is not found in the session, the default defined in the main config file is used. If the user is logged in, then their assigned language is used instead. If a user selects a different languauge other than what is configured, the selected languauge will be used during their session.

All available languages are also stored in the session to improve performance. They are available in $this->session->languages.

If a translated language file is missing, the application will use English as the fall back using the extended MY_Lang class.

Jsi18n Library

This library allows you to internationalize your JavaScript files through CI language files and was inspired by Alexandros D on coderwall.com. It is included in /application/libraries.

Load this library in the autoload.php file or manually in your controller:

$this->load->library('jsi18n');

In your language file:

$lang['alert_message'] = "This is my alert message!";

In your JS files, place your language key inside double braces:

function myFunction() {
    alert("");
}

Render the Javascript file in your template file:

<script type="text/javascript"><?php echo $this->jsi18n->translate("/themes/admin/js/my_javascript_i18n.js"); ?></script>

OR in your includes array:

$this->includes = array_merge_recursive($this->includes, array(
    'js_files_i18n' => array(
        $this->jsi18n->translate("/themes/admin/js/my_javascript_i18n.js")
    )
));

USER MANAGEMENT

CI3 Fire Starter comes with a simple user management tool in the administration tool. This tool demonstrates a lot of basic but important functionality:

User Administration

IMPORTANT NOTE: user id 1 is the main administrator - DO NOT MANUALLY DELETE. You can not delete this user from within the admin tool.

SETTINGS

Adding additional site owner-configurable setting fields couldn’t be any easier. Simply add a new entry in the ‘settings’ table of the database with the information below. The script then does all the work and adds the setting fields to the form automatically. There’s no need to modify the form yourself!

Settings are loaded in MY_Controller and are accessible in every controller, model and view file.

Non-translated Example:

$this->settings->site_version

Translated Example:

$this->settings->welcome_message[$this->session->language]

Settings Screen

THEMES

There are 2 responsive themes provided with CI3 Fire Starter: ‘admin’ and ‘default’. There is also a ‘core’ theme for global assets. To keep the application light-weight, I did not include a templating library, such as Smarty, nor did I utilize CI’s built-in parser. If you really wanted to include one, you could check out Phil Sturgeon’s CI-Dwoo extension.

Theme Functions

add_css_theme($css_files)

This function is used to easily add css files to be included in a template. With this function, you can just add the css file name as a parameter and it will use the default css path for the active theme. You can add one or more css files as the parameter, either as a string or an array. If using parameter as a string, it must use comma separation between each css file name.

 1. Using string as parameter
     $this->add_css_theme("bootstrap.min.css, style.css, admin.css");

 2. Using array as parameter
     $this->add_css_theme(array("bootstrap.min.css", "style.css", "admin.css"));

add_js_theme($js_files, $is_i18n)

This function is used to easily add Javascript files to be included in a template. With this function, you can just add the js file name as a parameter and it will use the default js path for the active theme. You can add one or more js files as the parameter, either as a string or an array. If using the parameter as a string, it must use comma separation between each js file name.

The second parameter is used to indicate that the js file supports internationalization using the i18n library. Default is FALSE.

 1. Using string as parameter
     $this->add_js_theme("jquery-1.11.1.min.js, bootstrap.min.js, another.js");

 2. Using array as parameter
     $this->add_js_theme(array("jquery-1.11.1.min.js", "bootstrap.min.js,", "another.js"));

add_jsi18n_theme($js_files)

This function is used to easily add Javascript files that support internationalization to be included in a template. With this function, you can just add the js file name as the parameter and it will use the default js path for the active theme. You also can add one or more js files as the parameter, either as a string or an array. If using the parameter as a string, it must use comma separation between each js file name.

1. Using string as parameter
    $this->add_jsi18n_theme("dahboard_i18n.js, contact_i18n.js");

2. Using array as parameter
    $this->add_jsi18n_theme(array("dahboard_i18n.js", "contact_i18n.js"));

3. Or we can use add_js_theme function, and add TRUE for second parameter
    $this->add_js_theme("dahboard_i18n.js, contact_i18n.js", TRUE);
    	- or -
    $this->add_js_theme(array("dahboard_i18n.js", "contact_i18n.js"), TRUE);

add_external_css($css_files, $path)

This function is used to easily add css files from external sources or outside the theme folder to be included in a template. With this function, you can just add the css file name and their external path as the parameter, or add css complete with path. See example below:

1. Using string as first parameter
    $this->add_external_css("global.css, color.css", "http://example.com/assets/css/");
 	- or -
    $this->add_external_css("http://example.com/assets/css/global.css, http://example.com/assets/css/color.css");

2. Using array as first parameter
    $this->add_external_css(array("global.css", "color.css"), "http://example.com/assets/css/");
	- or -
    $this->add_external_css(array("http://example.com/assets/css/global.css", "http://example.com/assets/css/color.css"));

add_external_js($js_files, $path)

This function is used to easily add js files from external sources or outside the theme folder to be included in a template. With this function, you can just add the js file name and their external path as the parameter, or add js complete with path. See example below:

1. Using string as first parameter
    $this->add_external_js("global.js, color.js", "http://example.com/assets/js/");
 	- or -
    $this->add_external_js("http://example.com/assets/js/global.js, http://example.com/assets/js/color.js");

2. Using array as first parameter
    $this->add_external_js(array("global.js", "color.js"), "http://example.com/assets/js/");
	- or -
    $this->add_external_js(array("http://example.com/assets/js/global.js", "http://example.com/assets/js/color.js"));

Chaining

These methods can also be chained like this:

$this
  ->add_css_theme("bootstrap.min.css, style.css, admin.css")
	  ->add_external_css("global.css, color.css", "http://example.com/assets/css/")
  ->add_js_theme("jquery-1.11.1.min.js, bootstrap.min.js, another.js")
	  ->add_js_theme("dahboard_i18n.js, contact_i18n.js", TRUE)
	  ->add_external_js("global.js, color.js", "http://example.com/assets/js/");

set_template($template_file)

Sometimes you might want to use a different template for different pages, for example, 404 template, login template, full-width template, sidebar template, etc. You can simply load a different template using this function.

APIS

With the API class, you can easily create API functions for external applications. There is no security on these, so if you need a more robust solution, such as authentication and API keys, check out Phil Sturgeon’s CI Rest Server. You could also just set your own request authentication headers to the code that’s already there.

Sample JSON String

CONCLUSION

As I mentioned earlier, CI3 Fire Starter does not attempt to be a full-blown CMS. You would need to build that functionality yourself. If you’re looking for a full CMS built on CodeIgniter, or need a more robust starting point, then check out one of these applications:

This list is provided only as a reference and is not an endorsement for any of these applications.

WHAT’S NEW

Version 3.5.00

09/20/2019

Version 3.4.10

01/27/2019

Version 3.4.9

01/16/2019

Version 3.4.8

06/25/2018

Version 3.4.7

04/02/2018

Version 3.4.6

01/25/2018

Version 3.4.5

10/25/2017

Version 3.4.4

09/05/2017

Version 3.4.3

08/30/2017

Version 3.4.2

08/10/2017

Version 3.4.1

08/09/2017

Version 3.4.0

08/09/2017

Version 3.3.7

08/09/2017

Version 3.3.6

05/30/2017

Version 3.3.5

01/09/2017

Version 3.3.4

12/28/2016

Version 3.3.3

12/20/2016

Version 3.3.2

12/14/2016

Version 3.3.1

08/09/2016

Version 3.3.0

07/26/2016

Version 3.2.6

04/02/2016

Version 3.2.5

03/28/2016

Version 3.2.4

02/29/2016

Version 3.2.3

01/20/2016

Thanks klavatron for your Russian translation.

Version 3.2.2

12/23/2015

Version 3.2.1

12/22/2015

Version 3.2.0

12/19/2015

Version 3.1.7

12/17/2015

Version 3.1.6

12/11/2015

Thanks TowerX for your Spanish translation. Thanks yinlianwei for your Simplified Chinese translation.

Version 3.1.5

11/10/2015

Version 3.1.4

11/09/2015

Version 3.1.3

11/02/2015

Version 3.1.2

08/25/2015

Thanks DeeJaVu for your Turkish and Dutch translations.

Version 3.1.1

06/16/2015

Thanks arif-rh and simogeo for your contributions.

Version 3.1.0

04/15/2015

Version 3.0.5

03/11/2015

Version 3.0.4

02/17/2015

Version 3.0.3

01/31/2015

Version 3.0.2

01/31/2015

Version 3.0.1

01/31/2015

Version 3.0.0

01/31/2015

Version 2.1.0

07/25/2014

Version 2.0.0

05/06/2014

Too many to list them all, but here are some of the major changes:

Version 1.0.1

10/10/2013

Version 1.0.0

10/08/2013

FORK IT!

Please fork CI3 Fire Starter on Github and help make it better!