Dimitri De Franciscis

Freelance Java/CMS/Database consultant, blogger, guitar player, photography, rubik cuber.

Scopri chi sono

In questo articolo vedremo come utilizzare i moduli Views e CCK per creare delle maschere di inserimento avanzate con Drupal. Utilizzeremo versione 6.x di Drupal perché al momento (Ottobre 2011) diversi moduli non sono ancora in una fase stabile quando usati in congiunzione con altri. C'è comunque da ben sperare, visto che CCK ormai è entrato nel core della versione 7.x, a beneficio di stabilità, supporto, documentazione e disponibilità di ulteriori estensioni.

Scopo del gioco

L'intento principale di questa guida è mostrare come creare contenuti "complessi" con Drupal senza dover sviluppare un modulo ad hoc (o impazzire con hack e trucchetti vari).

Vedremo come:

  • creare un nuovo tipo di contenuto "Evento", con relativa maschera per l'inserimento;
  • inserire dei dati di test;
  • creare un ulteriore tipo di contenuto, "Recensione Evento", che ha dei riferimenti a elementi di tipo Evento;
  • aggiungere al form di inserimento contenuti "Recensione Evento" dei controlli avanzati.

Installazione

Gli esempi che vedremo sono stati testati su una installazione standard di Drupal 6. Sul sito (e sul web) ci sono tutte le informazioni necessarie per eseguire questo compito correttamente e velocemente; l'unico consiglio è di installare il profilo Standard, perché quello Minimal è davvero... minimale!

Dopo aver installato il CMS, o se ne avete un'istanza già pronta, scaricare le versioni per Drupal 6.x di questi moduli:

Una volta scaricati gli archivi in locale bisogna estrarne i contenuti e copiarli in:
sites/all/modules
sotto la directory root di Drupal; se questo percorso non esiste, createlo manualmente. Alla fine in sites/all/modules dovreste avere quattro directory: cck, date, jquery_ui, views.

Attenzione: prima di attivare i moduli bisogna eseguire alcune azioni aggiuntive per il modulo jquery_ui! Riportiamo qui le istruzioni contenute nel file README.txt:

  • scaricare la versione 1.6 della libreria da Google Code:
    http://code.google.com/p/jquery-ui/downloads/list?q=1.6;
  • copia jquery.ui-1.6.zip in:
    sites/all/libraries (creare la directory se non esiste)
  • estrarre l'archivio: verrà creata la directory
    sites/all/libraries/jquery.ui-1.6
  • rinominare la directory appena creata in jquery.ui

Una volta fatto ciò possiamo andare nella sezione Administer / Site building / Modules e abilitare questi moduli:

  • Sezione CCK: Content, Node Reference;
  • Sezione Date/Time: Date, Date Popup;
  • Sezione User interface: jQuery UI;
  • Sezione Views: Views, Views UI.

Il sistema si accorge automaticamente delle dipendenze e vi chiederà conferma per l'attivazione di altri moduli, cliccate quindi su Continue per proseguire.

Un'ultima configurazione riguarda la corretta impostazione della data, necessaria per gli esempi che vi saranno proposti visto che utilizziamo il controllo Date; andate in Administer / Site configuration / Date and time e inserite queste impostazioni:

  • Default time zone: Europe/Rome;
  • First day of the week: Monday (lunedì).

Ricordatevi di cliccare sempre Save configuration, altrimenti le impostazioni non verranno memorizzate.

Creazione di un nuovo tipo di contenuto: Evento

Siamo pronti per creare un nuovo tipo di contenuto, che chiameremo Evento.

  • andare in in Administer / Content types;
  • cliccare su Add content type;
  • parametri:
    • Name: "Evento";
    • Type: "event";
    • Description: questo testo verrà mostrato all'utente nella pagina dove vengono elencati i tipi di contenuto, e servirà da guida. Ecco un esempio di descrizione:
      "Un evento è un avvenimento che avverrà ad una certa data e ora: riunioni, concerti, scadenze di vario genere."
  • clic su Save content type;
  • dall'elenco, cliccare su Manage fields a fianco di Evento;
  • cliccare su New Field per iniziare la creazione di un nuovo campo:
    • Label: Data;
    • Field name: aggiungere "date", il prefisso "field_" è fisso e non è modificabile;
    • Type: Date;
    • Form element: Text field with Date pop-up calendar;
    • clic su Save;
    • si arriva sulla pagina di configurazione del nuovo campo Data;
    • Input format: scegliere il formato preferito per l'inserimento di data e ora. Per un sito italiano il suggerimento è di utilizzare un formato con il pattern "dd/MM/yyyy - hh:mm", ovvero "giorno/mese/anno - ore:minuti";
    • Global Settings: selezionare required, per rendere il campo obbligatorio, mentre in To Date selezionare optional;
  • cliccare su Save field settings per salvare le configurazioni;
  • ora dovremmo essere ancora sulla schermata Manage Fields. I campi verranno mostrati nel form di inserimento nello stesso ordine che vediamo a video, spostiamo quindi il campo Date in alto, subito dopo Title;
  • cliccare su Save.

