Created
October 20, 2011 23:16
-
-
Save fideloper/1302688 to your computer and use it in GitHub Desktop.
Sample Zend boot strap file - layout, views, registry, error handling
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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