shor-tcut / ezseo
此包会记住已删除的位置,以渲染适当的410页面
Requires
- php: ^7.1
- doctrine/dbal: 2.6.3
- doctrine/doctrine-bundle: ~1.2
- doctrine/orm: *
README
目的和概述
ShorTcutEzSeoBundle 的创建旨在实现以下目标
- 存储已删除位置的信息(但不会删除内容)
- 捕获所有不存在的URL作为后备
- 生成适当的410页面而不是通用的404页面,并向客户提供如何处理的额外信息
- 如果您没有为404/410页面提供自定义布局和逻辑,则此包将提供后备页面
- 此包还可以用于创建重定向或友好URL处理程序
感谢 Etecture GmbH 和 CMS 使此库开源,这样我们就可以一步步地改进这个功能。
限制
当前状态适用于 eZ Publish 5.x 安装。404 的处理方式与 eZ Platform 不同。
安装
- 复制包,并在内核中激活包(在 eZ Publish 5 中是 EzPublishKernel::registerBundles() 方法)
- 在 composer.json 中 require
composer require shor-tcut/ezseo
- 生成数据库
ezpublish/console doctrine:schema:update
(或bin/console
或其他)
配置选项
服务标签
页面交付
服务标签: sc.seo.handle
可能的属性: priority
带有该标签的服务应实现 Service\Handle\HandleInterface
。 HandleInterface::handle
方法获取一个响应对象,可以对其进行修改(状态码已设置,因此您可以使用它来区分404和410)。此方法返回一个布尔值。如果返回 false
,则不再使用具有较低优先级的其他服务(这应该在大多数情况下发生)。
路由
服务标签: sc.seo.custom_routing
可能的属性: method
如果您在安装中有一个自定义的路由服务(而不是默认的链式路由器),您可以在此处进行配置。默认的方法名称为 generate
。
参数
sc_seo.default.legacy_siteaccesses
在 eZ Publish 5.x 安装中,您可能有一些旧版站点访问(例如,管理员站点访问)。您必须排除这些站点访问,因为404始终在旧版堆栈中结束。
sc_seo.default.uri_exclude_pattern
已删除位置的重定向URL将保存为不同的翻译URL模式。如果站点访问包含在您的URL中,则最好排除该站点访问,以便仅根据翻译做出决定,而不是站点访问。
示例:您的站点访问(如许多网站一样)是语言代码
www.example.com/en/my/special/object
URL将是:/en/my/special/object
在这种情况下,最好排除/en
,因为您也可以通过/de/my/special/object
访问相同的对象!排除该前缀的模式(示例配置)将是
sc_seo.default.uri_exclude_pattern: ["^/[a-z]{2}"]
或者简单地说
sc_seo.default.uri_exclude_pattern: "^/[a-z]{2}"
如何记住位置
您必须手动调用该过程(目前):$locationMemoryService->addFromLocation($location, $siteAccesses)
位置是要删除的位置(但不是对象本身,否则无法建议其他内容对象)。$siteaccess可以是一个数组,以记住多语言URL。如果省略,则使用默认的站点访问。
如何使用记忆
/**
* @param Response $response
* @param MemoryEntity|null $memory
* @return bool
*/
public function handle(Response &$response, MemoryEntity $memory = null): bool
{
// please note: $response->getStatusCode is 410 in case $memory is not null.
// but you can change that, if you want to. This improves SEO rankings.
$view = null;
$params = ["foo" => "bar"];
$action = $memory ? $memory->getAction() : LocationMemory::ACTION_NONE;
switch ($action) {
case LocationMemory::ACTION_GONE:
$memoryData = $memory->getData(false);
$contentId = $memoryData->getContentId();
// do something awesome here or suggest other content
$view = $this-renderView("410.html.twig", $params);
break;
case LocationMemory::ACTION_REDIRECT:
// todo
break;
default:
break;
}
if (!$view) {
$view = $this->renderView('error404.html.twig', $params);
}
$response = $response->setContent($view);
// if you return false, the chain will be interrupted and no other handle will be called.
// returning true gives you the possibility to alter the response object.
return false;
}
可能的改进
- eZ Platform集成
- 为隐藏位置生成链接条目(不在每个路由器中)
- 创建新的移除位置信号,直接集成到核心