Here’s how I created a base controller for websites I develop using Kohana v3
1. create a website config file ( application/config/website.php ):
<?php defined('SYSPATH') OR die('No Direct Script Access'); return array( 'site_name' => 'Example site',); <?php defined('SYSPATH') OR die('No Direct Script Access'); return array( 'site_name' => 'Example site', );
2. Create a basic CSS file for your site ( html/template/default/css/style.css ):
body { font-size: 14px; }
3. Create the website controller ( application/classes/controller/website.php ):
<?php defined('SYSPATH') or die('No direct script access.'); class Controller_Website extends Controller_Template { public $template = ''; public $page_title = ''; public $site_name = ''; public $template_name = ''; public $styles = array(); public $scripts = array(); public function before() { $this->auto_render = false; parent::before(); $this->auto_render = true; $this->template_name = 'default'; $this->site_name = kohana::config('website.site_name'); $this->styles = array( 'template/' . $this->template_name . '/css/style.css' => 'screen', ); $this->scripts = array( 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js', ); $this->template = View::factory('template/' . $this->template_name . '/default'); if ($this->auto_render) { $this->template->bind('page_title', $this->page_title) ->bind('site_name', $this->site_name) ->bind('styles', $this->styles) ->bind('scripts', $this->scripts) ; } } public function action_index() { //$this->request->response = 'hello, world!'; $this->template->content= '<!--Default website controller, you don't want to access this one-->'; } public function after() { $this->template->bind('styles', $this->styles) ->bind('scripts', $this->scripts) ; parent::after(); } } // End Website
4. Create the template file ( application/views/template/default/default.php ):
<html> <head> <meta charset="utf-8" /> <title><?php echo empty($page_name) ? '' : "$page_name - "; ?><?php echo empty($site_title) ? '' : $site_name; ?></title> <?php foreach ($styles as $file => $type) echo HTML::style($file, array('media' => $type)) . "n"; ?> <?php foreach ($scripts as $file) echo HTML::script($file) . "n"; ?> </head> <body> <?php echo empty($content) ? '' : $content; ?> </body> </html>