• Stars
    star
    107
  • Rank 323,587 (Top 7 %)
  • Language
    PHP
  • Created over 13 years ago
  • Updated over 11 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A template library for Codeigniter

CodeIgniter Template Library

This template library for Codeigniter lets you build complex templates using partial views and widgets. It's built with the same method chaining support that we are seeing so often in Codeigniter so it feels familiar. This library loads a template file that uses partial views. These partial view sections are internally represented by Partial Objects managed by the template library. These objects let you modify their content in a user friendly way through method chaining.

Installation

Copy the files to the corresponding folder in your application folder (or use spark).

Configuration

In your template.php config file you can change following configuration parameters (optional):

/*
| -------------------------------------------------------------------
| Template configuration
| -------------------------------------------------------------------
| This file will contain the settings for the template library.
|
| 'parser'     = if you want your main template file to be parsed, set to TRUE
| 'template'   = the filename of the default template file
| 'cache_ttl'  = the time all partials should be cache in seconds, 0 means no global caching
*/

$config['parser']    = FALSE;
$config['template']  = 'template';
$config['cache_ttl'] = 0;

If you prefer, you can autoload the library by adjusting your autoload.php file and add 'template' to the $autoload['libraries'] array.

Template files

Template files are loaded or parsed by Codeigniter and the partials are passed to them as data. You can easily load them like you would normally use data in your view files:

<head>
    <title><?php echo $title; ?></title>
    <?php echo $stylesheet; ?>
</head>
<body>
    <?php echo $content; ?>
</body>

Or when parsing is enabled you can use {content} etc.

However, I prefer to directly call the library's methods from inside the template file to work around php's Undefined variable errors when you are not setting all partials. Calling these methods well replace non-existing partials with empty one's so you don't get any errors:

<head>
    <title><?php echo $this->template->title; ?></title>
    <?php echo $this->template->stylesheet; ?>
</head>
<body>
    <?php echo $this->template->content; ?>
</body>

These variables are in fact Partial Ojects, so you can still manipulate them from inside the template view file like this:

<?php echo $title->prepend('My Website - '); ?>

Partial manipulation methods will always return the partial object itself for further chaining or for displaying. So this is perfectly possible:

<?php echo $sidebar->cache(500)->widget('login')->prepend('Login: '); ?>

Partial manipulation

Partials have a few handy methods for manipulating their content such as:

$partial->set() - overwrites the content
$partial->append() - append something
$partial->add() - same as append (alias)
$partial->prepend() - prepend something
$partial->content() - gets the content
$partial->default() - only set content if empty

You can also load dynamic content inside partials from view files or widgets. The object named partial used in the method chaining below is the name of the partial you want to load the content into.

$this->template->partial->view()

Append or overwrite the partial with a view file with parameters.

$this->template->partial->view('view-file', array(), $overwrite=FALSE);

Append or overwrite the partial with a parsed view file with parameters.

$this->template->partial->parse('view-file', array(), $overwrite=FALSE);

Append or overwrite the partial with a widget's output.

$this->template->partial->widget('widget-name', array(), $overwrite=FALSE);

Publishing

The template class only has a few methods. I chose to do this because almost everything can be managed by using the flexible Partial Object. If you want to publish the entire template with the current partials to the output you can use the publish() method.

You can pass a custom template file and optional data if wanted:

$this->template->publish('template', array('title'=>'Title is overwritten!'));

Most of the time this will be empty using the template file from the config:

$this->template->publish();

If you wish to set the template file before publishing, eg. in a controller's constructor:

$this->template->set_template('template2');

Triggers

Some partials have built in triggers:

stylesheet - you only need to pass the url
javascript - you only need to pass the url
meta - will convert the arguments to the right meta tag
title - converts special characters
description - will convert special characters just like the title

This is an example of what these built in triggers do:

$this->template->stylesheet->add('stylesheet.css', array('media' => 'all'));
//<link rel="stylesheet" href="http://myweb.com/stylesheet.css" media="all" />
 
$this->template->javascript->add('script.js');
//<script src="http://myweb.com/script.js"></script>
 
$this->template->meta->add('robots', 'index,follow');
//<meta name="robots" content="index,follow" />
 
$this->template->title->set('Dad & Son');
//Dad &amp; Son

You can set your own triggers for functions or methods for any partial object like this:

//function
$this->template->partial->bind('strtoupper');
 
