gwnobots/laravel-head

此包已被废弃且不再维护。未建议替代包。

为 Laravel 自动化并自定义布局的头部

dev-master 2016-09-20 14:03 UTC

This package is auto-updated.

Last update: 2019-05-25 07:03:19 UTC


README

废弃的包

此包不再维护。您可以在此处找到更多针对 Laravel 的管理元标签的近期包。

内容

此包自动简化并方便使用 Laravel 4 的 HTML5 布局的 <head></head> 部分。它提供以下工具:

  • 元标签。
  • 链接标签。
  • 样式表。
  • 脚本。
  • 字符集、favicon、标题和描述标签。
  • 搜索引擎。
  • 响应式设计。
  • Internet Explorer 兼容性。
  • Facebook 的 Open Graph 协议。
  • Twitter 卡。
  • Google 的通用分析。

安装

在 composer.json 中要求此包并运行 composer update

"gwnobots/laravel-head": "dev-master"

更新 composer 后,将 ServiceProvider 添加到 app/config/app.php 中的 providers 数组

'Gwnobots\LaravelHead\LaravelHeadServiceProvider',

您需要发布此包的配置

$ php artisan config:publish gwnobots/laravel-head

您不需要在 app/config/app.php 中添加别名,因为它已经在 ServiceProvider 中注册(参见 Philip BrownChris Fidao 的帖子)。

使用

您可以在 速查表 中查看所有可用方法的摘要。

渲染

要显示 <head></head> 部分中的所有自定义标签,只需在布局中添加

<head>
	<?php echo Head::render(); ?>
</head>

// or with a blade layout
<head>
	{{ Head::render() }}
</head>

基本设置

在包的 config.php 中,您可以设置一些默认值,如字符集、站点名称、描述、favicon 等。(有关更多说明,请参阅 config.php 中的注释)。如果未使用特殊方法(在路由或控制器中)覆盖当前请求的这些设置,则将使用这些设置。

// define encoding for <meta charset=""> tag
Head::setCharset('charset');

// define a title for <title> tag
Head::setTitle('title');

// de|activate the addition of default sitename to title
Head::noSitename();
Head::doSitename();

// define description for <meta name="description"> tag
Head::setDescription('description');

// define a favicon for <link rel=""> tags (relative to public path, without extension)
Head::setFavicon('favicon');

您也可以通过填充空格来删除一个标签,例如

Head::setFavicon('');

多个布局

设置

您可以通过在包的 config.php 中添加任意数量的布局来管理 <head></head> 部分的不同设置。您可以通过在配置文件末尾添加数组来覆盖一个或多个设置(请参阅 config.php 中的注释),例如

'mylayout' => array(
    'charset' => 'ISO-8859-1',
    'twitter' => array(
        'image' => 'an-image.jpg',
    ),
),

在此处,您将只为名为 'mylayout' 的布局覆盖元字符集和 Twitter 卡图像的默认值。其他设置将使用默认值。

您还应遵守路径结构

'layouts' => array(
    'custom' => array(
        'charset' => 'ISO-8859-1',
    ),
),

在此示例中,您将覆盖位于 app/views/layouts 目录中名为 'custom' 的布局的元字符集的默认值。

注册自定义布局

要使用自定义设置,您需要通知您的应用程序您正在使用特定的布局,该布局可能调用除默认设置之外的其它设置。

在您的控制器或Blade布局中,调用

Head::setLayout('mycustomlayout');

使用Laravel工具自动管理自定义布局的简单方法是向BaseController.php中添加一个构造函数,如下所示:

<?php

class BaseController extends Controller {

    public function __construct()
    {
        if ( ! is_null($this->layout))
        {
            Head::setLayout($this->layout);
        }
    }

    /**
    * Setup the layout used by the controller.
    *
    * @return void
    */
    protected function setupLayout()
    {   
        if ( ! is_null($this->layout))
        {
            $this->layout = View::make($this->layout);
        }
    }
}

像这样,当您在控制器中使用protected $layout = 'mylayout';设置布局时,您也将自动注册此包的这些方法。

