Aprire un link in un modale con ajax
Buonasera,
vi scrivo perchè ho un problema con una popup modal con drupal.
Quello che devo fare è la seguente cosa: quando l'utente clicca su un link questo mi riporta
ad una form per fare la ricerca avanzata, solo che invece di caricare la pagina a schermo interno,
ho la necessità che questa venga visualizzata come popup.
Per fare questo sto utilizzando ajax e la classe use-ajax in questo modo:
1)Nel file libraries.yml del mio tema ho dichiarato le seguenti dipendenze:
- core/drupal.dialog.ajax
- core/jquery.form
- core/jquery.ui
- core/ajax
- core/drupal.ajax
- core/dialog.ajax
- core/drupal
- core/drupalSettings
- core/jquery.once
- core/jquery
2)In un blocco personalizzato ho inserito il seguente codice:
<a class="use-ajax float-right" data-dialog-options="{"width":400} data-dialog-type="dialog" href="/modal/ricercaAvanzataForm">Ricerca avanzata</a>`
3)Nel file form che estende la classe FormBase e costruisce il form della ricerca, ho dichiarato questa istruzione:
$form['#attached']['library'][] = 'core/drupal.dialog.ajax';
$form['#attached']['library'][] = 'core/dialog.ajax';
$form['#attached']['library'][] = 'core/jquery';
$form['#attached']['library'][] = 'core/jquery.form';
Però quando clicco sul link, il form viene visualizzato a schermo interno e non come popup modal... Cosa sto sbagliando ?
Risposte
Controlla che il filtro di
Controlla che il filtro di input non ti filtri via attributi (basta verificare che il sorgente della pagina contenga esattamente il codice che hai inserito in modifica del blocco).
Questo è il codice sorgente
Questo è il codice sorgente interessato
<div class="row d-flex justify-content-center" id="rigaRicercaAvanzata">
<div class="col-xs-6 col-sm-6 col-md-6"><small id="divmodal"><a class="use-ajax float-right" data-dialog-options="{"width":400}" data-dialog-type="modal" href="/modal/ricercaAvanzataForm">Ricerca avanzata</a>` </small></div>
</div>
Mi sa che non sta andando
Mi sa che non sta andando perchè non trovo il file fisico drupal.dialog.ajax.js,
drupal.dialog.ajax come faccio ad installarlo?
Inoltre per il popup sto seguendo questa guida qua
https://www.drupal.org/docs/drupal-apis/ajax-api/ajax-dialog-boxes
Non devi installarlo fa parte
Non devi installarlo fa parte del core.
Domanda, se cambi momentamente il tema in Bartik, il link funziona?
Io ho fatto una prova su un tema custom (bootstrap) e inserendo questo codice in cima al template di un vista qualsiasi
<?php
{{ attach_library('core/drupal.dialog.ajax') }}
<a class="use-ajax float-right" data-dialog-type="modal" href="/node/200">Visualizza nodo</a>
?>
mi apre il nodo su un modale tramite ajax.
Fai un test anche solo aggiungendo il codice su un template generico (tipo page.html.twig o simile nel tuo tema), magari metti un nodo presente nel tuo sistema.
Provato ad inserire il codice
Provato ad inserire il codice nel file page.html.twig del tema, ma niente non mi apre il popup purtroppo.... da che può dipendere ?
Ho visto che sta facendo un
Ho visto che sta facendo un comportamento strano, sta funzionando a metà...
Cioè nella pagina principale nella index non funziona, ad esempio in www.miosito.it/
mentre all'interno di una pagina secondaria tipo www.miosito.it/node/30
dove viene sempre inserito il codice che mi hai passato, la popup si apre....
da che può dipendere che non si aprono nella pagina principale??
Grazie mille
Non ho idea purtroppo. Non
Non ho idea purtroppo. Non posso fare il debug della tua applicazione, posso solo darti un supporto su come fare qualcosa e in questo caso il codice funziona. Credo di non poter aggiungere altro!
Per poter meglio capire il
Per poter meglio capire il problema della popup cosa mi puoi suggerire di fare, per vedere perchè si apre nella pagina secondaria e non in quella primaria?? grazie
Rivedere il tema
Rivedere il tema approfonditamente se è customizzato, debuggare il javascript con tools di sviluppo, vedere se ci sono log del server o Drupal che possano indirizzarti, cambiare il tema, disattivare selettivamente moduli ... in altre parole fare una sessione di debugging.
Ho visto che praticamente la
Ho visto che praticamente la popup viene aperta all'interno del mio modulo,
dove nel file modulo.libraries ho la seguente dichiarazione:
gestioneutenti-js:
js:
js/funzioniutenti.js : {}
js/prova.js : {}
js/rimuovistandard.js : {}
dependencies:
- core/jquery
- core/jquery.once
- core/ajax
- core/jquery.ui.datepicker
- core/drupal.dialog.ajax #Required for dialogs
- core/jquery.form #If you also want to use Ajax for form operations
e poi nel file modulo.module ho la seguente funzione:
function gestioneutenti_page_attachments(array &$attachments) {
$attachments['#attached']['library'][] = 'boutique/agid';
$attachments['#attached']['library'][] = 'gestioneutenti/gestioneutenti-js';
}
non è che devo fare una cosa pure simile nel tema per farlo recuperare in tutte le pagine
del tema ?
La funzione
La funzione gestioneutenti_page_attachments viene richiamata alla costruzione di ogni pagina, quindi le librerie dovrebbero già essere presenti anche nella home. Puoi verificare semplicemente guardando il codice sorgente della pagina e controllando se esiste il link a core/misc/dialog/dialog.ajax.js. Se esiste la libreria c'è ma il problema è un altro.
Duplicato di Aprire un link
Duplicato di Aprire un link in un modale con ajax (use-ajax)