首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在403页上显示用户登录块?

如何在403页上显示用户登录块?
EN

Drupal用户
提问于 2019-01-15 13:24:53
回答 2查看 1.8K关注 0票数 4

对于D8,我有一个节点(内容类型:基本页面),我使用它作为自定义403 (访问拒绝)页面。

我将其设置为:/admin/config/system/site-information上的自定义403页。路径是/node/21,别名是/error/403

在块管理页面上,我将user登录块添加到内容区域。我添加了“仅显示在某些页面上”的限制:

  • /错误/*
  • /view/*
  • /node/21

我有一个视图,需要“添加内容类型ABC权限”才能访问。视图的路径是/view/abc。匿名用户没有此权限。

因此,作为一个匿名用户,我会访问/view/abc并向其展示/node/21的内容。但是,未显示用户登录块。

如果我转到块管理屏幕并删除“仅显示在特定页面上”的限制,那么我将该块视为/view/abc上的匿名用户,但我不想在每个页面上显示登录块;我只想在403 s的页面上显示它。

用户登录块只显示在自定义403页上的“路径”是什么?

EN

回答 2

Drupal用户

发布于 2019-01-17 17:08:22

一种方法是将页面模板添加到主题注册表中:

代码语言:javascript
复制
function MYMODULE_theme_suggestions_page_alter(array &$suggestions, array $variables) {

  //Allow theming the site error pages
  $route_name = \Drupal::routeMatch()->getRouteName();

  switch ($route_name) {
    case 'system.401':
    // Unauthorized Access.
    $error = 401;
    break;

    case 'system.403':
    // Access Denied.
    $error = 403;
    break;

    case 'system.404':
    // Page Not Found.
    $error = 404;
    break;
  }

  if (isset($error)) {
    $suggestions[] = 'page__' . $error;
  }

}

然后,在page--403.html.twig中,您可以使用Twig呈现特定的块。见:如何在特定节点中嵌入视图?细枝上的程序打印块

*我喜欢这种方法的一个原因是Login块是Drupal核心块,而不是自定义的。您可以随身携带一个很好的403模板文件,并且始终知道它会呈现出这个块。上面的预处理功能似乎是最少的侵入性和时间消耗(通过查看不同的方法),而且它提供了主题这些错误页面的能力。我认为将模板文件用于错误页面是非常理想的。

票数 2
EN

Drupal用户

发布于 2019-01-15 13:50:48

如果你能编码,你应该选择一个ConditionPlugin。

就像RequestPath*(ConditionPlugin)一样,我们构建了一个定制的RouteCondition插件。这就允许我们在每条路线上都有粒度。

在您的例子中,一个简单的ConditionPlugin可能是正确的起点。

下面是一个示例* (www/modules/custom/{your_module}/src/Plugin/Condition/NotFoundCondition.php)

代码语言:javascript
复制
getRouteName();

      // Does we have a match
      return strpos( $route_name, 'system.403') === 0 * $this->isNegated();

    // EDIT: the negate concept might be a bit overwelming at first.
    // Maybe you don't need it right now

  }

  public function summary() {
    if (!empty($this->configuration['negate'])) {
      return $this->t('Do not return true on 403 pages');
    }
    return $this->t('Return true on 403 pages');

  }
}

在缓存重新生成之后,您应该能够使用structure>block布局将登录块放置在403页上。

票数 0
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/275148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档