特殊工具

搜索引擎

默认情况下,Head::render()方法会在非生产模式下通过在您的<head></head>部分添加内容,阻止您的网站被爬取和索引。

<meta name="robots" content="none">
Internet Explorer 兼容性

Head::render()方法还可以自动渲染两个用于强制IE兼容性的常用标签。在config.php中设置默认值(布尔值)为'ie_edge' => true|false,'html5_shiv' => true|false,以显示:

// ie_edge is true
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

// html5_shiv is true
<!--[if lt IE 9]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->

您也可以使用以下方式覆盖当前请求的默认设置:

// de|activate ie_edge
Head::noIeEdge();
Head::doIeEdge();

// de|activate html5_shiv
Head::noShiv();
Head::doShiv();
响应式设计

如果将config.php中的'responsive' => true|false,设置为true,响应式设计常用的标签将自动显示。它将渲染:

// responsive set to true
<meta name="viewport" content="width=device-width, initial-scale=1.0">

您也可以使用以下方式覆盖当前请求的默认设置:

// de|activate responsive
Head::noResponsive();
Head::doResponsive();

元标签

基本用法

您可以在您的路由或控制器中设置您需要的元标签的数量。

Head::addMeta(array('type' => array('value' => 'content')));

例如:

Head::addMeta(array(
	'name' => array(
		'copyright' => 'My Company',
		'author' => 'Me',
	),
	'http-equiv' => array(
		'pragma' => 'no-cache',
	),
	'property' => array(
		'og:title' => 'Title for Open Graph',
	),
));

将渲染:

<meta name="copyright" content="My Company">
<meta name="author" content="Me">
<meta http-equiv="pragma" content="no-cache">
<meta property="og:title" content="Title for Open Graph">

如果您只需要添加一个元标签,您也可以使用以下方式:

Head::addOneMeta('type', 'value', 'content');
Open Graph

如果您在config.php中激活了它,Head::render()方法可以自动显示针对Facebook Open Graph协议的一组元标签。您也可以设置一些默认值。如果未定义值或文件不存在,则不会显示任何标签。

// rendered HTML in <head></head> section if facebook's active is set to true in config.php
<meta property="fb:page_id" content="set in config.php">
<meta property="fb:app_id" content="set in config.php">
<meta property="fb:admins" content="set in config.php">
<meta property="og:image" content="set in config.php">
<meta property="og:url" content="current url">
<meta property="fb:type" content="website">
<meta property="og:site_name" content="default sitename set in config.php">
<meta property="og:title" content="same as title tag">
<meta property="og:description" content="same as description meta tag">

您可以使用以下方式为当前请求禁用Open Graph:

Head::noFacebook();
Head::doFacebook();

禁用还会删除您使用Head::addMeta()Head::addOneMeta()方法手动定义的Open Graph的标签。

Twitter Card

如果您在config.php中激活了它,Head::render()方法可以自动显示针对Twitter Card的一组元标签。您也可以设置一些默认值。如果未定义值或文件不存在,则不会显示任何标签。

// rendered HTML in <head></head> section if twitter's active is set to true in config.php
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="same as title tag">
<meta name="twitter:description" content="same as description meta tag">
<meta name="twitter:image:src" content="set in config.php">
<meta name="twitter:site" content="set in config.php">
<meta name="twitter:creator" content="set in config.php">
<meta name="twitter:url" content="current url">

您可以使用以下方式为当前请求禁用Twitter Card:

Head::noTwitter();
Head::doTwitter();

禁用还会删除您使用Head::addMeta()Head::addOneMeta()方法手动定义的Twitter Card的标签。

覆盖

您可以通过使用Head::addMeta()Head::addOneMeta()方法重新声明来覆盖任何元标签的任何值。它还将覆盖在config.php中设置的默认值。例如,您可以在控制器的构造函数中为元标签定义一个默认值,然后在某个动作中覆盖它,针对特定的请求,如下所示:

<?php

class FrontController extends BaseController {

	protected $layout = 'mylayout';