//method
$this->template->partial->bind($this->typography, 'auto_typography');

This will trigger the function or method whenever you manipulate the partial's content.

Widget

Widgets are intelligent partial objects. When their content is asked, their display() method is activated which will fill the content using codeigniter or partial object methods. Widgets classes are found inside the application/widgets folder. They extend the main Widget class which has the same methods as the Partial class. This is an example widget:

/* File: widgets/hero_widget.php */
class hero_widget extends Widget {
     public function display($args = array()) {
         $this->load->model('my_model');
         $data = $this->my_model->all();
 
         $this->load->view('widgets/hero', $data);
     }
}

And this is loaded from a controller like this:

$this->template->partial->widget('hero_widget', $args = array());

Caching

I did not want to expand the library in all different ways, therefore I implemented a basic caching function using Codeigniter's caching driver. This might slow your code down on simple websites but allows you to use caching for partials just like you would do yourself with Codeigniter's driver.

You can cache particular partials:

$this->template->partial->cache(100);

Or you can cache all partials:

$this->template->cache(100);

Both methods have an extra optional identification parameter that you can use to have multiple cache files for different pages:

$this->template->cache(100, 'frontpage');

More Repositories

1

agent

👮 A PHP desktop/mobile user agent parser with support for Laravel, based on Mobiledetect
PHP
4,541
star
2

imagehash

🌄 Perceptual image hashing for PHP
PHP
1,976
star
3

date

🗓 A library to help you work with dates in multiple languages, based on Carbon.
PHP
1,813
star
4

optimus

🤖 Id obfuscation based on Knuth's multiplicative hashing method for PHP.
PHP
1,264
star
5

php-proxy

A PHP proxy script with https and post support
PHP
933
star
6

blade

🔪 A standalone version of Laravel's Blade templating engine for use outside of Laravel.
PHP
823
star
7

model

This model provides an eloquent-like base class that can be used to build custom models in Laravel and other frameworks
PHP
379
star
8

RTL8188-hostapd

hostapd for Realtek RTL8188
C
333
star
9

laravel-rollbar

Rollbar error monitoring integration for Laravel projects
PHP
329
star
10

laravel-ab

A server-side A/B testing tool for Laravel.
PHP
288
star
11

captain

⚓️ Easily start and stop docker compose projects
Go
241
star
12

codeigniter-hmvc-modules

Create HMVC modules with this lightweight extension for Codeiginter 2
PHP
188
star
13

codeigniter-advanced-images

Resize and crop images on the fly
PHP
181
star
14

dashboard

A server dashboard for Ubuntu
PHP
136
star
15

laravel-raven

Sentry (Raven) error monitoring integration for Laravel projects
PHP
90
star
16

laravel-mongodb-session

A MongoDB session driver for Laravel
PHP
77
star
17

codeigniter-authentication-library

A secure authentication library for CodeIgniter
PHP
68
star
18

laravel-oauth

A Laravel OAuth 1 & 2 library
PHP
65
star
19

laravel-mongodb-sentry

An extension for Laravel-MongoDB that lets you work with Sentry
PHP
54
star
20

codeigniter-message-library

Store and display error or information messages to display on the current page or next page
PHP
51
star
21

lean

Use the PHP League's Container package with auto-wiring support as the core container in Slim 3
PHP
31
star
22

laravel-mongodb-core

A MongoDB based query builder for Laravel
PHP
28
star
23

php-chef

Opscode Chef API PHP library
PHP
20
star
24

chef-patch

Helps you replace text and lines in files from Chef recipes.
Ruby
20
star
25

palenight.zsh-theme

My custom zsh theme
13
star
26

laravel-mongodb-lite

A lightweight MongoDB database library and model for Laravel 4
PHP
11
star
27

vagrant

My personal Vagrant development environment
HTML
7
star
28

quotebot

Quotebot for slack
TypeScript
5
star
29

docker

My personal Docker setup
5
star
30

docker-php-cs-fixer

A tool to automatically fix PHP coding standards issues
4
star
31

ddd-oke-cars

PHP
4
star
32

docker-php

Custom PHP docker image with some basic extensions
Dockerfile
4
star
33

cryptonope

Replace crypto words with random things
JavaScript
3
star
34

homebrew-custom

Custom homebrew formulas
Ruby
2
star
35

auto-commit

JavaScript
2
star
36

spacegray-monokai

A Monokai color scheme for Sublime's Spacegray theme
1
star