Skip to content
A PHP application starter, based on CodeIgniter
PHP JavaScript CSS HTML Other

A PHP Application Starter, Version 3, Based on CodeIgniter

Project Repository


This is an older version of the platform. Further efforts will be applied on Application Starter 4, which supports multiple applications. See

Live Demo

CodeIgniter 3.0 Documentation


PHP 5.2.4+ (officially, actually the platform works on PHP 5.2.0), Apache 2.2 - 2.4 (mod_rewrite should be enabled). For database support seek information within CodeIgniter 3.0 documentation.

For UTF-8 encoded sites it is highly recommendable the following PHP extensions to be installed:

  • mbstring;
  • iconv;
  • pcre compiled with UTF-8 support (the "u" modifier should work).


Download source and place it on your web-server within its document root or within a sub-folder. Make the folder platform/writable to be writable. It is to contain CodeIgniter's cache, logs and other things that you might add. Open the site with a browser on an address like this: http://localhost/starter-public-edition-3/www/

On your web-server you may move one level up the content of the folder www, so the segment www from the address to disappear. Also you can move the folder platform to a folder outside the document root of the web server for increased security. After such a rearrangement open the file config.php (www/config.php before rearrangement), find the setting $PLATFORMPATH and change this path accordingly. Don't forget to check platform/writable folder, it should be writable.

Have a look at the files .htaccess and robots.txt and adjust them for your site. The PHP configuration files of the application you may find at platform/application/config/ folder. Also, the common PHP configuration files you may find at platform/common/config/ folder.

The platform auto-detects its base URL address nevertheless its public part is on the document root of the web-server or not. I don't expect you to be forced to set it up manually within platform/application/config/config.php.

Coding Rules

For originally written code:

  • A tab is turned into four spaces.

For CodeIgniter system files, third-party libraries, components, etc.:

  • Use the code rules adopted by the corresponding authors.


    modules/demo/controllers/page/Page.php     -> address: site_url/demo/page/[index/method]
    modules/demo/controllers/page/Other.php    -> address: site_url/demo/page/other/[index/method]

Deeper directory nesting as in CI 3 has not been implemented for now.

Instead of:

