Come modificare periodicamente gruppi di oggetti in Drupal

Più che come CMS, utilizzo Drupal come ambiente in cui sviluppare applicazioni web senza scrivere un rigo di codice (ed il fatto di riuscire ad usarlo senza scrivere codice è diventata una specie di sfida a me stesso).

Chi conosce Drupal sa che ciò è reso possibile da tre fattori principali:

  • La disponibilità di migliaia di moduli già pronti che aggiungono le più svariate funzionalità alla piattaforma
  • La possibilità di definire  nuovi tipi di oggetti (Entity) e di aggregarli in viste logiche (Views),  senza utilizzare comandi SQL
  • La possibilità di eseguire catene di azioni sugli oggetti all’occorrenza di certi eventi (Rules)

Il terzo punto è quello forse più potente ma anche quello da me finora meno esplorato, soprattutto da quando sono definitivamente passato alla versione 7 di Drupal che, proprio sulle Rules, differisce parecchio dalla precedente versione.

Grazie a DrupalizeMe, ho appena imparato (e quindi nella logica di questo sito, subito condivido) come utilizzare le Rules per controllare periodicamente e modificare insiemi di oggetti.  Un caso reale che ho risolto è chiudere automaticamente tutte le riunioni il giorno dopo la data di loro convocazione.  Dopo aver installato il modulo VBO, se non già presente, ecco come si fa:

  1. Creo un View che seleziona gli oggetti su cui intendo intervenire (nell’esempio, tutti gli oggetti di tipo Riunione con data di convocazione anteriore di 2 giorni rispetto alla data corrente ed il cui campo stato non sia già a “chiuso”). In questa View non creo una pagina o un blocco, tanto non verrà mai mostrata ed aggiungo il campo “Bulk Operation”, senza specificare quale sia l’azione da eseguire sugli oggetti selezionati.
  2. Creo un Component di Rule di tipo “Action Set” (Insieme di Azioni, nella versione italiana di Drupal), senza parametri di input
  3. Nel Component, aggiungo come prima azione “Load a list of entity objects from a VBO View” specificando come parametro la View creata al punto 1. Questa azione mette a disposizione delle azioni successive l’elenco degli oggetti da modificare, selezionati dalla View.
  4. Sempre nel Component, aggiungo come seconda azione un “Loop” e specifico come variabile del loop quella messa a disposizione dall’azione del passo 3. Questa azione serve per ripetere le azioni successive su tutti gli oggetti selezionati dalla View.
  5. Dentro il loop così creato, aggiungo le azioni che voglio eseguire sui singoli oggetti. Nel mio esempio, avevo creato una Component che, preso un nodo in input, mette il campo “Stato” a “Chiusa”.
  6. Fuori dal loop, aggiungo una azione “Pianifica la valutazione del componente”,   come componente da eseguire scelgo il Component stesso in cui è inserita, cioè il Component che ho creato al passo 2 e come temporizzazione metto “+1 day” cioè tra un giorno. In pratica, significa che il Component pianifica la riesecuzione di se stesso dopo un giorno dall’ultima esecuzione. Salvo il Component.
  7. Dall’elenco dei Component, clicco su “Esegui” a fianco del Component appena creato: in questo modo avvio il ciclo di esecuzioni del Component, che proseguirà senza interruzioni ogni giorno.  Sotto “Pianificazioni”  viene aggiunta una riga che informa quando avverrà la prossima esecuzione del Component.

I passi da 1 a 5 contengono la logica di selezione degli oggetti e le azioni da eseguire su di essi. I passi 6 e 7 garantiscono l’esecuzione automatica quotidiana delle azioni descritte ai passi precedenti.

E siccome una figura vale più di 100 parole, ecco lo screenshot del Component che ho creato seguendo questa procedura:

Clicca per ingrandire
Clicca per ingrandire

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...