大卫耶尔 / seo
用于管理SEO的CakePHP插件
Requires
- php: >=7.2
- cakephp/cakephp: ~3.6
- davidyell/seo-redirector: ^0
Requires (Dev)
- cakephp/cakephp-codesniffer: ~3.0
- phpunit/phpunit: ^5.7.14|^6.0
- satooshi/php-coveralls: ^2.0
This package is auto-updated.
Last update: 2024-01-18 20:40:03 UTC
README
这是什么?
我总是需要为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 TEXT
和seo_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))