// Filename: Welcome.php
class Welcome extends Base_Controller {
    // ...

you can write:

// Filename: Welcome_controller.php
class Welcome_controller extends Base_Controller {
    // ...

Thus the class name Welcome is available to be used as a model name instead of those ugly names Welcome_model, Welcome_m, etc. The technique of this hack is available, but it is not mandatory.

How to use this feature:

Enable the configuration option 'parse_i18n':

$config['parse_i18n'] = TRUE;

Then in your views you can use the following syntax:


or with parameters

<i18n replacement="John,McClane">dear</i18n>

where $lang['dear'] = 'Dear Mr. %s %s,';

Here is a way how to translate title, alt, placeholder and value attributes:

<img src="..." i18n:title="click_me" />

or with parameters

<img src="..." i18n:title="dear|John,McClane" />

You can override the global setting 'parse_i18n' within the controller by inserting the line:

$this->parse_i18n = TRUE; // or FALSE

Parsing of <i18n> tags is done on the final output buffer only when the MIME-type is 'text/html'.

Note: Enabling globally the i18n parser maybe is not the best idea. If you use HMVC, maybe it would be better i18n-parsing to be done selectively for particular html-fragments. See below on how to use the Parser class for this purpose.

Instead of:


write the following:


Quick tests:

// The default parser.
echo $this->parser->parse_string('Hello, {name}!', array('name' => 'John'), TRUE);

There are some other parser-drivers implemented. Examples:

// Mustache parser.
echo $this->mustache->parse_string('Hello, {{name}}!', array('name' => 'John'), TRUE);
// Parsing a Mustache type of view.
$email_content = $this->mustache->parse('email.mustache', array('name' => 'John'), TRUE);
echo $email_content;
// Textile parser
echo $this->textile->parse_string('h1. Hello!', NULL, TRUE);
echo $this->textile->parse('hello.textile', NULL, TRUE);
// Markdown parser
echo $this->markdown->parse_string('# Hello!', NULL, TRUE);
echo $this->markdown->parse('hello.markdown', NULL, TRUE);
// Markdownify parser
echo $this->markdownify->parse_string('<h1>Hello!</h1>', NULL, TRUE);
echo $this->markdownify->parse('hello.html', NULL, TRUE);
// LESS parser
echo $this->less->parse_string('@color: #4D926F; #header { color: @color; } h2 { color: @color; }', NULL, TRUE);
echo $this->less->parse(DEFAULTFCPATH.'assets/less/lib/bootstrap-3/bootstrap.less', NULL, TRUE);

Within the folder platform/common/libraries/Parser/drivers/ you may see all the additional parser drivers implemented. Also within the folder platform/common/config/ you may find the corresponding configuration files for the drivers, name by convention parser_driver_name.php. Better don't tweak the default configuration options, you may alter them directly on parser call where it is needed.

The simple CodeIgniter's parser driver-name is 'parser', you may use it according to CodeIgniter's manual.

Enanced syntax for using parsers (which I prefer)

Using the generic parser class directly, with specifying the desired driver:


// The fourth parameter means Mustache parser that is loaded automatically.
echo $this->parser->parse_string($mustache_template, $data, true, 'mustache');

// The fourth parameter means Markdown and auto_link parsers parser to be applied in a chain.
echo $this->parser->parse_string($content, null, true, array('markdown', 'auto_link'));

// The same chaining example, this time a configuration option of the second parser has been altered.
echo $this->parser->parse_string($content, null, true, array('markdown', 'auto_link' => array('attributes' => 'target="_blank"')));

Using parsers indirectly on rendering views:

// You don't need to load explicitly the parser library here.

// The fourth parameter means that i18n parser is to be applied.
// This is a way to handle internationalization on views selectively.
$this->load->view('main_menu_widget', $data, false, 'i18n');

Using a parser indirectly with Phil Sturgeon's Template library:

// You don't need to load explicitly the parser library here.

    ->set(compact('success', 'messages', 'subject', 'body'))
    ->enable_parser_body('i18n')  // Not elegant enough, sorry.

Have a look at platform/common/config/less_compile.php file. It contains a list of files (sources, destinations) to be used for LESS to CSS compilation. You may edit this list according to your needs. Before compilation, make sure that destination files (if exist) are writable and their containing folders are writable too.

LESS-compilation is to be done from command-line. Open a terminal at the folder platform/www/ and write the following command:

php cli.php less compile

Or, you may choose which LESS-sources to compile by pointing at their names:

php cli.php less compile bootstrap-3 bootstrap-3-min

The Playground

It is hard everything about this platform to be documented in a formal way. This is why a special site section "The Playground" has been created, aimed at demonstration of platform's features/concepts. You may look at the examples and review their code.

A contact form has been created that with minimal adaptation you may use directly in your projects.

If you have no previous experience with CodeIgniter, get familiar with its User Guide first:

Real Life Usage

With a little bit older version of this platform the following sites have been created (Bulgarian language only):


License Information

For original code in this project:
Copyright (c) 2012 - 2016:
Ivan Tcholakov (the initial author),
Gwenaël Gallon.
License: The MIT License (MIT),

Copyright (c) 2008 - 2014, EllisLab, Inc. (
Copyright (c) 2014 - 2016, British Columbia Institute of Technology (
License: The MIT License (MIT),

Third parties:
License information is to be found directly within code and/or within additional files at corresponding folders.


Ivan Tcholakov, November 11-th, 2015: No donations are accepted here. If you wish to help, you need the time and the skills of being a direct contributor, by providing code/documentation and reporting issues. Period.

Something went wrong with that request. Please try again.