web-dev-qa-db-ja.com

drupal 7オーバーレイモジュールを使用してノードをオーバーレイで表示する

とにかくdrupal overlayコアモジュールを使用してノードコンテンツでオーバーレイを開く方法はありますか?少なくとも満足しているJavaScriptコードを再利用できれば=)

6
Luiz Guilherme

より速い方法は、モジュールに hook_admin_paths_alter() を実装して、他のモジュールによってhook_menu()で定義されているメニュー項目のどれが管理パスであるかを再定義することです。 hook_admin_paths() の実装から返された値は、次にhook_admin_paths_alter()の実装から変更され、Overlayモジュールから使用されて、オーバーレイとしてレンダリングするページを決定します。他のモジュールが同じ情報を使用して異なるテーマを使用してページをレンダリングする可能性があるため、追加のページがオーバーレイとして効果的にレンダリングされるようにするには、モジュールに依存関係としてOverlayモジュールが必要です。

_function mymodule_admin_paths_alter(&$paths) {
  $paths['node/*/view'] = TRUE;
}
_

ユーザーがexample.com/node/1などを表示しているときにこの実装が機能しないことに気付いた場合、example.com/node/1/viewを表示しているときにのみ、フックを実装します。次のコード。 「表示」タブがデフォルトであるため、私が提供した最初の実装は機能するはずです。ユーザーがexample.com/node/1を表示しているとき、Drupalは実際にexample.com/nodeを表示しています/ 1/view。

_function mymodule_admin_paths_alter(&$paths) {
  $paths['node/*'] = TRUE;
  $paths['node/*/view'] = TRUE;
}
_

最初の行ですべてのノードページをキャッチできるため(確認しませんでした)、そのパスの下にレンダリングすべきでない他のページがあるかどうかを確認します。その場合、実装は次のように変更できます(「node/*/backlinks」は単なる例です):

_function mymodule_admin_paths_alter(&$paths) {
  $paths['node/*'] = TRUE;
  $paths['node/*/view'] = TRUE;
  $paths['node/*/backlinks'] = FALSE;
}
_
  • 通常、モジュールはhook_admin_paths()を実装して、どのメニュー項目が管理ページであるかを報告します。つまり、ページが管理ページではない場合、そのページのエントリは返された配列に追加されません。
  • hook_admin_paths()は、独自のモジュールで定義されたメニュー項目に実装されます。他のモジュールから定義されたメニュー項目が管理ページである場合に再定義するには、hook_admin_paths_alter()を実装する必要があります。
  • 管理ページとして定義されているページには、アクセス制御が自動的に適用されません。つまり、管理ページであると報告されているメニュー項目を定義するモジュールは、「アクセスコールバック」と「アクセス引数」を使用して、管理ページに関連付けられているメニュー項目にアクセスできるユーザーを定義する必要があります。管理ページとして定義されたページは、それを行うモジュールがある場合にのみ、異なってレンダリングされます。
  • ノードモジュールは、管理ページのチェックボックスが選択されている場合にのみ、ノード編集ページを管理ページとして定義します。それらのページはすでに処理されています。
6
kiamlaluno

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

6
user842

ニュースレターのサインアップフォームを表示できるように、パネルとオーバーレイパスモジュールを使用することになりました。フォームが表示されましたが、ページの他のすべて(ヘッダー、フッター、サイドバーなど)も含まれていました。デフォルトのサイトテンプレートを介してニュースレターのサインアップページを表示していました。

したがって、トリッキーな解決策は、パネルの下のデフォルトのサイトテンプレートにバリアントを作成することでした。 Variantは、Node:TypeがWebformの場合にのみ選択されました。次に、余分なコンテンツを削除し、バリアントにメインコンテンツのみを表示させました。

プレスト!ニュースレターのサインアップページは、CSSハートのコンテンツに合わせてスタイルを設定できるフォームとして、オーバーレイで表示されました。

1
silentkrange