Questo sito web utilizza i cookie

Utilizziamo i cookie per personalizzare la tua esperienza utente e per studiare come viene utilizzato il nostro sito web.
Acconsenti ai nostri cookie se continui ad utilizzare questo sito web, se vuoi saperne di più clicca su più informazioni

Guide e tutorial pratici per joomla e le sue estensioni
Guide e tutorial pratici per joomla e le sue estensioni

Eseguire calcoli e operazioni aritmetiche è una delle funzioni più richieste di un form, infatti potremmo utilizzare un formulario per la creazione di un preventivo on-line.

Il plug in "calcolo" consente di fornire il codice PHP necessario per calcolare il valore di uno o più campi, quindi come sempre scaricate il plug in in questa pagina, installatelo ed attivatelo.

Nel plug in "calc" ci sono poche impostazioni da configurare, fra le quali ritengo la più importante l'attivazione del calcolo via AJAX, questa consente la visualizzazione del risultato ancora prima di premere il tasto di invio.

Ci sono altri 2 campi dove inserire manualmente altre informazioni, il primo una finestra di testo espandibile dove inserire la formula matematica, l'altro, è sempre una finestra di testo dove indicare i campi da "guardare", cioè quelli da considerare per effetture i calcoli.

fabrik plugin calc plug in per fare calcoli
fabrik plugin calc plug in per fare calcoli

Facciamo qualche esempio per renderci conto di come poter realizzare un form in grado di fare calcoli.

Primo esempio:

Iniziamo con qualcosa di facile, il calcolo di una addizione, quindi creiamo 2 campi di tipo field chiamondoli addizione1 e addizione2, poi creeremo un terzo campo scegliendo come tipo di campo "calc" nella lista dei plug in e lo chiameremo totale1.

Non sto a mettervi i dettagli passo passo per la creazione del form in quanto credo che se avete questo tipo di necessità avanzata, sarete oramai in grado di proseguire in autonomia, in ogni caso vi propongo l'articolo dove troverete i dettagli per la costruzione di un form con fabrik.

Adesso all'interno del plug in "calc" portiamoci nella tabs "MORE" ed inseriamo nel campo di testo espandibile "Osservazione campi Ajax" i nomi completi degli elementi tra parentesi graffe e separarti da una virgola:

{a_esempio1___addizione1},{a_esempio1___addizione2}

Questi elementi li potrete ricavare guardando la lista nella gestione elementi, quindi questo nome cambierà in base a come avete chiamato la vostra lista, la mia lista si chiama "a_esempio1", quindi i miei elementi sono:

fare calcoli con fabrik per joomla
  • a_esempio1___addizione1
  • a_esempio1___addizione2
  • a_esempio1___totale1

Voglio ricordare che il nome degli elementi è dato da una stringa comprendente il nome della tabella più il nome del campo e sono concatenati da 3 underscore (il meno basso o trattino basso) [nome tabella]___[nome campo]

Inserendo questa stringa:

{a_esempio1___addizione1},{a_esempio1___addizione2}

dentro la textarea "Osservazione campi Ajax" daremo al plug in "calc" l'informazione fondamentale per eseguire il calcolo, quindi ove vi fossero più campi coinvolti nel calcolo, questi dovranno eesere inseriti tutti in questa area fra parentesi graffe e separati da una virgola. Dopo l'ultimo campo non sarà necessario inserire una virgola.

Vediamo adesso le informazioni da inserire nella textarea "codice di calcolo":

return
{a_esempio1___addizione1}+
{a_esempio1___addizione2};

Ricordiamoci anche di attivare "Calcolo Ajax" inserendo l'impostazione su SI.

Adesso se ci portiamo nel form lato front end potremo inserire i nostri valori nei due campi e provare a fare la somma premendo invio subito dopo aver inserito il secondo valore, la funzione AJAX ci darà la somma degli elementi senza cambiare pagina, visualizzando il calcolo subito dopo il secondo box. Poi premendo invio salveremo questi dati nel database.

Facciamo un altro esempio un pò più complesso, voi naturalmente fate sempre riferimento ai nomi che darete al vostro form/lista.

Questa volta vogliamo calcolare il prezzo di una stampa di biglietti da visita, dove ci sono 5 variabili;

  • il numero di biglietti stampabili,
  • la grammatura della carta
  • il prezzo della stampa se solo fronte o fronte-retro,
  • il prezzo della plastificazione
  • il prezzo per un eventuale effetto rilievo

Quindi creiamo

  1. il primo campo di tipo field che servirà ad inserire il numero di biglietti da stampare,
  2. il campo dove scegliere la grammatura di tipo dropdown dove inseriremo 4 scelte nei box etichetta; 200 gr/250 gr/300 gr/350gr e nei rispettivi box valore il prezzo per la singola stampa, ad esempio 0.020/0.022/0.030/0.035 (attenzione ad usare il punto come separatore per i decimali),
  3. inseriamo un campo "stampa" di tipo "radiobutton" con 2 valori; fronte e fonte/retro e come valore 1 per fronte e 2 per fronte retro,
  4. impostiamo il campo plastificazione con 2 valori nel campo etichetta; SI e NO e rispettivamente nel campo valore inseriamo 1 per NO e 2 per SI
  5. nell'ultimo campo, effetto rilievo inseriamo 2 valori nel campo etichetta; SI e NO e rispettivamente nel campo valore inseriamo 1 per NO e 2 per SI

