Utilizzo dell'interfaccia utente jQuery integrata nel mio tema


25

Ogni pagina del mio tema dovrà usare l'interfaccia utente di jquery. So che è incluso in Drupal 7, ma non riesco davvero a decifrare la documentazione troppo tecnica di Drupal. Sembra che l'unico modo per farlo sia con il file template.php. Ma dal momento che non capisco quel file, sto cercando di evitare di farlo in quel modo.

C'è un altro modo o dovrei semplicemente provare il file template.php?


Cosa stai cercando di fare? Tutte le funzioni dell'interfaccia utente jquery e ciò che non dovrebbe essere disponibile per te. Eseguire il codice JS personalizzato su ogni pagina? Eseguire su una pagina specifica? un evento specifico? Esistono molti modi per far eseguire JS, in particolare drupal_add_js
LSU_JBob,

Sto cercando di usare .datepicker () su alcuni campi che compaiono in ogni singola pagina del mio tema. Forse anche altre cose più tardi.
Ben,

@Ben Ricorda di assegnare il premio se una risposta ha risolto il tuo problema.
googletorp

@googletorp Siamo spiacenti, la mia prima taglia. Premio assegnato.
Ben

Sento che molte delle risposte tralasciano il passaggio finale, che una volta incluso il drupal_add_library ('sistema', 'ui.button') o qualsiasi altra cosa, è necessario aggiungere una o due righe di javascript al tema che invoca effettivamente detto collegare.
Ryan Price,

Risposte:


36

Aggiungere JS a una pagina non è poi così difficile, anche se devi usare php.

Per i normali file JS, potresti fare qualcosa del genere

drupal_add_js($path_to_js)

Drupal ha tuttavia registrato l'interfaccia utente di jQuery nelle librerie, rendendo più semplice l'aggiunta di file JS e CSS per alcuni plugin dell'interfaccia utente di jQuery. Questo può essere fatto usando

drupal_add_library($module, $library);

Tutti i plugin dell'interfaccia utente jQuery esistono nel modulo di sistema, quindi puoi farlo

drupal_add_library('system', 'ui');

o

drupal_add_library('system', 'ui.accordion');

Alcuni di questi plugin hanno dipendenze perché usano altri plugin. Drupal lo gestisce in modo molto intelligente e includerà i componenti necessari.

Puoi vedere l'elenco completo dei plugin jQuery qui . Questo è formattato come un array PHP, ma generalmente la convenzione di denominazione è ui.PLUGIN-NAME.

Se è necessario aggiungere JS in ogni pagina, è possibile semplicemente aggiungere un hook di pagina di preelaborazione e aggiungerli lì. Questo sarebbe simile a questo nel file template.php.

function NAME_OF_THEME_preprocess_page(&$variables) {
  drupal_add_library('system', 'ui');
  drupal_add_library('system', 'ui.accordion');
  drupal_add_library('system', 'effects.highlight');
}

Ho provato ad aggiungere esattamente quello che hai qui (ma usando il mio nome del tema al posto di NAME_OF_THEME) a ​​template.php e non ha funzionato. Qualche idea? Questo è quello che ho: function nocturnal_preprocess_page(&$variables) { drupal_add_library('system', 'ui'); drupal_add_library('system', 'ui.datepicker'); }
Ben

@ben Devi cancellare la cache ogni volta che aggiungi una nuova funzione hook o preprocess. Prova a svuotare la cache. Hai anche bisogno di un modo per testare se funziona, poiché stai solo aggiungendo file JS che non faranno nulla da soli.
googletorp

Ho svuotato la cache e dovrebbe funzionare su alcuni campi data che in precedenza utilizzavano un'interfaccia utente jquery con riferimento manuale. Ancora il debug, ma finora non ho trovato nulla di sbagliato.
Ben

@Ben Il primo passo è guardare l'origine e vedere se i file sono stati inclusi (disabilita l'aggregazione JS se attivata)
googletorp

3
@googletorp: Potresti approfondire un po 'la differenza tra drupal_add_library('system', 'ui');e drupal_add_library('system', 'ui.accordion');? Il primo sta recuperando tutto o solo il nucleo? Ho bisogno di una linea per ogni plugin che utilizzo?
Jarl,

4

hai provato il modulo date_popup ? funziona bene con l'API del modulo


Non voglio un modulo perché il modulo che ne ha bisogno è molto complesso e richiede una codifica personalizzata. È codificato nel modello per il tema. Sto cercando di capire il modo migliore per utilizzare l'interfaccia utente jquery fornita con Drupal. L'unico modo per farlo funzionare è metterlo nella cartella del mio tema e collegarlo lì. Ma dal momento che sto eseguendo più siti su un'unica installazione di Drupal e tutti questi siti avranno bisogno dell'interfaccia utente di jQuery, volevo solo usare l'interfaccia utente jQuery integrata per impedire il lavoro duplicato.
Ben

