it-swarm.com.de

Modaler Dialog wird nicht geöffnet, wenn er nicht authentifiziert ist oder sich im Inkognito-Modus befindet

Hallo, ich verwende Drupal 8, um ein modales Popup beim Klicken auf einen Link zu rendern. Wenn ich jedoch als Administrator verbunden bin, wird das Popup gut gerendert, aber sobald ich mich abmelde oder den Inkognito-Modus des Browser Das Popup wird nicht angezeigt und die Seite wird zu dem im href-Tag festgelegten Link umgeleitet. Hier ist mein Link:

<a href="/mysite.com/contact/download_file_advance?nid=371" class="use-ajax" data-dialog-type="modal" data-accepts="application/vnd.drupal-modal" data-filename="Livre Blanc">SOME TEXT IN MODAL</a>

Kann mir jemand erklären, warum das so ist? Ich kann nicht herausfinden, warum, wenn ich verbunden bin, das modale Rendering gut ist, aber wenn es nicht verbunden ist, leitet es mich zum Knoten weiter.

5
EXE

Ajay ist korrekt, die Javascript-Abhängigkeiten werden für anonyme Benutzer standardmäßig nicht geladen. Folgendes habe ich meinem theme.libraries.yml Hinzugefügt, damit es funktioniert:

dependencies: 
  - core/jquery
  - core/drupal.dialog.ajax
5
Will

Für mich hat das Hinzufügen von Abhängigkeiten in library.yml nicht funktioniert, ich verwende drupal 8.x Version. Unten ist eine funktionierende Lösung für mich

Angenommen, Ihr Themenname lautet "abc", dann haben Sie eine Datei "abc.theme". Fügen Sie den folgenden Code in die Datei ein. Angenommen, Ihr Seitenaliaspfad lautet "abcde", wo Sie das Dialogfeld hinzufügen möchten

function abc_page_attachments_alter(&$page){
        $current_path = \Drupal::service('path.current')->getPath();
        $path = $current_path = \Drupal::service('path.alias_manager')->getAliasByPath($current_path);
        if($path == '/abcde') {
            $page['#attached']['library'][] = 'core/drupal.ajax';
        }
    }

wenn Sie die Bibliothek auf allen Seiten laden möchten, ersetzen Sie die obige Funktion durch

  function abc_page_attachments_alter(&$page){
                $page['#attached']['library'][] = 'core/drupal.ajax';
        }

leeren Sie den Cache und aktualisieren Sie Ihre Seite. Das Dialogfeld sollte jetzt funktionieren

1
Ekta Puri

Für mich war das einzige, was neben dem Hacken von PHP Code, der meiner Meinung nach ein Overkill wäre, hilfreich war, das Folgende zum MY_THEME.info.yml unter dem Abschnitt libraries:

- 'core/drupal.dialog.ajax'

In meinem Fall sah der gesamte Abschnitt unter Verwendung eines bootstrap-basierten Themas) folgendermaßen aus:

libraries:
  - 'bootstrap_freigeist/global-styling'
  - 'bootstrap_freigeist/bootstrap-scripts'
  - 'core/drupal.dialog.ajax'

Beachten Sie, dass das Hinzufügen des Skripts zum MY_THEME.libraries.yml hat den Trick nicht für mich getan.

0
user5950

Die hier veröffentlichten Antworten sind richtig. Sie können auch jQuery-Bibliotheken und die Ajax-Bibliotheken mit hook_page_attachments einbinden. Implementieren Sie diese Funktion einfach in Ihr Ihr Modul. Modul Datei, wobei der Name Ihres Moduls natürlich entsprechend ersetzt wird:

function yourmodule_page_attachments(array &$attachments) {
    $attachments['#attached']['library'][] = 'core/jquery';
    $attachments['#attached']['library'][] = 'core/drupal.dialog.ajax';
}

Dieses Snippet fügt allen Ihren Seiten die für jQuery und Ajax erforderlichen Bibliotheken hinzu. Anschließend können Sie Ihre eigene Logik darin schreiben, wenn Sie diese Bibliotheken nur auf bestimmte Seiten beschränken möchten.

Viel Glück!

0
Beto Aveiga

Sie müssen in Ihrem Design Code-Abhängigkeiten für Ajax und jQuery in Ihrer theme.libraries.yml - Datei hinzufügen.

Drupal lädt standardmäßig kein Ajax für anonyme Benutzer.

0
Ajay Singh