223 Zeilen
6,3 KiB
PHP
223 Zeilen
6,3 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_View
|
||
|
* @subpackage Helper
|
||
|
* @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
|
||
|
* @version $Id$
|
||
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||
|
*/
|
||
|
|
||
|
/** Zend_View_Helper_Placeholder_Container_Standalone */
|
||
|
require_once 'Zend/View/Helper/Placeholder/Container/Standalone.php';
|
||
|
|
||
|
/**
|
||
|
* Helper for setting and retrieving title element for HTML head
|
||
|
*
|
||
|
* @uses Zend_View_Helper_Placeholder_Container_Standalone
|
||
|
* @package Zend_View
|
||
|
* @subpackage Helper
|
||
|
* @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_View_Helper_HeadTitle extends Zend_View_Helper_Placeholder_Container_Standalone
|
||
|
{
|
||
|
/**
|
||
|
* Registry key for placeholder
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $_regKey = 'Zend_View_Helper_HeadTitle';
|
||
|
|
||
|
/**
|
||
|
* Whether or not auto-translation is enabled
|
||
|
* @var boolean
|
||
|
*/
|
||
|
protected $_translate = false;
|
||
|
|
||
|
/**
|
||
|
* Translation object
|
||
|
*
|
||
|
* @var Zend_Translate_Adapter
|
||
|
*/
|
||
|
protected $_translator;
|
||
|
|
||
|
/**
|
||
|
* Default title rendering order (i.e. order in which each title attached)
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $_defaultAttachOrder = null;
|
||
|
|
||
|
/**
|
||
|
* Retrieve placeholder for title element and optionally set state
|
||
|
*
|
||
|
* @param string $title
|
||
|
* @param string $setType
|
||
|
* @return Zend_View_Helper_HeadTitle
|
||
|
*/
|
||
|
public function headTitle($title = null, $setType = null)
|
||
|
{
|
||
|
if (null === $setType) {
|
||
|
$setType = (null === $this->getDefaultAttachOrder())
|
||
|
? Zend_View_Helper_Placeholder_Container_Abstract::APPEND
|
||
|
: $this->getDefaultAttachOrder();
|
||
|
}
|
||
|
$title = (string) $title;
|
||
|
if ($title !== '') {
|
||
|
if ($setType == Zend_View_Helper_Placeholder_Container_Abstract::SET) {
|
||
|
$this->set($title);
|
||
|
} elseif ($setType == Zend_View_Helper_Placeholder_Container_Abstract::PREPEND) {
|
||
|
$this->prepend($title);
|
||
|
} else {
|
||
|
$this->append($title);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set a default order to add titles
|
||
|
*
|
||
|
* @param string $setType
|
||
|
*/
|
||
|
public function setDefaultAttachOrder($setType)
|
||
|
{
|
||
|
if (!in_array($setType, array(
|
||
|
Zend_View_Helper_Placeholder_Container_Abstract::APPEND,
|
||
|
Zend_View_Helper_Placeholder_Container_Abstract::SET,
|
||
|
Zend_View_Helper_Placeholder_Container_Abstract::PREPEND
|
||
|
))) {
|
||
|
require_once 'Zend/View/Exception.php';
|
||
|
throw new Zend_View_Exception("You must use a valid attach order: 'PREPEND', 'APPEND' or 'SET'");
|
||
|
}
|
||
|
|
||
|
$this->_defaultAttachOrder = $setType;
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the default attach order, if any.
|
||
|
*
|
||
|
* @return mixed
|
||
|
*/
|
||
|
public function getDefaultAttachOrder()
|
||
|
{
|
||
|
return $this->_defaultAttachOrder;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Sets a translation Adapter for translation
|
||
|
*
|
||
|
* @param Zend_Translate|Zend_Translate_Adapter $translate
|
||
|
* @return Zend_View_Helper_HeadTitle
|
||
|
*/
|
||
|
public function setTranslator($translate)
|
||
|
{
|
||
|
if ($translate instanceof Zend_Translate_Adapter) {
|
||
|
$this->_translator = $translate;
|
||
|
} elseif ($translate instanceof Zend_Translate) {
|
||
|
$this->_translator = $translate->getAdapter();
|
||
|
} else {
|
||
|
require_once 'Zend/View/Exception.php';
|
||
|
$e = new Zend_View_Exception("You must set an instance of Zend_Translate or Zend_Translate_Adapter");
|
||
|
$e->setView($this->view);
|
||
|
throw $e;
|
||
|
}
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Retrieve translation object
|
||
|
*
|
||
|
* If none is currently registered, attempts to pull it from the registry
|
||
|
* using the key 'Zend_Translate'.
|
||
|
*
|
||
|
* @return Zend_Translate_Adapter|null
|
||
|
*/
|
||
|
public function getTranslator()
|
||
|
{
|
||
|
if (null === $this->_translator) {
|
||
|
require_once 'Zend/Registry.php';
|
||
|
if (Zend_Registry::isRegistered('Zend_Translate')) {
|
||
|
$this->setTranslator(Zend_Registry::get('Zend_Translate'));
|
||
|
}
|
||
|
}
|
||
|
return $this->_translator;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Enables translation
|
||
|
*
|
||
|
* @return Zend_View_Helper_HeadTitle
|
||
|
*/
|
||
|
public function enableTranslation()
|
||
|
{
|
||
|
$this->_translate = true;
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Disables translation
|
||
|
*
|
||
|
* @return Zend_View_Helper_HeadTitle
|
||
|
*/
|
||
|
public function disableTranslation()
|
||
|
{
|
||
|
$this->_translate = false;
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Turn helper into string
|
||
|
*
|
||
|
* @param string|null $indent
|
||
|
* @param string|null $locale
|
||
|
* @return string
|
||
|
*/
|
||
|
public function toString($indent = null, $locale = null)
|
||
|
{
|
||
|
$indent = (null !== $indent)
|
||
|
? $this->getWhitespace($indent)
|
||
|
: $this->getIndent();
|
||
|
|
||
|
$items = array();
|
||
|
|
||
|
if($this->_translate && $translator = $this->getTranslator()) {
|
||
|
foreach ($this as $item) {
|
||
|
$items[] = $translator->translate($item, $locale);
|
||
|
}
|
||
|
} else {
|
||
|
foreach ($this as $item) {
|
||
|
$items[] = $item;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$separator = $this->getSeparator();
|
||
|
$output = '';
|
||
|
if(($prefix = $this->getPrefix())) {
|
||
|
$output .= $prefix;
|
||
|
}
|
||
|
$output .= implode($separator, $items);
|
||
|
if(($postfix = $this->getPostfix())) {
|
||
|
$output .= $postfix;
|
||
|
}
|
||
|
|
||
|
$output = ($this->_autoEscape) ? $this->_escape($output) : $output;
|
||
|
|
||
|
return $indent . '<title>' . $output . '</title>';
|
||
|
}
|
||
|
}
|