如何检查用户是否在Drupal的管理员部分?

12

如何检查当前页面是否在 Drupal 的管理部分?我想在主菜单的某些页面上显示登录表单,但登录页面显示在块选择菜单中。请提供解决方案。

5个回答

37

对于Drupal 7,您可以使用path_is_admin()函数。

if (path_is_admin(current_path())) {
  // Do stuff.
}

对于Drupal 8 isAdminRoute()函数

$is_admin = \Drupal::service('router.admin_context')->isAdminRoute();
if ($is_admin) {
  // Do stuff.
}

你可以像这样使用它:if (path_is_admin(current_path())) { // 做一些事情。 } - Mario Awad

7

我并不完全理解你的最终目标,但是这里有两个回答:

1)if (arg(0) == 'admin') { ... }将指示某人是否在管理员部分,因为整个管理员部分都有以admin/为前缀的路径。

2)在admin/settings/admin/theme中,您可以选择一个单独的主题用于管理员部分,然后当该主题正在加载而不是主题时,您就会知道某人是否在管理员中。


感谢您的回复,尽管我已经为管理部分选择了单独的主题,但前端主题仍然显示在块管理部分。我希望在管理部分的每个链接中都显示管理主题。 - Sreejith Sasidharan

2

我不确定你的最终目标是什么。需要更多解释吗?

如果你想检查路径,Scott Reynen的#1应该可以解决问题。

Drupal 6还有一个默认变量$is_admin。如果当前用户具有管理员权限,则为TRUE。检查此变量可能会有所帮助。有关更多信息,请参见这里:http://api.drupal.org/api/drupal/modules--system--page.tpl.php/6

对于你的后续问题,前端主题总是显示在admin/build/block中。这是正确和预期的行为,因为当你移动块并将它们分配到主题部分时,你需要知道它们在正在配置的主题中的位置。如果你启用了多个主题,请尝试在admin/build/block中单击不同主题的设置(次行)。你就会明白我的意思。


0

针对Drupal 6: @timmy和@Scott Reynen--arg(0)和substr($_GET['q'],0,5)等于'admin'会错过一些模式。下面的代码获取了我网站上的所有管理页面URL,您的网站可能更多或更少。

$arg = arg(); 
$isAdminPage = ($arg[0] == 'admin' || $arg[2] == 'edit' || $arg[0] == 'user' || $arg[2] == 'workflow' || $arg[2] == 'statistics');  
if ($isAdminPage) { 
  // do admin stuff
}

0

对于第一个问题,上述解决方案必须要做...至于第二个问题,似乎您想将登录块添加到页面中心(即主内容)并且仅在某些页面上这样做。如果是这种情况,您需要转到块配置页面,并将“用户登录”块设置为页面上所需的位置,然后单击保存。然后再次单击块旁边的配置,您将获得配置设置的选项,例如“在哪些页面上显示此块”等等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接