現在表示されているページが管理者用かどうかを検出するにはどうすればよいですか?


18

ページが現在表示されているユーザーが管理者と見なされているかどうかを検出するにはどうすればよいですか?管理テーマがアクティブ化されると、管理ページが認識されます。

私の場合、この条件が満たされていて、ユーザーが「モジュールを管理」できる場合、通知を出力したいと思います。

回答:


30

これはで行うことができますpath_is_admin(current_path())

たとえば、次のフック実装を使用できます。

function mymodule_init() {
  if (user_access('administer modules') && path_is_admin(current_path())) {
      drupal_set_message(t('Message'));
  }
}

1
答えは、OPの「管理」の定義によって異なります。この定義は、質問が最初に投稿されてから変更されている場合があります。コンテンツ編集ページは「admin」ページであると考える人もいますが、path_is_admin()はnode / 123 / editのようなページに対してfalseを返します。一方、このページでは管理テーマを使用する場合と使用しない場合があります。どのページでも潜在的に管理テーマを使用する可能性があり、どのページでも潜在的に管理テーマを使用しない可能性があります。OPの現在の定義は、「管理テーマがアクティブになったときに管理ページを認識できる」です。
アーノルドバード

9

ダニエルの答えは、現在のパスが「管理」であるかどうかを判断するのに正しいですが、管理テーマが使用されているかどうかをより直接確認したい場合(あなたの質問はあなたが探しているものについて少し曖昧なようです) …

global $theme;
if ($theme === variable_get('admin_theme', 'seven')) {
  // …
}

…ただし、ブートストラッププロセスの早い段階で実行しようとすると、つまり、$theme定義される前に失敗する可能性があります。


OPを明確にし、管理テーマを探すことを目的としていない。むしろ管理テーマは、単に管理パスを示しています。
ダニエル

これがあなたが質問を投稿し、自分で答えたものの1つであることがわかるまで、私はまだ混乱していました。デルプ、私は今それを得る。
ギャレットオルブライト


0

(Drupal 8の)管理テーマが使用されているかどうかを確認するには、次を使用できます。

$theme_name = \Drupal::service('theme.manager')->getActiveTheme()->getName();

テーマ名を取得します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.