	function __construct()
	{
		Head::addOneMeta('name', 'author', 'Me');
	}

	public function index()
	{
		return View::make('home');
	}

	public function anotherPage()
	{
		Head::addOneMeta('name', 'author', 'Another Guy');
		return View::make('anotherpage');
	}

}

您可以通过将其填充为空,例如执行以下操作,来为特定请求删除元标签:

Head::addOneMeta('name', 'author', '');

覆盖也适用于特殊的工具,如 <meta name="viewport"><meta http-equiv="X-UA-Compatible">,但不适用于独立的 <meta name="description">

链接标签

您可以在您的路由或控制器中设置所需数量的链接标签。

Head::addLink(array(array('rel', 'href', 'type', array('attr' => 'value'), 'condition')));

类型、属性和条件是可选的。条件代表条件注释(见样式表以获取更多解释)。

例如:

Head::addLink(array(
	array('canonical', 'http://domain.com/whatyouwant'),
	array('alternate', 'http://url-to-your-feed', 'application/rss+xml', array('title' => 'RSS')),
));

将渲染:

<link rel="canonical" href="http://domain.com/whatyouwant">
<link rel="alternate" content="http://url-to-your-feed" type="application/rss+xml" title="RSS">

如果您只需要添加一个链接标签,您也可以使用

Head::addOneLink('rel', 'href', 'type', array('attr' => 'value'), 'condition');

与元标签不同,您不能覆盖链接标签。

样式表

基本用法

您可以在您的路由或控制器中设置所需数量的样式表。

Head::addCss(array('file' => 'media'));

默认情况下,如果您将其留空,媒体类型设置为 'all'。如果需要条件注释,您也可以使用

Head::addCss(array('file' => array('media', 'condition')));

例如:

Head::addCss(array(
	'firstfile' => 'screen and (min-width:480px)',
	'secondfile' => array('', 'lt IE 9'),
));

将渲染:

<link rel="stylesheet" media="screen and (min-width:480px)" href="http://domain.com/firstfile.css">
<!--[if lt IE 9]><link rel="stylesheet" media="all" href="http://domain.com/secondfile.css"><![endif]-->

您也可以只添加一个样式表

Head::addOneCss('file', 'media', 'condition');

其中媒体和条件是可选的。如果文件不存在,则不会显示该标签。

设置和外部资源

在 config.php 中,您可以为 .css 文件定义一个默认路径(assets -> paths -> css),相对于 public 路径。因此,当添加样式表时,您应使用默认路径中的文件路径和名称(不带扩展名)。

您还可以加载 config.php 中定义的外部资源(assets -> cdn)。您必须在 config.php 中添加样式表时使用与 cdn 相同的名称。

您不能覆盖样式表:只有尚未添加的样式表才会渲染,因此请注意依赖关系。

脚本

脚本的管理方式与样式表相同

Head::addScript(array('file' => 'load'));
Head::addScript(array('file' => array('load', 'condition')));
Head::addOneScript('file', 'load', 'condition');

仅接受空、'defer' 或 'async' 作为值。加载和条件是可选的。您还可以在 config.php 中设置路径和 cdn。

谷歌的通用分析

您可以通过在 config.php 中将 analytics 的 active 设置为 true,自动在 <head></head> 部分的末尾添加新的谷歌通用分析。别忘了添加您的产品 ID。如果不是生产模式,脚本将不会显示。默认情况下,通用分析脚本异步加载。

您还可以通过在 config.php 中填充 analytics 的脚本来覆盖脚本,例如如果您使用自定义方法或另一个服务提供商:粘贴完整的脚本,不要包含 <script></script> 标签。

您可以使用以下方式为当前请求禁用/启用脚本

Head:noAnalytics();
Head:doAnalytics();

杂项

您可以使用以下方式在 <head></head> 部分的末尾添加任何额外的标签或自定义代码,如注释:

// several additions
Head::addMisc(array('First additional code', 'Second additional code', ...));
// or only one addition
Head::addMisc('My additional code');

速查表

前往所有可用方法的摘要。