html.php

来自「Cake Framwork , Excellent」· PHP 代码 · 共 838 行 · 第 1/2 页

PHP
838
字号
<?php/* SVN FILE: $Id: html.php 7118 2008-06-04 20:49:29Z gwoo $ *//** * Html Helper class file. * * Simplifies the construction of HTML elements. * * CakePHP(tm) :  Rapid Development Framework <http://www.cakephp.org/> * Copyright 2005-2008, Cake Software Foundation, Inc. *								1785 E. Sahara Avenue, Suite 490-204 *								Las Vegas, Nevada 89104 * * Licensed under The MIT License * Redistributions of files must retain the above copyright notice. * * @filesource * @copyright		Copyright 2005-2008, Cake Software Foundation, Inc. * @link				http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project * @package			cake * @subpackage		cake.cake.libs.view.helpers * @since			CakePHP(tm) v 0.9.1 * @version			$Revision: 7118 $ * @modifiedby		$LastChangedBy: gwoo $ * @lastmodified	$Date: 2008-06-04 13:49:29 -0700 (Wed, 04 Jun 2008) $ * @license			http://www.opensource.org/licenses/mit-license.php The MIT License *//** * Html Helper class for easy use of HTML widgets. * * HtmlHelper encloses all methods needed while working with HTML pages. * * @package		cake * @subpackage	cake.cake.libs.view.helpers */class HtmlHelper extends AppHelper {/************************************************************************* * Public variables *************************************************************************//**#@+ * @access public *//** * html tags used by this helper. * * @var array */	var $tags = array(		'meta' => '<meta%s/>',		'metalink' => '<link href="%s"%s/>',		'link' => '<a href="%s"%s>%s</a>',		'mailto' => '<a href="mailto:%s" %s>%s</a>',		'form' => '<form %s>',		'formend' => '</form>',		'input' => '<input name="%s" %s/>',		'textarea' => '<textarea name="%s" %s>%s</textarea>',		'hidden' => '<input type="hidden" name="%s" %s/>',		'checkbox' => '<input type="checkbox" name="%s" %s/>',		'checkboxmultiple' => '<input type="checkbox" name="%s[]"%s />',		'radio' => '<input type="radio" name="%s" id="%s" %s />%s',		'selectstart' => '<select name="%s"%s>',		'selectmultiplestart' => '<select name="%s[]"%s>',		'selectempty' => '<option value=""%s>&nbsp;</option>',		'selectoption' => '<option value="%s"%s>%s</option>',		'selectend' => '</select>',		'optiongroup' => '<optgroup label="%s"%s>',		'optiongroupend' => '</optgroup>',		'checkboxmultiplestart' => '',		'checkboxmultipleend' => '',		'password' => '<input type="password" name="%s" %s/>',		'file' => '<input type="file" name="%s" %s/>',		'file_no_model' => '<input type="file" name="%s" %s/>',		'submit' => '<input type="submit" %s/>',		'submitimage' => '<input type="image" src="%s" %s/>',		'button' => '<input type="%s" %s/>',		'image' => '<img src="%s" %s/>',		'tableheader' => '<th%s>%s</th>',		'tableheaderrow' => '<tr%s>%s</tr>',		'tablecell' => '<td%s>%s</td>',		'tablerow' => '<tr%s>%s</tr>',		'block' => '<div%s>%s</div>',		'blockstart' => '<div%s>',		'blockend' => '</div>',		'tag' => '<%s%s>%s</%s>',		'tagstart' => '<%s%s>',		'tagend' => '</%s>',		'para' => '<p%s>%s</p>',		'parastart' => '<p%s>',		'label' => '<label for="%s"%s>%s</label>',		'fieldset' => '<fieldset%s>%s</fieldset>',		'fieldsetstart' => '<fieldset><legend>%s</legend>',		'fieldsetend' => '</fieldset>',		'legend' => '<legend>%s</legend>',		'css' => '<link rel="%s" type="text/css" href="%s" %s/>',		'style' => '<style type="text/css"%s>%s</style>',		'charset' => '<meta http-equiv="Content-Type" content="text/html; charset=%s" />',		'ul' => '<ul%s>%s</ul>',		'ol' => '<ol%s>%s</ol>',		'li' => '<li%s>%s</li>',		'error' => '<div%s>%s</div>'	);/** * Base URL * * @var string */	var $base = null;/** * URL to current action. * * @var string */	var $here = null;/** * Parameter array. * * @var array */	var $params = array();/** * Current action. * * @var string */	var $action = null;/** * Enter description here... * * @var array */	var $data = null;/**#@-*//************************************************************************* * Private variables *************************************************************************//**#@+ * @access private *//** * Breadcrumbs. * * @var	array * @access private */	var $_crumbs = array();/** * Document type definitions * * @var	array * @access private */	var $__docTypes = array(		'html4-strict'  => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">',		'html4-trans'  => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">',		'html4-frame'  => '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">',		'xhtml-strict' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',		'xhtml-trans' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',		'xhtml-frame' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">',		'xhtml11' => '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'	);/** * Adds a link to the breadcrumbs array. * * @param string $name Text for link * @param string $link URL for link (if empty it won't be a link) * @param mixed $options Link attributes e.g. array('id'=>'selected') */	function addCrumb($name, $link = null, $options = null) {		$this->_crumbs[] = array($name, $link, $options);	}/** * Returns a doctype string. * * Possible doctypes: *   + html4-strict:  HTML4 Strict. *   + html4-trans:  HTML4 Transitional. *   + html4-frame:  HTML4 Frameset. *   + xhtml-strict: XHTML1 Strict. *   + xhtml-trans: XHTML1 Transitional. *   + xhtml-frame: XHTML1 Frameset. *   + xhtml11: XHTML1.1. * * @param  string $type Doctype to use. * @return string Doctype. */	function docType($type = 'xhtml-strict') {		if (isset($this->__docTypes[$type])) {			return $this->output($this->__docTypes[$type]);		}		return null;	}/** * Creates a link to an external resource and handles basic meta tags * * @param  string  $title The title of the external resource * @param  mixed   $url   The address of the external resource or string for content attribute * @param  array   $attributes Other attributes for the generated tag. If the type attribute is html, rss, atom, or icon, the mime-type is returned. * @param  boolean $inline If set to false, the generated tag appears in the head tag of the layout. * @return string */	function meta($type, $url = null, $attributes = array(), $inline = true) {		if (!is_array($type)) {			$types = array(				'rss'	=> array('type' => 'application/rss+xml', 'rel' => 'alternate', 'title' => $type, 'link' => $url),				'atom'	=> array('type' => 'application/atom+xml', 'title' => $type, 'link' => $url),				'icon'	=> array('type' => 'image/x-icon', 'rel' => 'icon', 'link' => $url),				'keywords' => array('name' => 'keywords', 'content' => $url),				'description' => array('name' => 'description', 'content' => $url),			);			if ($type === 'icon' && $url === null) {				$types['icon']['link'] = $this->webroot('favicon.ico');			}			if (isset($types[$type])) {				$type = $types[$type];			} elseif (!isset($attributes['type']) && $url !== null) {				if (is_array($url) && isset($url['ext'])) {					$type = $types[$url['ext']];				} else {					$type = $types['rss'];				}			} elseif (isset($attributes['type']) && isset($types[$attributes['type']])) {				$type = $types[$attributes['type']];				unset($attributes['type']);			}		} elseif ($url !== null) {			$inline = $url;		}		$attributes = array_merge($type, $attributes);		$out = null; 		if (isset($attributes['link'])) {			if (isset($attributes['rel']) && $attributes['rel'] === 'icon') {				$out = sprintf($this->tags['metalink'], $attributes['link'], $this->_parseAttributes($attributes, array('link')));				$attributes['rel'] = 'shortcut icon';			} else {				$attributes['link'] = $this->url($attributes['link'], true);			}			$out .= sprintf($this->tags['metalink'], $attributes['link'], $this->_parseAttributes($attributes, array('link')));		} else {			$out = sprintf($this->tags['meta'], $this->_parseAttributes($attributes, array('type')));		}		if ($inline) {			return $this->output($out);		} else {			$view =& ClassRegistry::getObject('view');			$view->addScript($out);		}	}/** * Returns a charset META-tag. * * @param  string  $charset The character set to be used in the meta tag. Example: "utf-8". * @return string A meta tag containing the specified character set. */	function charset($charset = null) {		$charset = current(array_filter(array($charset, strtolower(Configure::read('App.encoding')), 'utf-8')));		return $this->output(sprintf($this->tags['charset'], $charset));	}/** * Creates an HTML link. * * If $url starts with "http://" this is treated as an external link. Else, * it is treated as a path to controller/action and parsed with the * HtmlHelper::url() method. * * If the $url is empty, $title is used instead. * * @param  string  $title The content to be wrapped by <a> tags. * @param  mixed   $url Cake-relative URL or array of URL parameters, or external URL (starts with http://) * @param  array   $htmlAttributes Array of HTML attributes. * @param  string  $confirmMessage JavaScript confirmation message. * @param  boolean $escapeTitle	Whether or not $title should be HTML escaped. * @return string	An <a /> element. */	function link($title, $url = null, $htmlAttributes = array(), $confirmMessage = false, $escapeTitle = true) {		if ($url !== null) {			$url = $this->url($url);		} else {			$url = $this->url($title);			$title = $url;			$escapeTitle = false;		}		if (isset($htmlAttributes['escape'])) {			$escapeTitle = $htmlAttributes['escape'];			unset($htmlAttributes['escape']);		}		if ($escapeTitle === true) {			$title = htmlspecialchars($title, ENT_QUOTES);		} elseif (is_string($escapeTitle)) {			$title = htmlentities($title, ENT_QUOTES, $escapeTitle);		}		if (!empty($htmlAttributes['confirm'])) {			$confirmMessage = $htmlAttributes['confirm'];			unset($htmlAttributes['confirm']);		}		if ($confirmMessage) {			$confirmMessage = str_replace("'", "\'", $confirmMessage);			$confirmMessage = str_replace('"', '\"', $confirmMessage);			$htmlAttributes['onclick'] = "return confirm('{$confirmMessage}');";		} elseif (isset($htmlAttributes['default']) && $htmlAttributes['default'] == false) {			if (isset($htmlAttributes['onclick'])) {				$htmlAttributes['onclick'] .= ' event.returnValue = false; return false;';			} else {				$htmlAttributes['onclick'] = 'event.returnValue = false; return false;';			}			unset($htmlAttributes['default']);		}		return $this->output(sprintf($this->tags['link'], $url, $this->_parseAttributes($htmlAttributes), $title));	}/** * Creates a link element for CSS stylesheets. * * @param mixed $path The name of a CSS style sheet in /app/webroot/css, or an array containing names of CSS stylesheets in that directory. * @param string $rel Rel attribute. Defaults to "stylesheet". * @param array $htmlAttributes Array of HTML attributes. * @param boolean $inline If set to false, the generated tag appears in the head tag of the layout. * @return string CSS <link /> or <style /> tag, depending on the type of link. */	function css($path, $rel = null, $htmlAttributes = array(), $inline = true) {		if (is_array($path)) {			$out = '';			foreach ($path as $i) {				$out .= "\n\t" . $this->css($i, $rel, $htmlAttributes, $inline);			}			if ($inline)  {				return $out . "\n";			}			return;		}		if (strpos($path, '://') !== false) {			$url = $path;		} else {			if ($path{0} !== '/') {				$path = CSS_URL . $path;			}			if (strpos($path, '?') === false) {				if (strpos($path, '.css') === false) {			 		$path .= '.css';				}				if ((Configure::read('Asset.timestamp') === true && Configure::read() > 0) || Configure::read('Asset.timestamp') === 'force') {					$path .= '?' . @filemtime(WWW_ROOT . str_replace('/', DS, $path));				}			}			if (Configure::read('Asset.filter.css')) {				$path = str_replace(CSS_URL, 'ccss/', $path);			}			$url = $this->webroot($path);		}		if ($rel == 'import') {			$out = sprintf($this->tags['style'], $this->_parseAttributes($htmlAttributes, null, '', ' '), '@import url(' . $url . ');');		} else {			if ($rel == null) {				$rel = 'stylesheet';			}			$out = sprintf($this->tags['css'], $rel, $url, $this->_parseAttributes($htmlAttributes, null, '', ' '));		}		$out = $this->output($out);		if ($inline) {			return $out;		} else {			$view =& ClassRegistry::getObject('view');			$view->addScript($out);		}	}/** * Builds CSS style data from an array of CSS properties * * @param array $data * @return string CSS styling data */	function style($data, $inline = true) {		if (!is_array($data)) {			return $data;		}		$out = array();		foreach ($data as $key=> $value) {			$out[] = $key.':'.$value.';';		}		if ($inline) {			return join(' ', $out);		}		return join("\n", $out);	}/** * Returns the breadcrumb trail as a sequence of &raquo;-separated links. * * @param  string  $separator Text to separate crumbs. * @param  string  $startText This will be the first crumb, if false it defaults to first crumb in array * @return string */	function getCrumbs($separator = '&raquo;', $startText = false) {		if (count($this->_crumbs)) {			$out = array();			if ($startText) {				$out[] = $this->link($startText, '/');			}			foreach ($this->_crumbs as $crumb) {				if (!empty($crumb[1])) {					$out[] = $this->link($crumb[0], $crumb[1], $crumb[2]);				} else {					$out[] = $crumb[0];				}			}			return $this->output(join($separator, $out));		} else {			return null;		}	}/**

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?