798 Zeilen
		
	
	
	
		
			18 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			798 Zeilen
		
	
	
	
		
			18 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * Zend Framework
 | 
						|
 *
 | 
						|
 * LICENSE
 | 
						|
 *
 | 
						|
 * This source file is subject to the new BSD license that is bundled
 | 
						|
 * with this package in the file LICENSE.txt.
 | 
						|
 * It is also available through the world-wide-web at this URL:
 | 
						|
 * http://framework.zend.com/license/new-bsd
 | 
						|
 * If you did not receive a copy of the license and are unable to
 | 
						|
 * obtain it through the world-wide-web, please send an email
 | 
						|
 * to license@zend.com so we can send you a copy immediately.
 | 
						|
 *
 | 
						|
 * @category   Zend
 | 
						|
 * @package    Zend_Layout
 | 
						|
 * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 | 
						|
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 | 
						|
 * @version    $Id$
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * Provide Layout support for MVC applications
 | 
						|
 *
 | 
						|
 * @category   Zend
 | 
						|
 * @package    Zend_Layout
 | 
						|
 * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 | 
						|
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 | 
						|
 */
 | 
						|
class Zend_Layout
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Placeholder container for layout variables
 | 
						|
     * @var Zend_View_Helper_Placeholder_Container
 | 
						|
     */
 | 
						|
    protected $_container;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Key used to store content from 'default' named response segment
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $_contentKey = 'content';
 | 
						|
 | 
						|
    /**
 | 
						|
     * Are layouts enabled?
 | 
						|
     * @var bool
 | 
						|
     */
 | 
						|
    protected $_enabled = true;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Helper class
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $_helperClass = 'Zend_Layout_Controller_Action_Helper_Layout';
 | 
						|
 | 
						|
    /**
 | 
						|
     * Inflector used to resolve layout script
 | 
						|
     * @var Zend_Filter_Inflector
 | 
						|
     */
 | 
						|
    protected $_inflector;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Flag: is inflector enabled?
 | 
						|
     * @var bool
 | 
						|
     */
 | 
						|
    protected $_inflectorEnabled = true;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Inflector target
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $_inflectorTarget = ':script.:suffix';
 | 
						|
 | 
						|
    /**
 | 
						|
     * Layout view
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $_layout = 'layout';
 | 
						|
 | 
						|
    /**
 | 
						|
     * Layout view script path
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $_viewScriptPath = null;
 | 
						|
 | 
						|
    protected $_viewBasePath = null;
 | 
						|
    protected $_viewBasePrefix = 'Layout_View';
 | 
						|
 | 
						|
    /**
 | 
						|
     * Flag: is MVC integration enabled?
 | 
						|
     * @var bool
 | 
						|
     */
 | 
						|
    protected $_mvcEnabled = true;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Instance registered with MVC, if any
 | 
						|
     * @var Zend_Layout
 | 
						|
     */
 | 
						|
    protected static $_mvcInstance;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Flag: is MVC successful action only flag set?
 | 
						|
     * @var bool
 | 
						|
     */
 | 
						|
    protected $_mvcSuccessfulActionOnly = true;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Plugin class
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $_pluginClass = 'Zend_Layout_Controller_Plugin_Layout';
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var Zend_View_Interface
 | 
						|
     */
 | 
						|
    protected $_view;
 | 
						|
 | 
						|
    /**
 | 
						|
     * View script suffix for layout script
 | 
						|
     * @var string
 | 
						|
     */
 | 
						|
    protected $_viewSuffix = 'phtml';
 | 
						|
 | 
						|
    /**
 | 
						|
     * Constructor
 | 
						|
     *
 | 
						|
     * Accepts either:
 | 
						|
     * - A string path to layouts
 | 
						|
     * - An array of options
 | 
						|
     * - A Zend_Config object with options
 | 
						|
     *
 | 
						|
     * Layout script path, either as argument or as key in options, is
 | 
						|
     * required.
 | 
						|
     *
 | 
						|
     * If mvcEnabled flag is false from options, simply sets layout script path.
 | 
						|
     * Otherwise, also instantiates and registers action helper and controller
 | 
						|
     * plugin.
 | 
						|
     *
 | 
						|
     * @param  string|array|Zend_Config $options
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function __construct($options = null, $initMvc = false)
 | 
						|
    {
 | 
						|
        if (null !== $options) {
 | 
						|
            if (is_string($options)) {
 | 
						|
                $this->setLayoutPath($options);
 | 
						|
            } elseif (is_array($options)) {
 | 
						|
                $this->setOptions($options);
 | 
						|
            } elseif ($options instanceof Zend_Config) {
 | 
						|
                $this->setConfig($options);
 | 
						|
            } else {
 | 
						|
                require_once 'Zend/Layout/Exception.php';
 | 
						|
                throw new Zend_Layout_Exception('Invalid option provided to constructor');
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        $this->_initVarContainer();
 | 
						|
 | 
						|
        if ($initMvc) {
 | 
						|
            $this->_setMvcEnabled(true);
 | 
						|
            $this->_initMvc();
 | 
						|
        } else {
 | 
						|
            $this->_setMvcEnabled(false);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Static method for initialization with MVC support
 | 
						|
     *
 | 
						|
     * @param  string|array|Zend_Config $options
 | 
						|
     * @return Zend_Layout
 | 
						|
     */
 | 
						|
    public static function startMvc($options = null)
 | 
						|
    {
 | 
						|
        if (null === self::$_mvcInstance) {
 | 
						|
            self::$_mvcInstance = new self($options, true);
 | 
						|
        }
 | 
						|
 | 
						|
        if (is_string($options)) {
 | 
						|
            self::$_mvcInstance->setLayoutPath($options);
 | 
						|
        } elseif (is_array($options) || $options instanceof Zend_Config) {
 | 
						|
            self::$_mvcInstance->setOptions($options);
 | 
						|
        }
 | 
						|
 | 
						|
        return self::$_mvcInstance;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Retrieve MVC instance of Zend_Layout object
 | 
						|
     *
 | 
						|
     * @return Zend_Layout|null
 | 
						|
     */
 | 
						|
    public static function getMvcInstance()
 | 
						|
    {
 | 
						|
        return self::$_mvcInstance;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Reset MVC instance
 | 
						|
     *
 | 
						|
     * Unregisters plugins and helpers, and destroys MVC layout instance.
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public static function resetMvcInstance()
 | 
						|
    {
 | 
						|
        if (null !== self::$_mvcInstance) {
 | 
						|
            $layout = self::$_mvcInstance;
 | 
						|
            $pluginClass = $layout->getPluginClass();
 | 
						|
            $front = Zend_Controller_Front::getInstance();
 | 
						|
            if ($front->hasPlugin($pluginClass)) {
 | 
						|
                $front->unregisterPlugin($pluginClass);
 | 
						|
            }
 | 
						|
 | 
						|
            if (Zend_Controller_Action_HelperBroker::hasHelper('layout')) {
 | 
						|
                Zend_Controller_Action_HelperBroker::removeHelper('layout');
 | 
						|
            }
 | 
						|
 | 
						|
            unset($layout);
 | 
						|
            self::$_mvcInstance = null;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set options en masse
 | 
						|
     *
 | 
						|
     * @param  array|Zend_Config $options
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function setOptions($options)
 | 
						|
    {
 | 
						|
        if ($options instanceof Zend_Config) {
 | 
						|
            $options = $options->toArray();
 | 
						|
        } elseif (!is_array($options)) {
 | 
						|
            require_once 'Zend/Layout/Exception.php';
 | 
						|
            throw new Zend_Layout_Exception('setOptions() expects either an array or a Zend_Config object');
 | 
						|
        }
 | 
						|
 | 
						|
        foreach ($options as $key => $value) {
 | 
						|
            $method = 'set' . ucfirst($key);
 | 
						|
            if (method_exists($this, $method)) {
 | 
						|
                $this->$method($value);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Initialize MVC integration
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    protected function _initMvc()
 | 
						|
    {
 | 
						|
        $this->_initPlugin();
 | 
						|
        $this->_initHelper();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Initialize front controller plugin
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    protected function _initPlugin()
 | 
						|
    {
 | 
						|
        $pluginClass = $this->getPluginClass();
 | 
						|
        require_once 'Zend/Controller/Front.php';
 | 
						|
        $front = Zend_Controller_Front::getInstance();
 | 
						|
        if (!$front->hasPlugin($pluginClass)) {
 | 
						|
            if (!class_exists($pluginClass)) {
 | 
						|
                require_once 'Zend/Loader.php';
 | 
						|
                Zend_Loader::loadClass($pluginClass);
 | 
						|
            }
 | 
						|
            $front->registerPlugin(
 | 
						|
                // register to run last | BUT before the ErrorHandler (if its available)
 | 
						|
                new $pluginClass($this),
 | 
						|
                99
 | 
						|
            );
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Initialize action helper
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    protected function _initHelper()
 | 
						|
    {
 | 
						|
        $helperClass = $this->getHelperClass();
 | 
						|
        require_once 'Zend/Controller/Action/HelperBroker.php';
 | 
						|
        if (!Zend_Controller_Action_HelperBroker::hasHelper('layout')) {
 | 
						|
            if (!class_exists($helperClass)) {
 | 
						|
                require_once 'Zend/Loader.php';
 | 
						|
                Zend_Loader::loadClass($helperClass);
 | 
						|
            }
 | 
						|
            Zend_Controller_Action_HelperBroker::getStack()->offsetSet(-90, new $helperClass($this));
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set options from a config object
 | 
						|
     *
 | 
						|
     * @param  Zend_Config $config
 | 
						|
     * @return Zend_Layout
 | 
						|
     */
 | 
						|
    public function setConfig(Zend_Config $config)
 | 
						|
    {
 | 
						|
        $this->setOptions($config->toArray());
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Initialize placeholder container for layout vars
 | 
						|
     *
 | 
						|
     * @return Zend_View_Helper_Placeholder_Container
 | 
						|
     */
 | 
						|
    protected function _initVarContainer()
 | 
						|
    {
 | 
						|
        if (null === $this->_container) {
 | 
						|
            require_once 'Zend/View/Helper/Placeholder/Registry.php';
 | 
						|
            $this->_container = Zend_View_Helper_Placeholder_Registry::getRegistry()->getContainer(__CLASS__);
 | 
						|
        }
 | 
						|
 | 
						|
        return $this->_container;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set layout script to use
 | 
						|
     *
 | 
						|
     * Note: enables layout by default, can be disabled
 | 
						|
     *
 | 
						|
     * @param  string $name
 | 
						|
     * @param  boolean $enabled
 | 
						|
     * @return Zend_Layout
 | 
						|
     */
 | 
						|
    public function setLayout($name, $enabled = true)
 | 
						|
    {
 | 
						|
        $this->_layout = (string) $name;
 | 
						|
        if ($enabled) {
 | 
						|
            $this->enableLayout();
 | 
						|
        }
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get current layout script
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    public function getLayout()
 | 
						|
    {
 | 
						|
        return $this->_layout;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Disable layout
 | 
						|
     *
 | 
						|
     * @return Zend_Layout
 | 
						|
     */
 | 
						|
    public function disableLayout()
 | 
						|
    {
 | 
						|
        $this->_enabled = false;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Enable layout
 | 
						|
     *
 | 
						|
     * @return Zend_Layout
 | 
						|
     */
 | 
						|
    public function enableLayout()
 | 
						|
    {
 | 
						|
        $this->_enabled = true;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Is layout enabled?
 | 
						|
     *
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    public function isEnabled()
 | 
						|
    {
 | 
						|
        return $this->_enabled;
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    public function setViewBasePath($path, $prefix = 'Layout_View')
 | 
						|
    {
 | 
						|
        $this->_viewBasePath = $path;
 | 
						|
        $this->_viewBasePrefix = $prefix;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    public function getViewBasePath()
 | 
						|
    {
 | 
						|
        return $this->_viewBasePath;
 | 
						|
    }
 | 
						|
 | 
						|
    public function setViewScriptPath($path)
 | 
						|
    {
 | 
						|
        $this->_viewScriptPath = $path;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    public function getViewScriptPath()
 | 
						|
    {
 | 
						|
        return $this->_viewScriptPath;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set layout script path
 | 
						|
     *
 | 
						|
     * @param  string $path
 | 
						|
     * @return Zend_Layout
 | 
						|
     */
 | 
						|
    public function setLayoutPath($path)
 | 
						|
    {
 | 
						|
        return $this->setViewScriptPath($path);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get current layout script path
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    public function getLayoutPath()
 | 
						|
    {
 | 
						|
        return $this->getViewScriptPath();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set content key
 | 
						|
     *
 | 
						|
     * Key in namespace container denoting default content
 | 
						|
     *
 | 
						|
     * @param  string $contentKey
 | 
						|
     * @return Zend_Layout
 | 
						|
     */
 | 
						|
    public function setContentKey($contentKey)
 | 
						|
    {
 | 
						|
        $this->_contentKey = (string) $contentKey;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Retrieve content key
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    public function getContentKey()
 | 
						|
    {
 | 
						|
        return $this->_contentKey;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set MVC enabled flag
 | 
						|
     *
 | 
						|
     * @param  bool $mvcEnabled
 | 
						|
     * @return Zend_Layout
 | 
						|
     */
 | 
						|
    protected function _setMvcEnabled($mvcEnabled)
 | 
						|
    {
 | 
						|
        $this->_mvcEnabled = ($mvcEnabled) ? true : false;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Retrieve MVC enabled flag
 | 
						|
     *
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    public function getMvcEnabled()
 | 
						|
    {
 | 
						|
        return $this->_mvcEnabled;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set MVC Successful Action Only flag
 | 
						|
     *
 | 
						|
     * @param bool $successfulActionOnly
 | 
						|
     * @return Zend_Layout
 | 
						|
     */
 | 
						|
    public function setMvcSuccessfulActionOnly($successfulActionOnly)
 | 
						|
    {
 | 
						|
        $this->_mvcSuccessfulActionOnly = ($successfulActionOnly) ? true : false;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get MVC Successful Action Only Flag
 | 
						|
     *
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    public function getMvcSuccessfulActionOnly()
 | 
						|
    {
 | 
						|
        return $this->_mvcSuccessfulActionOnly;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set view object
 | 
						|
     *
 | 
						|
     * @param  Zend_View_Interface $view
 | 
						|
     * @return Zend_Layout
 | 
						|
     */
 | 
						|
    public function setView(Zend_View_Interface $view)
 | 
						|
    {
 | 
						|
        $this->_view = $view;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Retrieve helper class
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    public function getHelperClass()
 | 
						|
    {
 | 
						|
        return $this->_helperClass;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set helper class
 | 
						|
     *
 | 
						|
     * @param  string $helperClass
 | 
						|
     * @return Zend_Layout
 | 
						|
     */
 | 
						|
    public function setHelperClass($helperClass)
 | 
						|
    {
 | 
						|
        $this->_helperClass = (string) $helperClass;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Retrieve plugin class
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    public function getPluginClass()
 | 
						|
    {
 | 
						|
        return $this->_pluginClass;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set plugin class
 | 
						|
     *
 | 
						|
     * @param  string $pluginClass
 | 
						|
     * @return Zend_Layout
 | 
						|
     */
 | 
						|
    public function setPluginClass($pluginClass)
 | 
						|
    {
 | 
						|
        $this->_pluginClass = (string) $pluginClass;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get current view object
 | 
						|
     *
 | 
						|
     * If no view object currently set, retrieves it from the ViewRenderer.
 | 
						|
     *
 | 
						|
     * @todo Set inflector from view renderer at same time
 | 
						|
     * @return Zend_View_Interface
 | 
						|
     */
 | 
						|
    public function getView()
 | 
						|
    {
 | 
						|
        if (null === $this->_view) {
 | 
						|
            require_once 'Zend/Controller/Action/HelperBroker.php';
 | 
						|
            $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
 | 
						|
            if (null === $viewRenderer->view) {
 | 
						|
                $viewRenderer->initView();
 | 
						|
            }
 | 
						|
            $this->setView($viewRenderer->view);
 | 
						|
        }
 | 
						|
        return $this->_view;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set layout view script suffix
 | 
						|
     *
 | 
						|
     * @param  string $viewSuffix
 | 
						|
     * @return Zend_Layout
 | 
						|
     */
 | 
						|
    public function setViewSuffix($viewSuffix)
 | 
						|
    {
 | 
						|
        $this->_viewSuffix = (string) $viewSuffix;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Retrieve layout view script suffix
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    public function getViewSuffix()
 | 
						|
    {
 | 
						|
        return $this->_viewSuffix;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Retrieve inflector target
 | 
						|
     *
 | 
						|
     * @return string
 | 
						|
     */
 | 
						|
    public function getInflectorTarget()
 | 
						|
    {
 | 
						|
        return $this->_inflectorTarget;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set inflector target
 | 
						|
     *
 | 
						|
     * @param  string $inflectorTarget
 | 
						|
     * @return Zend_Layout
 | 
						|
     */
 | 
						|
    public function setInflectorTarget($inflectorTarget)
 | 
						|
    {
 | 
						|
        $this->_inflectorTarget = (string) $inflectorTarget;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set inflector to use when resolving layout names
 | 
						|
     *
 | 
						|
     * @param  Zend_Filter_Inflector $inflector
 | 
						|
     * @return Zend_Layout
 | 
						|
     */
 | 
						|
    public function setInflector(Zend_Filter_Inflector $inflector)
 | 
						|
    {
 | 
						|
        $this->_inflector = $inflector;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Retrieve inflector
 | 
						|
     *
 | 
						|
     * @return Zend_Filter_Inflector
 | 
						|
     */
 | 
						|
    public function getInflector()
 | 
						|
    {
 | 
						|
        if (null === $this->_inflector) {
 | 
						|
            require_once 'Zend/Filter/Inflector.php';
 | 
						|
            $inflector = new Zend_Filter_Inflector();
 | 
						|
            $inflector->setTargetReference($this->_inflectorTarget)
 | 
						|
                      ->addRules(array(':script' => array('Word_CamelCaseToDash', 'StringToLower')))
 | 
						|
                      ->setStaticRuleReference('suffix', $this->_viewSuffix);
 | 
						|
            $this->setInflector($inflector);
 | 
						|
        }
 | 
						|
 | 
						|
        return $this->_inflector;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Enable inflector
 | 
						|
     *
 | 
						|
     * @return Zend_Layout
 | 
						|
     */
 | 
						|
    public function enableInflector()
 | 
						|
    {
 | 
						|
        $this->_inflectorEnabled = true;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Disable inflector
 | 
						|
     *
 | 
						|
     * @return Zend_Layout
 | 
						|
     */
 | 
						|
    public function disableInflector()
 | 
						|
    {
 | 
						|
        $this->_inflectorEnabled = false;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Return status of inflector enabled flag
 | 
						|
     *
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    public function inflectorEnabled()
 | 
						|
    {
 | 
						|
        return $this->_inflectorEnabled;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Set layout variable
 | 
						|
     *
 | 
						|
     * @param  string $key
 | 
						|
     * @param  mixed $value
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function __set($key, $value)
 | 
						|
    {
 | 
						|
        $this->_container[$key] = $value;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get layout variable
 | 
						|
     *
 | 
						|
     * @param  string $key
 | 
						|
     * @return mixed
 | 
						|
     */
 | 
						|
    public function __get($key)
 | 
						|
    {
 | 
						|
        if (isset($this->_container[$key])) {
 | 
						|
            return $this->_container[$key];
 | 
						|
        }
 | 
						|
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Is a layout variable set?
 | 
						|
     *
 | 
						|
     * @param  string $key
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    public function __isset($key)
 | 
						|
    {
 | 
						|
        return (isset($this->_container[$key]));
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Unset a layout variable?
 | 
						|
     *
 | 
						|
     * @param  string $key
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function __unset($key)
 | 
						|
    {
 | 
						|
        if (isset($this->_container[$key])) {
 | 
						|
            unset($this->_container[$key]);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Assign one or more layout variables
 | 
						|
     *
 | 
						|
     * @param  mixed $spec Assoc array or string key; if assoc array, sets each
 | 
						|
     * key as a layout variable
 | 
						|
     * @param  mixed $value Value if $spec is a key
 | 
						|
     * @return Zend_Layout
 | 
						|
     * @throws Zend_Layout_Exception if non-array/string value passed to $spec
 | 
						|
     */
 | 
						|
    public function assign($spec, $value = null)
 | 
						|
    {
 | 
						|
        if (is_array($spec)) {
 | 
						|
            $orig = $this->_container->getArrayCopy();
 | 
						|
            $merged = array_merge($orig, $spec);
 | 
						|
            $this->_container->exchangeArray($merged);
 | 
						|
            return $this;
 | 
						|
        }
 | 
						|
 | 
						|
        if (is_string($spec)) {
 | 
						|
            $this->_container[$spec] = $value;
 | 
						|
            return $this;
 | 
						|
        }
 | 
						|
 | 
						|
        require_once 'Zend/Layout/Exception.php';
 | 
						|
        throw new Zend_Layout_Exception('Invalid values passed to assign()');
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Render layout
 | 
						|
     *
 | 
						|
     * Sets internal script path as last path on script path stack, assigns
 | 
						|
     * layout variables to view, determines layout name using inflector, and
 | 
						|
     * renders layout view script.
 | 
						|
     *
 | 
						|
     * $name will be passed to the inflector as the key 'script'.
 | 
						|
     *
 | 
						|
     * @param  mixed $name
 | 
						|
     * @return mixed
 | 
						|
     */
 | 
						|
    public function render($name = null)
 | 
						|
    {
 | 
						|
        if (null === $name) {
 | 
						|
            $name = $this->getLayout();
 | 
						|
        }
 | 
						|
 | 
						|
        if ($this->inflectorEnabled() && (null !== ($inflector = $this->getInflector())))
 | 
						|
        {
 | 
						|
            $name = $this->_inflector->filter(array('script' => $name));
 | 
						|
        }
 | 
						|
 | 
						|
        $view = $this->getView();
 | 
						|
 | 
						|
        if (null !== ($path = $this->getViewScriptPath())) {
 | 
						|
            if (method_exists($view, 'addScriptPath')) {
 | 
						|
                $view->addScriptPath($path);
 | 
						|
            } else {
 | 
						|
                $view->setScriptPath($path);
 | 
						|
            }
 | 
						|
        } elseif (null !== ($path = $this->getViewBasePath())) {
 | 
						|
            $view->addBasePath($path, $this->_viewBasePrefix);
 | 
						|
        }
 | 
						|
 | 
						|
        return $view->render($name);
 | 
						|
    }
 | 
						|
}
 |