dovresti essere in grado di chiamare qualsiasi roba jquery da qualsiasi sito e aggiungerla, è nel core drupal. Il modulo è creato con l'API del modulo?
LSU_JBob,

2
Perché il modulo è incorporato nei file modello? non è molto drupaly ... se non stai usando l'API del modulo perdi alcuni dei vantaggi, come la sicurezza integrata dagli attacchi di iniezione SQL. Consiglio vivamente di estrarre i moduli dai file modello e scrivere un modulo personalizzato in cui creare i moduli utilizzando l'API del modulo. Cerca di non essere un cowboy. In ogni caso, puoi fare riferimento a javascript da qualsiasi luogo usando drupal_add_js, qualcosa come questo drupal_add_js ('/ misc / ui / jquery.ui.core.min.js', 'file'); AND drupal_add_js ('/ misc / ui / jquery.ui.datepicker.js', 'file');
LSU_JBob,

3
Crea il modulo in un modulo personalizzato usando l'API Form, quindi nei file tpl chiama render (drupal_get_form ('form_id')); Prometto che il modulo api, magari con un po 'di javascript personalizzato, può gestire qualsiasi esigenza complessa che hai. Sento che stai solo rendendo le cose più difficili con te stesso cercando di stipare tutte queste funzionalità in un file tpl. Questo è tecnicamente il livello del tema, quindi non è buona pratica infiltrarsi in grossi pezzi di codice di back-end funzionale in essi.
LSU_JBob,

3
Penso che stia dicendo CREATE un modulo. Le cose funzionali, come le forme, appartengono ai moduli. L'API del modulo ti consente di creare qualsiasi tipo di modulo che puoi immaginare nel tuo modulo personalizzato. Il tema dovrebbe essere indipendente dalla funzionalità nella maggior parte dei casi. Ciò ti darà maggiore flessibilità lungo la strada.
Jonathan Rowny,

4
  1. Rifattorizza il tuo modulo hardcoded nel file .tpl in un'implementazione dell'API Form. Come ha detto @LSU_JBob, non vi è alcun motivo per cui si debba creare un modulo senza utilizzare FAPI. Ti consiglio di leggere la Guida di avvio rapido dell'API per moduli e di aggiungere la pagina di riferimento all'API per moduli .
  2. Una volta creato il modulo e in grado di inviare valori, elaborarlo, ecc., Scaricare e leggere il codice nel modulo Data contrib. La data viene utilizzata per fornire il tipo di popup della data che si desidera creare, ma per CCK in D6 e Core Fields in D7. Anche se non stai cercando di lavorare con i campi, il modulo Data utilizza l'interfaccia utente di JQuery per realizzare ciò che stai cercando di fare. Questo modulo dovrebbe fornire un solido esempio.

Grazie. Quei link sono utili. Non mi piace molto entrare nel PHP, ma credo di fare esattamente quello che voglio fare in questo caso, devo farlo. Probabilmente lo terrò nel file tpl per motivi di tempo, dato che non ho il tempo di imparare Drupal PHP al momento. Un buon consiglio da parte di tutti però.
Ben

3

Grazie googletorpper aver risposto.

Solo per aggiungere, se le cose non sono ancora molto chiare legate all'abilitazione dei plugin dell'interfaccia utente .

Tieni presente che quando menzionerai: drupal_add_library('system', 'ui');
Ciò NON abiliterà automaticamente tutti i plugin dell'interfaccia utente.

Puoi trovare un elenco dei plugin disponibili per l'interfaccia utente di jquery in drupal 7 qui: /misc/ui/

Per abilitare un plugin perticolare, ad esempio:, jquery.ui.slider.min.jsè necessario aggiungere questa riga:

drupal_add_library('system', 'ui.slider');

Spero sia utile.


2

Ho avuto questo problema di recente. Qualcuno mi ha dato il suo modulo personalizzato per forzare il caricamento dell'interfaccia utente di JQuery su ogni pagina. Puoi ricrearlo semplicemente. Innanzitutto, installa jquery_update e assicurati che funzioni. Quindi, crea e abilita questo modulo:

Crea una cartella nel percorso / to / moduli denominata 'jquery_force'.

All'interno, aggiungi due file:

jquery_force.info :

name = JQuery UI Force
description = Forces JQuery UI to always load
dependencies[] = jquery_update
package = User Interface
core = 7.x
files[] = jquery_force.module

jquery_force.module :

<?php
/**
 * @file jquery_force.module
 * TODO: Enter file description here.
 */

/**
 * Implements hook_init().
 */
function jquery_force_init() {
    drupal_add_library('system', 'ui');
}

2

L'aggiunta di un hook di preelaborazione nel template.phpfile non ha funzionato per me.

Ho semplicemente messo drupal_add_library('system', 'ui');nel template.phpfile da solo, funziona.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.