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

用于管理SEO的CakePHP插件

安装: 3,244

依赖者: 0

建议者: 0

安全性: 0

星星: 9

关注者: 3

分支: 2

开放性问题: 4

类型:cakephp-plugin

3.1.6 2020-03-12 09:36 UTC

README

Build Status Coverage Status

这是什么?

我总是需要为SEO目的在我的页面上添加元标签,每次编写工具来完成这项工作都变得很麻烦。所以我创建了一个组件,该组件通过挂钩事件系统来捕获beforeLayout事件,以将SEO数据注入到视图变量中。

我发现,将所有SEO功能都包含在组件中,可以使其更容易管理。

要求

  • CakePHP 3.6+
  • PHP 7.2+

安装

https://packagist.org.cn/packages/davidyell/seo

composer require davidyell/seo

设置

首先,您需要在您的/config/bootstrap.php中加载插件。

Plugin::load('Seo');

然后,您需要将其附加到您希望其运行的控制器上。我倾向于将其附加到我的AppController

// src/Controller/AppController.php initialize() method
$this->loadComponent('Seo.Seo' => [
	'defaults' => [
		'title' => 'Dave is epic',
		'description' => 'This is an epic plugin for epic people',
		'keywords' => 'epic,plugin'
	]
];

您需要更改一些配置设置以匹配您的设置。您可以在组件中的$settings类变量中找到这些设置。主要您需要更改$settings['defaults']以设置网站的默认标题、描述和关键词。

它如何工作

想法是您的模型将有一些在CMS中可编辑的字段用于SEO。一旦这些数据被设置为视图,组件就会捕获这些数据并将其自动注入到您的布局中。

因此,您的布局需要存在一些内容,以便组件能够正确地添加数据。

// For the page title
echo $this->fetch('title');

// For outputting the meta tags inside <head>
echo $this->fetch('meta');

数据库配置

这是由您来做的。您如何存储SEO数据超出了本插件的范围。但是,我建议在您的Contents表或与其关联的表中创建字段,字段为seo_title VARCHAR(255)seo_description TEXTseo_keywords VARCHAR(255)

技巧和窍门

在控制器中设置了两个视图变量,您想根据哪个设置来更改它?

// ProvidersController::beforeRender()

if (isset($this->viewVars['content'])) {
    $this->components()->get('Seo')->setConfig('viewVar', 'article');
} elseif (isset($this->viewVars['provider'])) {
    $this->components()->get('Seo')->setConfig('viewVar', 'provider');
}

视图变量访问接受哈希路径,因此您可以使用点表示法来访问深层嵌套的数据。

$this->Components->load('Seo.Seo', [
    'viewVar' => 'catalog',
    'fields' => [
        'title' => 'assigned_content.content.seo_title'
    ]
]);

别忘了您可以直接在组件的实例上设置配置。

// ExamplesController.php

$this->components()->get('Seo')->setConfig('fields.title', 'My new title');

错误处理中间件

能够捕获404错误并使用它们来管理SEO重定向非常有用。这允许只有不匹配您应用程序的URL才会重定向,从而避免了任何开销。

插件提供了一个基本的中间件用于此目的,可以将其实现到您的/src/Application.php

$this->redirects = [
    '/examples/first-example' => [
        'target' => '/tutorials/first',
        'code' => 301
    ]
];
$queue->add(new \Seo\Error\Middleware\ErrorHandlerMiddleware($this->redirects))