/CodeIgnited

A Blank Starter Project for Codeigniter - Libs/Custom Routes/Controller included

Primary LanguagePHPOtherNOASSERTION

Codeigniter Demo

Please note: the bulk of this project belongs to Jason Crider: Please visit the Original Project., or the original docs are located below.

Thank you, Jason!

My Changes

Auth

Disabled auth for the time being... more correctly, I circumvented it.

News

I completed the codeigniter tutorial from their docs, so the "news" function works, complete with database.

Demo Area

I set up a "demo" section with a simple automatic routing proceedure. Add a file to the demo folder, and it will automatically appear in the navigation,

Templating

I made some changes to the templating process, and the default controller logic related to that... it's basically set up with 5 main sections: * header * nav * primary * secondary (sidebar, etc) * footer

...Each of the sections has a default "partial", but they can be overridden at the "global" level, in the controller, or on a per-project bases. The "demo" area is the best example. There is one simple route and a little controller logic.

Sync to web server

I configured my system to synchronize content between my local dev Environment and my webserver. To learn more, visit my live, working demo, at ci.gristech.com/demo - the process is explained there.

Migrations

Auth will be back soon: Furthermore, I monkeyed with migrations a bit, and got it to work. There are a few snags, but from the CLI, you can run

php index.php migrate current
php index.php migrate version 1
php index.php migrate version 2 //(and so on)
php index.php migrate version 0 //rollback all

Be careful this deletes data!

I am excited to do some more exploration with the CLI.

Please reach out to me at ryan.grissinger@gmail.com if you have any questions.


Original Docs

##Setup To set up your new CI project, you will need to set some configurations.

First open up /application/config/config.php and set the base_url to the url of the site you are developing.

You may also want to change the cookie_prefix value to something else as it can cause conflicts with other sites running with that name.

Open up /application/config/database.php and set your database connection settings up in there.

If you wish to route requests to controllers based on subdomains (ex. api.mysite.com will route to /applications/controllers/api/) then leave the MY_Router.php file in the /application/core folder. If you wish to route the requests based on folders (ex. mysite.com/api/ routes to /applications/controllers/api/) then simply remove the file.

##What's Different

There are some distinct differences between this version of Codeigniter and the stock version.

###Templating

I've built in a native templating system that treats views as partial templates that get loaded into a master template.

In the views/templates folder you will see a file named default.php. This is the default template that will load if no template is specified. The view will load in the main template wherever the $content variable is.

You can create your own templates and tell the framework to load it by using the following code:

$this->template = 'templates/your_template.php';

###View Loading Handled Automagically

I thought it was a bit cumbersome to have to include the whole $this->load->view(); code in every single controller method.

The Codeignited framework automatically loads views based on the name of the controller/method. For example Blog::page() would automatically attempt to load 'views/blog/page.php' as it's view. You can override this and specify your own views by using:

$this->view = 'folder/your_view.php';

##Data Output

Data output is handled in non-api controllers by using the $this->data[] array. For example in my controller if I had the following:

class Books extends MY_Controller {
	public function __construct() {
    	parent::__construct();
    }
    public function index() {
    	$this->data['hello'] = 'Hello World';
    }
}

I could access the variable '$hello' from my view like so:

<?= $hello; //echoes 'Hello World' ?>

The $this->data array is also available (except for any keys named 'content') to the parent template.

##Built-in API support:

The Codeignited framework has built-in API support and will treat any folder in the controllers folder with the string 'api' in it as an API. For instance if my folder structure was like so:

/application /controllers /my_api api_call.php

The 'api_call.php' file would be treated as an API call with no further work needed by the developer.

The api has a default response of

{ "success": true }

To add items to the JSON/XML response you only need to populate the $this->out[] array. For instance if my controller was like so:

class Books extends MY_Controller {
	public function __construct() {
    	parent::__construct();
    }
    public function index() {
    	$this->out['hello'] = 'Hello World';
    }
}

The response would look like:

{
    "success":true,
    "hello": "Hello World"
}

To get an XML response you only need to provide a GET parameter to the HTTP request of 'format=xml'.

Additionally, you may default any controller or method to output JSON/XML data by declaring the following:

$this->isApi = true;

##Included Libraries This build of codeigniter comes pre packaged with a few useful libraries for development.

###Curl The curl library can be used to get files from remote sources. Here is a quick example:

$data = $this->curl->simple_get('http://www.google.com'); //data now = google.com's html

###APNS, GCM and C2DM The apn and c2dm libraries can be used to push notifications to iOS and Android devices. The apn library will need to be configured in /application/config/apn.php to point to the correct .pem certificate for sending push notifications.

For more info on GCM read here: http://developer.android.com/guide/google/gcm/index.html

Here is an example of it in use: gcm:

$this->load->library('gcm');   
$this->gcm->send($token,$servertoken,$message);

c2dm:

$this->load->library('c2dm');
if ($this->c2dm->send($push_token, $server_token, $message) == 'error') {
    return false;
}

apn: $this->load->library('apn'); $this->apn->connectToPush(); $r = $this->apn->sendMessage($push_token, $message); $this->apn->disconnectPush();

###Get

I am currently working on making this library better.

This library is autoloaded, using $this->load is not necessary. This library can be used to manage variables POSTed or GETed to the server. It is similar to the CI input class, but gives the developer a place to easily manage variable sanitization and management without extending the core. Here is a rundown of all the methods that get has to offer:

The get class is automatically assigned properties based on the parameters sent to the server. So, if you post or send a get variable of 'somevar' you can access it by using $this->get->somevar; If there is a conflict of names the GET variable will take precidence.

$this->get->assoc(array $ignore) This method returns an associative array of all get/post variables, but will ignore keys specified in the $ignore array.

$this->get->hasKeys('key1','key2') This method checks whether the keys supplied as arguments were sent to the server. If you are trying to check whether the variables have been set via a HTML form, run $this->get->validateKeys(); first.

$this->get->sent() Returns true if get/post variables are present, or false if they are not.

###Datamapper

version 1.8.2

###Ion Auth

installed

###Running from CLI

To run any of your scripts from the CLI, follow the instructions here: http://codeigniter.com/user_guide/general/cli.html