Inserimento di eventi di prova

Arrivati a questo punto ci sarà possibile creare nuovi contenuti di tipo Evento; se clicchiamo infatti su Create Content (sempre rimanendo loggati come administrator) avremo a disposizione anche questo nuovo tipo di contenuto, come possiamo vedere in questo screenshot:

 

Creiamo dunque alcuni eventi, in modo da poterli utilizzare come test per il resto di questa guida. Il form di inserimento sarà molto simile a questo:

Da notare:

  • i campi obbligatori: Title, From Date (data di inizio) dotato di controllo pop-up per l'inserimento facilitato della data, Body (descrizione dell'evento);
  • in Publishing options possiamo decidere se farlo comparire in homepage, nell'elenco degli ultimi contenuti inseriti.

Per gli scopi di questo articolo saranno necessari almeno questi eventi:

  • un evento in data futura, completo anche di ore/minuti;
  • un evento in data futura, me senza ore/minuti (tutto il giorno);
  • un evento in data passata.

Ovviamente per simulare una situazione reale voi ne potrete creare a piacimento.

Costruzione della view di supporto

Il modulo Views è uno dei più flessibili, permette infatti di separare i dati estratti dalla loro visualizzazione, moltiplicando le possibilità di personalizzazione e soprattutto riutilizzo delle stesse, riducendo drasticamente il lavoro necessario per implementare nuove visualizzazioni.

Il tipo di dati Recensione Evento, che creeremo più avanti, avrà bisogno di referenziare un evento già passato per associarlo alla recensione in esso contenuta. Perché ciò avvenga è necessario avere a disposizione un elenco degli eventi passati, una vera e propria query. Purtroppo questo spesso vuol dire dover scrivere da sè un modulo completo, ma con Views e CCK si può evitare. Vediamo come.

Andiamo in Administer / Site building / Views e clicchiamo su Add (in alto):

  • View name: "events_past";
  • View description: "Elenco degli eventi già passati";
  • View Type: lasciare selezionato Node;
  • cliccare su next.

La pagina successiva è il View Editor, un vero e proprio ambiente di sviluppo per view; da qui è possibile configurare ogni aspetto delle view: dati da estrarre, filtri, ordinamento, eccetera. Non solo, è possibile creare diverse visualizzazioni (display): page, feed, block, e altre. Queste ultime non sono altro che delle "materializzazioni" dei dati in forma di pagina a sè stante, feed RSS, blocco da inserire in altre pagine, e così via. Nel tab default sono memorizzate le configurazioni comuni a tutte le visualizzazioni. Nel nostro caso non siamo interessati ad una visualizzazione, ci serviranno infatti solamente i dati "nudi e crudi".

Passiamo ora alla configurazione della view:

  • selezionare il tab defaults;
  • cliccare su "+" nel riquadro Fields;
  • Groups: selezionare Node;
  • selezionare il checkbox a fianco di Node title;
  • cliccare su add (in basso);
  • verrano proposte altre (molte!)opzioni per il fine-tuning, ma al momento però non ci servono, clicchiamo quindi su Update (in basso);
  • cliccare ora sul "+" in Filters;
  • Groups: selezionare Node;
  • selezionare il checkbox a fianco di Node type;
  • cliccare su add;
  • Operator: lasciare selezionato "Is one of";
  • Node type: selezionare "Evento";
  • cliccare su Update.

