Drupalの組み込み管理オーバーレイjQueryスクリプトを使用して、自分のコンテンツをオーバーレイすることを考えています。出来ますか?
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;
}
オーバーレイパス モジュールを使用することもできます。これは、管理者が非管理ページの組み込みオーバーレイを使用できるようにする単純なモジュールです。つまり、サイトにさらにJavaScriptライブラリを追加しなくても、オーバーレイを使用してポップアップを実行できます。
この関数を特定のコンテンツタイプに実装して、そのコンテンツタイプのすべてのノードを管理オーバーレイで開く場合は、次のコードを使用できます。
<?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;
}
}
}
?>
たぶん Dialog API のように、多数のcontribモジュールの1つがあなたを助けることができます。
オーバーレイモジュールは、管理ページを表示する単一の目的のためにハードコーディングされています。独自のコンテンツにそのコードを確実に再利用するには、多大な労力が必要になります。