swisnl / laravel-head
自定义并自动化Laravel布局的头部
Requires
- php: >=7.0
- laravel/framework: ^5.0|^6.0|^7.0|^8.0
This package is auto-updated.
Last update: 2022-08-25 11:35:09 UTC
README
🚨 此包已弃用 🚨
此包已过时且很少使用,因此我们选择弃用它。您可自由地fork我们的代码并维护自己的副本,或使用许多替代方案之一。
此包自动化并简化了使用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 Brown和Chris 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 中的设置设置为 true,则可以自动显示响应式设计的常用标签('responsive' => true|false,
)。它将渲染
// 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'));
默认情况下,如果您留空,媒体设置为'所有'。如果您需要条件注释,您也可以使用
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');
Load只接受空白、'defer'或'async'作为值。Load和condition是可选的。您还可以在config.php中设置路径和cdn。
谷歌的通用分析
您可以通过在config.php中将分析活动设置为true来在<head></head>
部分的末尾自动添加新的谷歌通用分析。别忘了添加您的产品ID。如果不在生产模式下,脚本将不会显示。默认情况下,通用分析脚本异步加载。
您也可以通过在config.php中填写分析脚本来覆盖脚本,例如如果您使用自定义方法或另一个服务提供程序:粘贴完整的脚本,不要包含<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');
速查表
转到所有可用方法的摘要。