web-dev-qa-db-ja.com

Drupal 7の管理者オーバーレイを手動で使用する方法は?

Drupalの組み込み管理オーバーレイjQueryスクリプトを使用して、自分のコンテンツをオーバーレイすることを考えています。出来ますか?

5
Logi

Overlayモジュールは、関連するパスの hook_admin_paths() の実装がTRUEを返すページをオーバーレイとしてレンダリングします。たとえば、Nodeモジュールから実行されるフックの実装は次のとおりです。

function node_admin_paths() {
  if (variable_get('node_admin_theme')) {
    $paths = array(
      'node/*/edit' => TRUE, 
      'node/*/delete' => TRUE, 
      'node/*/revisions' => TRUE, 
      'node/*/revisions/*/revert' => TRUE, 
      'node/*/revisions/*/delete' => TRUE, 
      'node/add' => TRUE, 
      'node/add/*' => TRUE,
    );
    return $paths;
  }
}

これは、Overlayモジュールが有効な場合、ノード編集フォームがオーバーレイとしてレンダリングされることを意味します。オーバーレイモジュールが有効でない場合、これらのページは管理テーマを使用してレンダリングされます。

他のモジュールによって実装されたパスの場合、モジュールは hook_admin_paths_alter() を実装できます。実装の例は次のようなもので、ユーザープロファイルページがオーバーレイでレンダリングされます。

function mymodule_admin_paths_alter(&$paths) {
  // Treat all user pages as administrative.
  $paths['user'] = TRUE;
  $paths['user/*'] = TRUE;
  // Treat the forum topic node form as a non-administrative page.
  $paths['node/add/forum'] = FALSE;
}
7
kiamlaluno

オーバーレイパス モジュールを使用することもできます。これは、管理者が非管理ページの組み込みオーバーレイを使用できるようにする単純なモジュールです。つまり、サイトにさらにJavaScriptライブラリを追加しなくても、オーバーレイを使用してポップアップを実行できます。

9
user842

この関数を特定のコンテンツタイプに実装して、そのコンテンツタイプのすべてのノードを管理オーバーレイで開く場合は、次のコードを使用できます。

<?php
/*
 * Implements hook_admin_paths_alter().
 */
function YOUR_MODULE_admin_paths_alter(&$paths) {
  $query = new EntityFieldQuery();
  $query->entityCondition('entity_type', 'node')
      ->entityCondition('bundle', 'YOUR_CONTENT_TYPE')
      ->propertyCondition('status', 1);
  $result = $query->execute();

  if (isset($result['node'])) {
    $nodes = array_keys($result['node']);
    foreach ($nodes as $node_id) {
      $node_path = 'node/' . $node_id;
      $paths[$node_path] = TRUE;
    }
  }
}
?>
3
Елин Й.

たぶん Dialog API のように、多数のcontribモジュールの1つがあなたを助けることができます。

1
tostinni

オーバーレイモジュールは、管理ページを表示する単一の目的のためにハードコーディングされています。独自のコンテンツにそのコードを確実に再利用するには、多大な労力が必要になります。

1
tim.plunkett