Drupal 8のコア関数を使用してモーダルウィンドウでページを開くことを試みています。残念ながら、それに関する公式ドキュメントを見つけるのは非常に難しく、このトピックを扱っているブログのほとんどは しかし、私の知る限り、 a要素に次の属性を追加することで、モーダルダイアログを作成できるはずです。
class="use-ajax” data-dialog-type="modal"
したがって、完全な例は次のようになります。
<a href="/impressum/lizenzen/43" class="use-ajax" data-dialog-type="modal">
<span class="glyphicon glyphicon-copyright-mark" aria-hidden="true"></span>
</a>
私の場合/impressum/lizenzen/43
は、ビューページへのパスです。
これは機能するようですが、管理者としてログインしている場合のみです。これは権限の問題ではないようなので、管理テーマ( Seven )に関連していると思います。これには、 のコアライブラリが含まれる場合がありますBootstrap (私のサイトで使用しているもの)はそうではないかもしれません。しかし、奇妙なことに、モーダルのタイトルバーに、ページタイトルの代わりに文字列「Array」が表示されました。これは、文字列の会話への予期しない配列が発生したことを想定しています:
誰かできましたか
これは、あなたが言及したAPI変更の公式ドキュメントです:
Modal/dialog/ajaxは、ヘッダーを受け入れる代わりにクエリパラメータを使用しています
最も重要な詳細は、このライブラリを添付することです:
$build['#attached']['library'][] = 'core/drupal.dialog.ajax';
これがなくても管理ページでこれが機能する理由を尋ねます。その理由は、管理ページはすでにほとんどのDrupal jQueryライブラリに依存しているが、非管理ページはjQueryなしでロードされている(これはD8のパフォーマンスが大幅に向上している)ためです。
Bootstrapテーマ
Bootstrapテーマのテーマ設定で有効になっている場合、「jQuery Modal」は「Bootstrap Modal」に置き換えられます。次のコードスニペットを参照してください:
LibraryInfo :: alter()
elseif ($extension === 'core') {
// Replace core dialog/jQuery UI implementations with Bootstrap Modals.
if ($this->theme->getSetting('modal_enabled')) {
$libraries['drupal.dialog']['override'] = 'bootstrap/drupal.dialog';
$libraries['drupal.dialog.ajax']['override'] = 'bootstrap/drupal.dialog.ajax';
}
これを機能させるには、上記と同じコアライブラリをアタッチして、Bootstrapテーマがこれらのコアライブラリを見つけてオーバーライドできるようにします。
これをテーマに追加しようとしている人は、JS依存関係の下のdrupal.dialog.ajaxをlibraries.ymlファイルに追加するだけです。
- core/drupal.dialog.ajax
テーマの依存関係はこちら の詳細。
ドキュメンテーションにも苦労しました。しかし、D8 Coreが提供するダイアログAPIを使用して、モーダルを機能させることができました。
confirmationDialog = Drupal.dialog(CONTENT_OF_MODAL, {
dialogClass: 'ADD_ANY_CLASSES',
resizable: false,
closeOnEscape: false,
create: function () {
$(this).parent().find('.ui-dialog-titlebar-close').remove();
},
beforeClose: false,
close: function (event) {
$(event.target).remove();
}
});
モーダルの表示
confirmationDialog.showModal();
モーダルを閉じる
confirmationDialog.close();
匿名ユーザーにはajaxが自動的にロードされないため、テーマはcore/drupal.ajaxへの依存関係を宣言する必要があります。
dependencies:
- core/jquery
- core/drupal.ajax
- core/drupal
- core/drupalSettings
- core/jquery.once