Skip to content

Instantly share code, notes, and snippets.

@fideloper
Created October 20, 2011 23:16
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fideloper/1302688 to your computer and use it in GitHub Desktop.
Save fideloper/1302688 to your computer and use it in GitHub Desktop.
Sample Zend boot strap file - layout, views, registry, error handling
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initLayoutHelper()
{
$this->bootstrap('frontController');
$layout = Zend_Controller_Action_HelperBroker::addHelper(
new AppName_Controller_Action_Helper_LayoutLoader());
$doctypeHelper = new Zend_View_Helper_Doctype();
$doctypeHelper->doctype('HTML5');
}
protected function _initViewHelpers() {
$this->bootstrap('layout');
$layout = $this->getResource('layout');
$view = $layout->getView();
$bodyClass = new AppName_Helper_BodyClass();
$view->registerHelper($bodyClass, 'BodyClass');
$footScript = new AppName_Helper_FootScript();
$view->registerHelper($footScript, 'FootScript');
$baseUrl = $this->getOption('baseUrl');
$view->baseUrl = $baseUrl;
$layout->baseUrl = $baseUrl; }
protected function _initErrorHandler() {
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Zend_Controller_Plugin_ErrorHandler(array(
'module' => 'error',
'controller' => 'error',
'action' => 'error'
)));
}
protected function _initRegistry() {
Zend_Registry::set('facebook', $this->getOption('facebook'));
$googleApi = $this->getOption('google');
Zend_Registry::set('googleApi', $googleApi['api']);
}
}
//related files:
class AppName_Controller_Action_Helper_LayoutLoader extends Zend_Controller_Action_Helper_Abstract
{
public function preDispatch()
{
$module = $this->getRequest()->getModuleName();
if ($module == 'app') {
$this->getActionController()
->getHelper('layout')
->setLayout('app');
}
}
}
class AppName_Helper_FootScript extends Zend_View_Helper_HeadScript {
protected $_regKey = 'Zend_View_Helper_FootScript'; //Need different namespace than standard _HeadScript view helper
public function footScript() {
return parent::headScript();
}
}
class AppName_Helper_BodyClass extends Zend_View_Helper_Placeholder_Container_Standalone {
private $_classes = array();
public function __construct($classes = null) {
if(is_array($classes)) {
$this->addClass($classes);
}
}
public function addClass($class) {
if(is_array($class)) {
foreach($class as $c) {
if(is_string($c)) {
$this->addClass($c); //recursion
} else {
throw new Zend_Exception('Class must be a string - is type: '.gettype($c));
}
}
return $this;
}
if(is_string($class)) {
$this->_classes[] = $class;
return $this;
} else {
throw new Zend_Exception('Class must be a string - is type: '.gettype($class));
}
return $this;
}
public function removeClass($class) {
$key = array_search($class, $this->_classes);
if($key !== false) {
unset($this->_classes[$key]);
}
return $this;
}
public function bodyClass() {
return $this;
}
public function toString() {
return implode(' ', $this->_classes);
}
}
?>
<!-- HERE IS A SAMPLE LAYOUT FILE USING ABOVE VIEW HELPERS -->
<?php echo $this->doctype() ?>
<html>
<head>
<meta charset="utf-8">
<!-- www.phpied.com/conditional-comments-block-downloads/ -->
<!--[if IE]><![endif]-->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<?php echo $this->headTitle() ?>
<meta name="description" content="">
<meta name="author" content="">
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0;">
<?php echo $this->headMeta() ?>
<link rel="shortcut icon" href="<?php echo $this->layout()->baseUrl; ?>/favicon.png">
<link rel="apple-touch-icon" href="<?php echo $this->layout()->baseUrl; ?>/apple-touch-icon.png">
<link rel="stylesheet" href="<?php echo $this->layout()->baseUrl; ?>/css/app/imports.css">
<?php echo $this->headLink() ?>
<?php echo $this->headStyle() ?>
<?php echo $this->headScript() ?>
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<base href="/" />
</head>
<body class="<?php echo $this->bodyClass(); ?>">
<div id="fb-root"></div>
<?php echo $this->layout()->content ?>
<!-- Scripts -->
<script src="<?php echo $this->layout()->baseUrl; ?>/js/cssbrowsers.js"></script>
<!-- Grab Google CDN's jQuery. fall back to local if necessary -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<!-- <script>!window.jQuery && document.write('<script src="js/jquery-1.4.2.min.js"></script>')</script> -->
<?php echo $this->footScript() ?>
<script src="<?php echo $this->layout()->baseUrl; ?>/js/plugins.js"></script>
<script src="<?php echo $this->layout()->baseUrl; ?>/js/script.js"></script>
<script>
var _gaq = [['_setAccount', 'UA-XXXXX-X'], ['_trackPageview']];
(function(d, t) {
var g = d.createElement(t),
s = d.getElementsByTagName(t)[0];
g.async = true;
g.src = '//www.google-analytics.com/ga.js';
s.parentNode.insertBefore(g, s);
})(document, 'script');
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment