Calcolo dei giorni in webform
Ho bisogno di calcolare il numero dei giorni tra una data e l'altra all'interno di una webform.
Esiste una soluzione? grazie
Ho bisogno di calcolare il numero dei giorni tra una data e l'altra all'interno di una webform.
Esiste una soluzione? grazie
Risposte
Ciao, potresti utilizzare un
Ciao, potresti utilizzare un form_alter per fare i calcoli che ti servono. Mettiamo di avere un webform con solo due campi data (da - a):
<?php
function MIOMODULO_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'webform_client_form_NID_WEBFORM') {
$form['#submit'][] = 'MIOMODULO_my_webform_form_submit';
}
}
function MIOMODULO_my_webform_form_submit($form, &$form_state) {
$data1 = $form_state['values']['submitted'][1];
$data2 = $form_state['values']['submitted'][2];
$inizio = new DateTime($data1);
$fine = new DateTime($data2);
drupal_set_message('Differenza in giorni: ' . $fine->diff($inizio)->days);
}
?>
questo ti stampa un messaggio con la differenza in giorni computata tra le due date, dopo il submit del form.
Spero ti sia utile.
Nota: devi modificare il nome del modulo con il tuo modulo custom e il nid del webform con l'id del nodo interessato.
Ecco un esempio di come
Ecco un esempio di come dovrebbe essere il modulo webform:
immissione di Nome e cognome
residenza
ecc. ecc.
Iscrizione dalla data:
alla data:
numero di giorni che viene fuori in automatico
calcolo di una cifra moltiplicata per i giorni in automatico
ecc. ecc. altri campi da riempire..... ecc.
credi sia possibile ?
grazie della risposta.
Ciao, in altre parole, stai
Ciao, in altre parole, stai cercando di fare un booking online?
Possibile sì, lo potresti
Possibile sì, lo potresti fare sia introducendo ajax sul tuo webform nel form alter (https://api.drupal.org/api/drupal/includes%21ajax.inc/group/ajax/7.x) o magari introducendo qualche script (che agisce solo lato browser, ma se è una utility per l'utente potrebbe anche andare bene...).
Alcuni esempi pratici li trovi in https://www.drupal.org/project/examples tra gli esempi disponibili.
E' un pò più articolato rispetto all'esempio che ti ho fatto. Ma potresti semplificarlo drasticamente mettendo la data di arrivo e facendo selezionare il numero di giorni di permanenza (senza data finale). A quel punto basterebbe fare una moltiplicazione del costo a giornata per questo valore, con una funzione js legata all'evento onchange del campo con il numero dei giorni.
Va da sè che tutto dipende da come gestisci queste informazioni e dalla complessità di cui hai bisogno.
Maurizio l'esempio sul
Maurizio l'esempio sul calcolo che hai inserito lo effettua in fase di conferma del modulo se ho cpaito bene
E' possibile realizzare la stessa cosa ma prima del submit?
Esempio Campo1, Campo2, Campo3
dopo aver digitato il valore nel campo 1 e 2 viene effettato il calcolo e visualizzato nel campo 3 prima che venga effettuato il submit del form
Campo3 = Campo1 * Campo2
Ciao, E' possibile realizzare
Ciao,
è quello che ho risposto nel mio ultimo post:
http://www.drupal.it/supporto/calcolo-dei-giorni-webform#comment-12768
quindi sì, è possibile ma è più articolato dell'esempio fatto.
Potresti sennò mettere un page break e utilizzare la funzione di submit che viene richiamata sempre tra uno step e l'altro.
Dato un webform con questi elementi:
data1 Date (id 1)
data2 Date (id 2)
page1 Page break (id 3)
days Textfield (id 4)
dovresti poter effettuare il calcolo modificando il codie sopra così:
<?php
function MIOMODULO_my_webform_form_submit($form, &$form_state) {
$data1 = $form_state['values']['submitted'][1];
$data2 = $form_state['values']['submitted'][2];
$inizio = new DateTime($data1);
$fine = new DateTime($data2);
$form_state['values']['submitted'][4] = $fine->diff($inizio)->days;
}
?>
allo step 2 il campo days dovrebbe risultare riempito così:
penso che non lo so
penso che non lo so fare......
Allora aggiungo un webform...
inserisco un componente Data... cosa metto in Form key?
altro componente Data... cosa scrivo in form key?
...e poi?
scusami Maurizio ma sono alla frutta
perchè hai messo il page
perchè hai messo il page break? per simulare il submit?
ma per me non va bene.
Dove devo scrivere quel codice?
Devi crearti un modulo custom
Devi crearti un modulo custom e inserirlo al suo interno, purtroppo non mi viene in mente nulla di più semplice o da fare tramite interfaccia web senza un minimo di codice.
Esiste un modulo per i calcoli più semplici
https://www.drupal.org/project/webform_calculator
ma non credo possa fare al caso tuo per gestire date e costi, potresti comunque provare.
Se riesci a trovare una soluzione semplice, postala qui, potrebbe essere molto utile ad altri utenti.
Ho visto che hai un tuo sito
Ho visto che hai un tuo sito web....dove dai aiuto ai poverelli come me.... è cosa buona e giusta!
ho tempo e voglia di imparare, (virus permettendo)..
Quindi ...il modulo calculator già l'ho provato ma non risolve...
Devo cercare una guida che mi spieghi come si crea un modulo custom. E che centra sto form alter? cos'è? a cosa serve?
Ho visto che hai un tuo sito
In realtà ho un'azienda informatica e sviluppo soluzioni web su misura per aziende e web agencies. Lavorando principalmente con strumenti open source e in particolare con Drupal, aiutare qui su Drupal.it con le richieste e su Drupal.org fornendo moduli e patches è il mio modo per dare un contributo alla community.
Ecco le info che ti servono:
https://www.drupal.org/docs/7/creating-custom-modules
e tanti esempi
https://www.drupal.org/project/examples
La cosa è difficile.. anche
La cosa è difficile.. anche perchè è sempre l'inglese che mi frega...
Ti ringrazio del tempo che ti ho rubato... e ti saluto...
aspetta un attimo... una cosa vorrei capire... e poi basta..mi arrendo!
ammesso che io faccia un modulo custom (molto improbabile) ma come va a finire poi nei componenti del webform?
In breve, come creare un
In breve, come creare un modulo custom (D7):
1. crea la cartella sites/all/modules/custom
2. crea la cartella sites/all/modules/custom/miomodulo
3. crea il file sites/all/modules/custom/miomodulo/miomodulo.info con questo contenuto
name = MioModulo
description = Modulo di esempio.
core = 7.x
package = Custom
4. crea il file sites/all/modules/custom/miomodulo/miomodulo.module con questo contenuto:
<?php
function miomodulo_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'webform_client_form_SOSTITUIRENID') {
$form['#submit'][] = 'miomodulo_custom_webform_form_submit';
}
}
function miomodulo_custom_webform_form_submit($form, &$form_state) {
$data1 = $form_state['values']['submitted'][1];
$data2 = $form_state['values']['submitted'][2];
$inizio = new DateTime($data1);
$fine = new DateTime($data2);
$form_state['values']['submitted'][4] = $fine->diff($inizio)->days;
}
?>
Nota importante: devi sostituire SOSTITUIRENID con l'id numerico del webform. Lo trovi quando modifichi il nodo che contiene il tuo webform, guardando l'url sul browser (node/NID/edit), è il secondo parametro (ad esempio webform_client_form_301).
5. vai in admin/modules cerca Miomodulo, selezionalo con il checkbox e clicca Installa sul fondo della pagina.
Tieni conto che il webform deve essere configurato come nell'esempio che ho fatto io sopra in due step.
In estrema sintesi è la funzione hook_form_alter che ti permette di modificare il form del webform.
Ho fatto come da te
Ho fatto come da te spiegato.
Funziona ma .....
Spiegami dove tu dici:
data1 Date (id 1)
data2 Date (id 2)
page1 Page break (id 3)
days Textfield (id 4)
cosa significa (id 1) (id 2) ecc.
si riferisce ai numeri [1] [2] ecc. scritti nel file miomodulo.module ?
Sono gli id dei componenti
Sono gli id dei componenti del tuo webform nel tab "Form components": l'id è il numero che vedi nell'url in edit node/NID/webform/components/CID <---
Ecco... capito... Quindi
Ecco... capito...
Quindi poichè le due date sono all'interno di un form con molti altri componenti, bisogna controllare il numero ID e modificare il file miomodulo.module opportunamente.
Ma se ci sono altri form che devono fare la stessa cosa si deve editare un nuovo modulo?
Non si può creare un componente webform da utilizzare quando serve?
Oltretutto il risultato dovrebbe comparire appena inserite le due date senza utilizzare l'interruzione di pagina.
Mi hai comunque fatto capire molte cose che ignoravo.
Ma se ci sono altri form che
Assolutamente sì. Esistono API specifiche per definire nuovi componenti:
hook_webform_component_info Define components to Webform.
Ti ho suggerito sopra dove poter reperire le info per farlo.
http://www.drupal.it/supporto/calcolo-dei-giorni-webform#comment-12768
Se ti occorre uno sviluppo su misura puoi creare un'offerta di lavoro qui su Drupal.it (http://www.drupal.it/node/add/job).
Possibile che solo io avevo
Possibile che solo io avevo questa necessità? e nessuno al mondo ha già realizzato un componente webform adatto a questo scopo? Esiste un repository dove andare a cercare?
Link ricerca in moduli
Link ricerca in moduli ufficiali: https://www.drupal.org/project/project_module
Ho cercato ma senza
Ho cercato ma senza risultato.
Comunque grazie per le info, sei una bella persona, ciao.