状态 草稿
Todo Add breadcrumb entry (2.1) and Proof read
官方最后更新时间 2008/11/10 15:07

HTML 辅助函数

HTML 辅助函数可以被用于调用样式表,JavaScript,图像链接和文字链接。

方法

specialchars()

'specialchars' 类似于 PHPhtmlspecialchars() 函数。不过还是有一些不同之处:

  • 它会自动使用 UTF-8 格式转换(代替了 ISO-8859-1)。
  • 它会自动把单引号和双引号转换为 HTML entities(而不是只有双引号)。
  • 它提供了内建的 fallback 功能,没有双重编码现有的HTML实体(PHP 5.2.3+)。

它提供两个参数:

  • [string] 需要编码的字符串
  • [boolean] 是否编码已存在的 HTML entities? – 默认为 TRUE

实例:

$string = '<p>"I\'m hungry"&mdash;Cookie Monster said.</p>';
echo html::specialchars($string);

返回结果:

&lt;p&gt;&quot;I&#039;m hungry&quot;&amp;mdash;Cookie Monster said.&lt;/p&gt;

如果设置第二个参数为 FALSE,那么存在的 HTML entities 会被保护。仔细地看 &mdash;。

echo html::specialchars($string, FALSE);
&lt;p&gt;&quot;I&#39;m hungry&quot;&mdash;Cookie Monster said.&lt;/p&gt;

anchor()

'anchor' 创建一个 HTML 链接(<a href=””></a>),自动链接内部页面或者存在的外部站点,它有四个参数:

  • [string] 设置想要链接的内部或外部页面
  • [string] 设置想超链接的标题
  • [array] 需要添加到链接里的属性
  • [string] 可用的协议:'ftp','irc' 等等 - 如果第一个参数是非绝对链接的外部页面你需要改变协议为 'http'。

实例 1:

echo html::anchor('home/news', 'Go to our news section!');

返回结果:

<a href="http://localhost/home/news">Go to our news section!</a>

实例 2:

echo html::anchor('irc://irc.freenode.net/kohana', 'Join us on IRC!', array('style'=>'font-size: 20px;'));

返回结果:

<a href="irc://irc.freenode.net/kohana" style="font-size: 20px;">Join us on IRC!</a>

file_anchor()

类似于 'anchor','file_anchor' 创建 HTML 链接(<a href=””></a>)链接非 Kohana 资源。因此,他总会带有站点 URL 的根域名(地址)。它有四个参数:

  • [string] 设置想要链接的内部或外部页面
  • [string] 设置想超链接的标题
  • [array] 需要添加到链接里的属性
  • [string] 可用的协议:'ftp','irc' 等等 - 如果第一个参数是非绝对链接的外部页面你需要改变协议为 'http'。

实例 1:

echo html::file_anchor('media/files/2007-12-magazine.pdf', 'Check out our latest magazine!');

返回结果:

<a href="http://localhost/media/files/2007-12-magazine.pdf">Check out our latest magazine!</a>

实例 2:

echo html::file_anchor('pub/index.html', 'The Public Linux Archive', array('id'=>'id432'), 'ftp');

返回结果:

<a href="ftp://localhost/pub/index.html" id="id432">The Public Linux Archive</a>

panchor()

类似于 'anchor',但是它的第一个协议属性被最后一个代替,它有四个参数:

  • [string] 可用的协议:'ftp','irc' 等等 - 如果第一个参数是非绝对链接的外部页面你需要改变协议为 'http'。
  • [string] 设置想要链接的内部或外部页面
  • [string] 设置想超链接的标题
  • [array] 需要添加到链接里的属性

实例:

echo html::panchor('irc', '/kohana', 'Join us on our custom IRC!');

返回结果:

<a href="irc://localhost/kohana">Join us on our custom IRC!</a>

anchor_array()

anchor_array($array) 创建一个以数组形式的链接(包含链接/标题参数)。参数:

  • [array] link/title pairs

实例:

echo Kohana::debug(html::anchor_array(array('home/news' => 'Go to our news section!', 'home/about' => 'Go to the about page')));

返回结果:

(array) Array
(
    [0] => <a href="/kohana/index.php/home/news">Go to our news section!</a>
    [1] => <a href="/kohana/index.php/home/about">Go to the about page</a>
)

email()

'email($email)' 生成混淆模式的 Email 地址。它会把 Email 地址的所有字符转为 HTML 可识别的 16 进制或部分随机输出以防止 SPAM 骚扰,其参数:

  • [string] E-mail 地址

实例:

echo Kohana::debug(html::email('test@mydomain.com'));

返回结果:

(string) t&#101;&#x73;&#116;&#x40;m&#121;&#x64;o&#109;&#x61;&#105;n&#46;&#x63;o&#109;

mailto()

