In questa Guida vediamo come svolgere calcoli nella tua app, in tre modi diversi:
- mostrare in una Vista un valore calcolato sulla base degli altri Campi della Vista
- mostrare in una Vista un valore calcolato su un Campo di tutte le Entità elencate nella Vista
- memorizzare nel Campo di una Entità un valore calcolato sulla base di Campi dell'Entità stessa o di altre Entità correlate all'Entità
Calcolare un Campo sulla base di altri Campi
Per questa esigenza possiamo installare e attivare il modulo aggiuntivo "Views Simple Math Field", che aggiunge alle Viste il Campo speciale Globale - Simple Math Field - Views field that performs simple math expressions. Nella configurazione del Campo è possibile scrivere una formula, che calcola un valore sulla base del valore degli altri Campi presenti nella Vista. Nella formula si possono inserire operatori matematici, logici e di confronto ed altre operazioni complesse.
Ad esempio, se una Entità "Prestito" ha un Campo data "Inizio" ed un Campo data "Fine", in una Vista possiamo elencare a fianco di ogni Prestito un Campo Simple Math Field "Durata" che mostra la durata in giorni del Prestito. Ecco come:
| mostra la data di inizio | nella sezione Campi della Vista aggiungi il Campo "Inizio" in un formato leggibile all'Utente, es 13 febbraio 2026 e come Etichetta digita "Data di Inizio" |
| prepara la data di inizio per il calcolo della durata | aggiungi un secondo Campo "Inizio", come Formattatore seleziona Personalizzato e come Formato data/ora digita "U": questo formato rappresenta la data come numero di secondi passati da una data fissa (1 gennaio 1970; per una spiegazione di questo riferimento temporale vedi Tempo (Unix) su Wikipedia). L'elenco completo dei formati possibili per le date è nella apposita pagina del Manuale PHP . Nascondi il Campo, perché non serve all'Utente ma al calcolo della durata. |
| mostra la data di fine | aggiungi il Campo "Fine" in formato leggibile e come Etichetta digita "Data di Fine" |
| prepara la data di fine per il calcolo della durata | aggiungi un secondo Campo "Fine", come Formattatore seleziona Personalizzato e come Formato data/ora digita "U". Nascondi il Campo |
| crea il Campo dove svolgere il calcolo della durata | aggiungi un Campo Simple Math Field e come Etichetta digita "Durata" |
| seleziona i Campi che userai nel calcolo | nella configurazione del Campo, in Select the fields to use in the formula seleziona i due Campi nascosti. A fianco di ogni Campo è evidenziato il nome del Token corrispondente, che ha la forma @NOMEINTERNODELCAMPO es. @field_inizio_1 e @field_fine_1 (il _1 finale dipende dal fatto che sono la seconda copia dei Campi) |
| scrivi nel Campo la formula che calcola la differenza in giorni | Come Formula del Campo digita la formula di calcolo, che utilizza i Token sopra indicati: (@field_fine_1 - @field_inizio_1) / 86400 +1 La spiegazione della formula è semplice: dentro la parentesi viene calcolata la differenza in secondi tra la data di fine e la data di inizio; il risultato viene poi diviso per il numero di secondi di un giorno (86400) per tradurre i secondi in giorni. Alla differenza in giorni così calcolata si aggiunge 1, per evitare di mostrare 0 nel caso di un prestito che inizia e finisce nel medesimo giorno. Attiva l'opzione Arrotonda scegliendo zero numeri dopo la virgola, per mostrare un numero intero di giorni. |
| ATTENZIONE: Se nella Formula utilizzi un Token presente in Select the fields to use in the formula che però non hai selezionato, la Vista può andare in errore. Per rimediare, basta tornare nell'editor della Vista ed attivare la spunta a fianco del Token. |
Un Campo Simple Math è trattato come un qualunque altro Campo, quindi ad esso corrisponde un Token - di nome {{ field_views_simple_math_field }} - che ne contiene il valore calcolato e che può essere a sua volta usato nei Campi successivi.
Calcolare un valore basato su un Campo di tutte le Entità elencate
Per calcolare un valore come somma o media di un Campo delle Entità elencate in una Vista occorre installare e attivare il modulo aggiuntivo "Views Aggregator Plus". Questo modulo aggiunge il nuovo formato Table with aggregation options, che consente di modificare in modo significativo una Vista, qui però ci limitiamo a sfruttarne la capacità di aggiungere in fondo ad una Vista il valore calcolato su uno dei Campi elencati. Ad esempio, alla Vista prima esemplificata aggiungiamo la media della durata dei Prestiti:
| attiva l'aggregazione | nella sezione Formato della Vista seleziona Table with aggregation options |
| calcola la media del Campo "Durata" | nella sezione Formato della Vista, sotto Impostazioni identifica il Campo "Durata", attiva Apply column function e seleziona Median |
Memorizzare in un Campo un valore calcolato
Il valore calcolato in un Campo Simple Math è mostrato all'Utente, ma non viene salvato nell'Entità ed è quindi disponibile solo dentro la Vista. Se invece vuoi salvare in un Campo dell'Entità un valore calcolato in base agli altri Campi dell'Entità stessa o di altre Entità, ci sono due modi:
- aggiungere all'Entità un Campo di tipo Computed, messo a disposizione dal modulo aggiuntivo "Computed Field"; ma la configurazione di questo Campo richiede di saper programmare in PHP e quindi non rientra negli scopi di MieApp.
- costruire una procedura ECA che, al salvataggio dell'Entità, esegue il calcolo partendo dagli altri Campi dell'Entità e memorizza il risultato in un ulteriore Campo dell'Entità stessa.
Memorizzare in un Campo di una Entità il risultato di una elaborazione complessa consente di disporre immediatamente di quel risultato senza doverlo ricalcolare ogni volta che l'Entità viene mostrata. Tornando all'esempio svolto nei paragrafi precedenti di questa Guida, le date di inizio e fine di un Prestito della app "Vicinato" sono desumibili dalle Consegne effettuate lungo la "storia" del Prestito e una Vista EVA potrebbe mostrarle all'interno della pagina del Prestito. Ma questa soluzione sarebbe molto onerosa per mostrare tali date ad ogni Prestito elencato in una Vista ed usarle per calcolare la durata del Prestito. In casi come questi, è più conveniente aggiungere all'Entità "Prestito" due Campi data, in cui una procedura ECA attivata quando lo Stato del Prestito diventa "concluso" scrive le due date, identificate esaminando una tantum l'elenco delle Consegne associate al Prestito.