Come avrete potuto notare, nella parte bassa della pagina c'è una sezione Live preview che ci mostra i dati effettivamente "pescati" dalla view. Molto comodo per capire se tutto sta procedendo correttamente! Grazie a questa preview possiamo anche notare che gli eventi caricati sono tutti gli eventi, senza distinzione fra quelli già passati e quelli futuri; rimediamo subito.

  • aggiungiamo un filtro cliccando ancora su "+" in Filters;
  • Groups: selezionare Content;
  • selezionare Content: Data (field_date) - From date;
  • cliccare su add;
  • nella pagina successiva lasciare tutte le opzioni al valore iniziale e cliccare su update;
  • nell'ultima schermata di configurazione, definire meglio il range di date da mostrare:
    • Operator: "Is less then or equal to";
    • lasciare intatti i controlli sotto Absolute value;
    • Date default: immettere la stringa "now";
    • cliccare su Update;
  • infine, cliccate su Save per non perdere le modifiche alla view.

Dopo l'ultima modifica, dovreste vedere solamente gli eventi con data di inizio anteriore o uguale ad oggi. Il tutto senza scrivere un solo comando SQL!

Creazione del tipo di contenuto Recensione Evento

Ora che abbiamo anche la view per recuperare l'elenco eventi passati possiamo dedicarci alla costruzione dell'ultimo content type: Recensione Evento.

  • andare in in Administer / Content types;
  • cliccare su Add content type;
  • parametri:
    • Name: "Recensione Evento";
    • Type: "event_review";
    • in Description inserire questa descrizione:
      "Recensione di un Evento, in forma di articolo o blog."
  • clic su Save content type;
  • dall'elenco, cliccare su Manage fields a fianco di Recensione Evento;
  • cliccare su New Field:
    • Label: "Evento collegato";
    • Field name: aggiungere "event" a "field_";
    • Type: Node Reference;
    • Form element: "Select list". Questo tipo di widget preleva i dati da una View o da una query SQL appositamente create;
    • clic su Save;
    • pagina successiva, Global Settings: selezionare required;
    • Content types that can be referenced: selezionare Evento;
    • nel tab Advanced, in View used to select the nodes selezionare la view che abbiamo creato sopra: events_past;
  • cliccare su Save field settings per salvare le configurazioni.
  • spostiamo il campo Evento collegato in alto, subito dopo Title;
  • cliccare su Save.

Prova "su strada"

Ora il nostro sistema dovrebbe essere pronto per essere utilizzato, è sufficiente creare un nuovo contenuto di tipo "Recensione Evento": ci verrà mostrata una tendina di selezione con tutti gli eventi già passati, per poterli recensire con un articolo dedicato. Ecco uno screenshot:

Un esempio concreto: Eric Sardinas Fanclub

Il fanclub ufficiale italiano di Eric Sardinas, realizzato dal sottoscritto, possiede un calendario eventi realizzato proprio in questo modo, dategli un'occhiata:
http://www.sardinasfans.com/view/events

E' talmente semplice che gli utenti stessi possono inserire gli eventi nella lista, senza dover scomodare gli amministratori.

Links


domandina...

Ciao Dimitri, cercando una guida su drupal mi sono imbattuto sul tuo sito. E meno male perché è utile e ora tra i preferiti. Avrei una domanda, considerando che sono un totale neofita di drupal ma non di cms: ho utilizzato la tua guida per pubblicare web links su drupal 7. Ho creato il tipo contenuto (weblink) e pubblicato con altri campi. Tutto bene. Io però voglio costruire una directory, e quindi avrei bisogno che ogni voce appartenente a 'Web Link' potesse essere categorizzata in categorie/sottocategorie. Come potrei fare?? Grazie mille e grazie anche della guida :) linx00@hotmail.com

Grazie per la fiducia, spero

Grazie per la fiducia, spero di meritarmela :)

Per quanto riguarda il tuo problema, penso che ti serva il tipo di nodo "Node reference", che memorizza un riferimento ad altri nodi. Purtroppo al momento non mi viene in mente un modo per sfruttarlo che al tempo stesso sia semplice da utilizzare dall'utente... però è una buona idea per un nuovo articolo!

In libreria

Se hai trovato utili le mie guide, o hai trovato particolarmente interessante o divertente un articolo, perché non offrirmi una birra? Con PayPal è molto semplice, basta cliccare sul pulsante qui sotto e seguire la procedura:

Sito ospitato presso Web4Web

Web4Web.IT - Low Cost Hosting