'mailto' 输出 <a href=“mailto:”></a> 标签同时转换保护原有 Email 地址。它有三个参数:

  • [string] E-mail 地址
  • [string] 显示的标题
  • [string/array] 链接中的属性

实例:

echo html::mailto('info@example.com');

返回结果:

<a href="&#109;&#097;&#105;&#108;&#116;&#111;&#058;i&#x6e;fo&#x40;&#101;&#x78;&#x61;mp&#108;e&#x2e;&#x63;&#x6f;&#109;">i&#x6e;fo&#x40;&#101;&#x78;&#x61;mp&#108;e&#x2e;&#x63;&#x6f;&#109;</a>

meta()

'meta($tag, $value = NULL)' 创建 meta 标签。它有两个参数:

  • [string|array] 标签名或者数组形式的表示
  • [string] 标签 “content” 的值 - 默认 NULL
  • 返回 [string] meta 标签

实例:

echo html::meta('generator', 'Kohana 2.2');
echo html::meta(array('generator' => 'Kohana 2.2', 'robots' => 'noindex,nofollow'));

返回结果:

<meta name="generator" content="Kohana 2.2" />
 
<meta name="generator" content="Kohana 2.2" />
<meta name="robots" content="noindex,nofollow" />

stylesheet()

'stylesheet'调用外部的 CSS 文件且可以忽略输入 .css 后缀。它有三个参数:

  • [string/array] 本地的 css 文件字符串或数组形式的文件序列
  • [string/array] 媒体类型:'screen','print' 或 'aural'
  • [boolean] 如果链接包含 '/index.php/' 请设置为 TRUE - 这个通过 Kohana(通常是一个媒体控制器)请求和使用绝绝对路径简单调用文件是不同的

实例:

echo html::stylesheet(array
(
    'media/css/default',
    'media/css/menu'
),
array
(
    'screen',
    'print'
), FALSE);

返回结果:

<link rel="stylesheet" href="http://localhost/media/css/default.css" media="screen" />
<link rel="stylesheet" href="http://localhost/media/css/menu.css" media="print" />

重要提示