Per i campi stampa, plastificazione e effetto rilievo impostiamo i campi predefiniti sul primo valore, ovvero FRONTE, NO, NO.

Vediamo cosa stiamo calcolando per capire il meccanismo e naturalmente queste tariffe sono completamente inventate:

Abbiamo un costo di stampa che varia al variare del supporto (lo spessore della carta o grammatura), quindi abbiamo inserito il costo della stampa singola (solo fronte) per ogni tipo di supporto: la stampa sul foglio da 200gr viene 0.020 eurocents, quella su supporto da 250gr viene 0.022 e così via.

Abbiamo un costo di stampa che varia se la stampa sarà su di un lato o su tutti e due, quindi nel campo stampa abbiamo 2 valori, un 1 per il fronte e un 2 per il fronte retro, quindi se la stampa sarà fronte retro moltiplicheremo l'importo per 2 altrimenti moltplicheremo per 1.

Per la plastificazione abbiamo aggiunto un numero 1 in caso non debba essere eseguita, mentre nell'opzione corrispondente al "SI" abbiamo inserito il prezzo supplementare per la plastificazione per ogni stampa. Stessa cosa abbiamo fatto per l'effetto rilievo.

Inseriamo tutti i campi che verranno presi in considerazione per il calcolo nella textarea "Osservazione campi Ajax"

{a_calcolo___quantita},
{a_calcolo___stampa},
{a_calcolo___grammatura},
{a_calcolo___plastificazione},
{a_calcolo___effetto_rilievo}

inseriamo nella textarea "Codice di Calcolo" i campi ed i calcoli da fare

$x=(int)'{a_calcolo___quantita_raw}'*
(real)'{a_calcolo___stampa_raw}'*
(real)'{a_calcolo___grammatura_raw}'*
(real)'{a_calcolo___plastificazione_raw}'*
(real)'{a_calcolo___effetto_rilievo_raw}';
return number_format($x,2);

Notiamo che sono stati aggiunti dei suffissi _raw, questi servono per tutti i  campi di tipo dropdown, radiobutton e checkbox

la variabile $x=(int) ci informa che è un numero intero, mentre per i numeri con decimali abbiamo inserito "(real)".

Nell'ultima riga troviamo la stringa "return number_format($x,2)" che vuol dire che il risultato dovrà avere due decimali ($x,2)

Vediamo altri esempi di codice:

Nel seguente codice il contenuto di un campo con numero intero viene moltiplicato per 5

 $myCalc = (int)'{nome_tabella___nome_elemento}' * 5;
return $myCalc;

E' possibile concatenare i valori di 2 campi

return '{nome_tabella___elemento1}' . '{nome_tabella___elemento2}';

Somma di più elementi di tipo dropdown/checkbox/radiobutton ad esempio [10+12+15]

return (real)'{calc_test___test_1_raw}' + (real)'{calc_test___test_2_raw} + (real)'{calc_test___test_3_raw}';

Moltiplicazione di più elementi ad esempio [8*5*4]

return (real)'{calc_test___test_1_raw}' * (real)'{calc_test___test_2_raw}' * (real)'{calc_test___test_3_raw}';

Vediamo le sottrazioni [10-4]

return (real) '{calc_test___test_2_raw}' - (real)'{calc_test___test_3_raw}';

Le divisioni sono un pò più complicate perchè ci possono essere errorri di sintassi se un campo viene lasciato vuoto, quindi abbiamo bisogno di creare del codice supplementare per il trattamento di tutti i campi che potrebbero contenere uno zero "0" di seguito l'esempio di come dovrebbe essere scritta la stringa per non fare generare errori [0/1], zero diviso 1 fa zero o niente, e noi dobbiamo fare in modo che nel campo risultato ci vada uno zero.

if ((real)'{calc_test___test_1_raw}' == 0 or (real)'{calc_test___test_2_raw}' == 0) {
  return 0;
}
return (real)'{calc_test___test_1_raw}' / (real)'{calc_test___test_2_raw}';

Lavoriamo con i subtotali: [12+15] + [18+22]

 $subtotal1 = (real)'{calc_test___test_1}' + (real)'{calc_test___test_2}';
 
$subtotal2 = (real)'{calc_test___test_3}' * (real)'{calc_test___test_4}';
 
//il risultato della somma dei 2 subtotali
return $subtotal1 + $subtotal2;

In alcune condizioni e per calcoli più complessi, i vari subtotali potrebbero non essere calcolati in quanto le variabili sono memorizzate solo temporaneamente, quindi ci viene d'aiuto questa stringa

return (real)'{calc_test___tubtotal1}' + (real)'{calc_test___subtotal2}';

vediamo come fare una media

$a = (float)'{calc_test___test_1}';
$b = (float)'{calc_test___test_2}';
$ratio = ($a - $b);
return round(SUM(%s), 2);

Questo tutorial sul plug in per Fabrik "calc" termina qui, se avete dubbi postate sui commenti. Se volete potete offrirmi un caffè cliccando nel pulsante sottostante, oppure cliccate su uno dei banner pubblicitari.

offrimi un caffè

Aggiungi commento

Attenzione, per risposte ai commenti non cliccare su reply nella email che riceverete perchè nessuno la leggerà. per continuare a commentare usate solo il form sottostante.


Codice di sicurezza
Aggiorna