shor-tcut/ezseo

此包会记住已删除的位置,以渲染适当的410页面

v1.0.1 2018-07-20 15:57 UTC

README

目的和概述

ShorTcutEzSeoBundle 的创建旨在实现以下目标

  • 存储已删除位置的信息(但不会删除内容)
  • 捕获所有不存在的URL作为后备
  • 生成适当的410页面而不是通用的404页面,并向客户提供如何处理的额外信息
  • 如果您没有为404/410页面提供自定义布局和逻辑,则此包将提供后备页面
  • 此包还可以用于创建重定向或友好URL处理程序

感谢 Etecture GmbHCMS 使此库开源,这样我们就可以一步步地改进这个功能。

限制

当前状态适用于 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\HandleInterfaceHandleInterface::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集成
  • 为隐藏位置生成链接条目(不在每个路由器中)
  • 创建新的移除位置信号,直接集成到核心