如果你的 Kohana 框架需要 “index.php” 包含在 URL 中别忘了添加最后一个参数并设置为 TRUE(除非你在设置里修改了相应的设置,再 Christophe 的教程可以解释:http://kohanaphp.com/tutorials/video/working_with_media_files.html)。

Version 2.1

对于 2.2 版本之前它只存在两个参数:
  • [string/array] 本地的 css 文件字符串或数组形式的文件序列
  • [boolean] 如果链接包含 '/index.php/' 请设置为 TRUE

link()

'link' 调用像是内部 feed 之类的文件并输出 <link> 标签。链接样式不也可以使用 <link> 但是 html::stylesheet() 辅助函数可以用下面的这些参数:

  • [string/array] 字符串或数组形式的本地文件
  • [string/array] 字符串或数组形式的 'rel' 属性(例如:stylesheet,alternate)
  • [string/array] 字符串或数组形式的 'type' 属性(application/rss+xml 等)
  • [boolean] 设置为 TRUE 会制定文件后缀,默认为 FALSE
  • [string/array] 字符串或数组形式的 'media' 属性(print,screen 等)
  • [boolean] 如果链接包含 '/index.php/' 请设置为 TRUE - 这个通过 Kohana(通常是一个媒体控制器)请求和使用绝绝对路径简单调用文件是不同的

实例

echo html::link(array
(
    'welcome/home/rss',
    'welcome/home/atom'
),
'alternate',
array('application/rss+xml','application/atom+xml')
, FALSE);

返回结果:

<link rel="alternate" type="application/rss+xml" href="http://localhost/welcome/home/rss" />
<link rel="alternate" type="application/atom+xml" href="http://localhost/welcome/home/atom" />

重要通知

如果你的 Kohana 框架需要 “index.php” 包含在 URL 中别忘了添加最后一个参数并设置为 TRUE(除非你在设置里修改了相应的设置,再 Christophe 的教程可以解释:http://kohanaphp.com/tutorials/video/working_with_media_files.html)。

script()

'script' 调用外部的 JavaScript 文件且可以忽略输入 .js 后缀。它有两个参数:

  • [string/array] 本地的 js 文件字符串或数组形式的文件序列
  • [boolean] 如果链接包含 '/index.php/' 请设置为 TRUE - 这个通过 Kohana(通常是一个媒体控制器)请求和使用绝绝对路径简单调用文件是不同的

实例:

echo html::script(array
(
    'media/js/login',
    'media/js/iefixes.js'
), FALSE);

返回结果:

<script type="text/javascript" src="http://localhost/media/js/login.js"></script>
<script type="text/javascript" src="http://localhost/media/js/iefixes.js"></script>

重要提示

如果你的 Kohana 框架需要 “index.php” 包含在 URL 中别忘了添加最后一个参数并设置为 TRUE(除非你在设置里修改了相应的设置,再 Christophe 的教程可以解释:http://kohanaphp.com/tutorials/video/working_with_media_files.html)。

image()

'image' 创建一个 'img' HTML 标签。

它有三个参数:

  • [string/array] 为 'src' 属性设置的字符串或数组形式的图像的地址
  • [string/array] 为 'alt' 属性设置的字符串或数组形式的属性名称
  • [boolean] 如果链接包含 '/index.php/' 请设置为 TRUE。(to use views to serve images using Kohana)

实例 1:

echo html::image('media/images/thumbs/01.png');

返回结果:

<img src="http://localhost/media/images/thumbs/01.png" />
 
echo html::image(array('src' => 'media/images/thumbs/01.png', 'width' => '100', 'height' => 100), array('alt' => 'Thumbnail', 'class' => 'noborder'));
 
<img src="http://localhost/media/images/thumbs/01.png" width="100" height="100" alt="Thumbnail" class="noborder" />

实例 2 (使用 html::anchor 和 lightbox):

echo html::file_anchor('media/images/01.png', html::image('media/images/thumbs/01.png'), array('rel'=>'lightbox'));

返回结果:

<a href="http://localhost/media/images/01.png" rel="lightbox"><img src="http://localhost/media/images/thumbs/01.png" /></a>

重要提示

如果你的 Kohana 框架需要 “index.php” 包含在 URL 中别忘了添加最后一个参数并设置为 TRUE(除非你在设置里修改了相应的设置,再 Christophe 的教程可以解释:http://kohanaphp.com/tutorials/video/working_with_media_files.html)。

attributes()

'attributes' 解析输出 HTML 标签的属性。它有一个参数:

  • [array] 数组形式的 HTML 属性及值

Example 1:

echo html::attributes(
	array
	(
		'style' => 'font-size: 20px; border-bottom: 1px solid #000;',
		'rel' => 'lightbox',
		'class' => 'image'
	)
);

返回结果:

style="font-size: 20px; border-bottom: 1px solid #000;" rel="lightbox" class="image"

实例 2(使用 html::anchor)

echo html::file_anchor('home/images/01.png', 'See my picture!',
html::attributes(
	array
	(
		'style' => 'font-size: 20px; border-bottom: 4px solid #000;',
		'rel' => 'lightbox',
		'class' => 'image'
	)
)
);

返回结果:

<a href="http://localhost/home/images/01.png"  style="font-size: 20px; border-bottom: 4px solid #000;" rel="lightbox" class="image">See my picture!</a>

breadcrumb()

此函数以数组形式返回每个链接,参数:

  • [array] 需要分离的内容,默认使用 Router::$segments

实例

  echo Kohana::debug(html::breadcrumb());

返回结果:

Array
(
    [0] => <a href="http://localhost/ajax">Ajax</a>
    [1] => <a href="http://localhost/ajax/welcome">Welcome</a>
    [2] => <a href="http://localhost/welcome/text">Text</a>
)

创建面包屑(Breadcrumbs)

创建面包屑很简单;下面是范例:

public function get_breadcrumbs()
{
global $breadcrumbs;
 
$get_breadcrumbs = html::breadcrumb();
while (current($get_breadcrumbs))
 
$breadcrumbs .= current($get_breadcrumbs);
 
// 检查是否为最后一个面包屑
if (key($get_breadcrumbs) < (count($get_breadcrumbs)-1))
{
// 如果没有就添加一个面包屑
$breadcrumbs .= ' / ';
}
next($get_breadcrumbs);
}
return $breadcrumbs;
}

可以把此函数放在 'MY_Controller' 库并在每个页面激活。显示面包屑(例如,从视图):

echo $this->get_breadcrumbs();

此函数显示的每个面包屑都是超级链接。尽管如何,我们或许想移除最后一个面包屑的链接(这样能更好的说明是当前页)并加粗字体。我们可以使用下面的方法:

public function get_breadcrumbs()
{
global $breadcrumbs;
 
$get_breadcrumbs = html::breadcrumb();
while(current($get_breadcrumbs))
{
// 检查是否为最后一个面包屑
if(key($get_breadcrumbs) < (count($get_breadcrumbs)-1))
{
// 如果没有就添加一个面包屑
$breadcrumbs .= current($get_breadcrumbs).' / ';
}
else
{
// 如果是最后一个。移除链接并加粗字体
$breadcrumbs .= strip_tags("<strong>".current($get_breadcrumbs)."</strong>", "<strong>");
}
next($get_breadcrumbs);
}
return $breadcrumbs;
}

<box 100%> 注意:为了简化,上面的代码在库文件中包含了 HTML 的 <strong> 标签。如果使用 <spans> + CSS 样式代替前者对于改进代码会有很好的遵循 W3C。

helpers/html.txt · 最后更改: 2009/01/05 22:56 由 icyleaf