[RISOLTO] Come visualizzare gli eventi del giorno?

4 contenuti / 0 new
Ultimo contenuto
[RISOLTO] Come visualizzare gli eventi del giorno?

Ciao, qualcuno può aiutarmi per favore?

Premesso che ho la versione Drupal 6.x ed installati i moduli Views, CCK, Date e Calendar, il mio problema è questo: dato un insieme di eventi ciascuno con i campi dataora_iniz e dataora_fin, con durate molto varie (da pochi minuti a diverse settimane), vorrei visualizzare in una vista o View unica tutti quelli che iniziano, o finiscono, oppure ancora proseguono nell'arco della giornata di oggi.

Il mio problema è che non riesco a definire il filtro completo. Se metto: (dataora_iniz OR dataora_fin) between 'today' and 'today + 1day' (cioè il tempo o iniziale o finale tra oggi ore 00:00 e domani ore 00:00), vedo correttamente gli eventi che iniziano o finiscono oggi (incluso il caso che iniziano e finiscono oggi stesso) .

Ma questa condizione mi esclude eventuali avvenimenti lunghi più di 24 ore che sono iniziati ieri o prima, ed inoltre (AND) finiscono domani o dopo, che però vorrei comunque avere nella stessa vista, in quanto stanno proseguendo nell'arco della giornata in corso...
Per questi ultimi potrei creare una condizione del tipo: ('dataora_iniziale < today' AND 'dataora_finale >= today +1 day'), ma questa purtroppo mi escluderebbe gli eventi del giorno che durano meno di 24 ore.

In altre parole, io vorrei invece avere come prodotto finale delle impostazioni del filtro sui campi di data, una combinazione delle due anzidette, quindi qualcosa del tipo:

[ today <= (dataora_iniz OR dataora_fin) < (today + 1 day) ] OR [ dataora_iniz < today AND dataora_fin >= (today + 1day) ]

ma non riesco a trovare nell'interfaccia del modulo View, sezione Filtri, come fare! (mi pare che mi consenta di scegliere solo OR o solo AND per abbinare le 2 voci di tempo iniziale e finale)...

Sbaglio qualcosa, o si deve per forza aggiustare a mano il codice? ... qualche suggerimento, anche in quest'ultimo caso? (se esporto le query mysql delle 2 view dei 2 casi separati, ci posso fare qualcosa?)

ciao
a.

Questa soluzione (semplice) non è essattamente quello che cerchi, ma "Eventi in corso o che iniziano nei prossimi 24 ore", che non è proprio l'equivalente di "oggi", ma...

Devi perdonare la mia ignoranza, dato che non ho ancora avuto l'opportunità di usare Date/Calendar, ma se esiste un valore 'now' (cioè ora sia di data che di tempo, es: 26/06/2010 20:15:34) questo può essere usato con un singolo controllo. Se come faccio fatica ad immaginarlo nella mia menta, inizio con un disegno:

------|-------|-------|-------> tempo
      i'      i       f
  No  |   Si  |   Si  | No

dove:

  • i' è l'inizio visualizzazione evento (inizio evento meno n ore - 24 nel tuo caso)
  • i è l'inizio evento
  • f è la fine evento

Sotto sono le zone non valide (No) e valide (Si). Dovremo usare un AND per testare se siamo fra i' e f, ma invece di calcolare i', possiamo 'muovere' now avanti di n ore (sempre 24), quindi volgiamo che:
now + 24 ore >= dataora_iniz AND now <= dataora_fin

HTH

John

Più imparo, più dubito.

(Risolto) Wow, grazie per l'aiuto! Ho messo la condizione logica che hai suggerito e ora funziona il tutto. Inoltre sbagliavo a selezionare nel modulo View il contenuto data&ora iniziale (che mi include all'origine automaticamente anche il campo data&ora finale) quindi pensavo ingenuamente che il modulo mi consentisse soltanto di dare una stessa condizione (AND oppure OR) per entrambi. Invece poi ho imparato che posso selezionarli separatamente non fra i contenuti ma come "node/data". A questo punto ho scelto l'operatore AND per entrambi e posto le due condizioni temporali diverse proprio come tu hai indicato, in modo da includere con una sola vista anche gli eventi che durano più di un giorno e stanno continuando oggi, e non solo quelli che iniziano o finiscono in giornata.
Ho messo poi nel filtro la granularità al minuto cosicché 'today' e 'today +1 day' si riferiscono rispettivamente alle ore 00:00 di oggi e di domani, quindi ho posto alla fine: dataora_iniz < (today + 1 day) AND dataora_fin > today
Tutto ora funziona in generale, tranne il piccolo dettaglio che devo evitare le ore 00:00 perchè nella vista finale del campo date iniz. e fin. in questo caso lui si ostina ad aggiungere "All the day" (che andrebbe bene solo per eventi di soltanto oggi fra le ore 00:00 e le ore 23:59). Ma per mia fortuna per il tipo di eventi che sto trattando per una struttura aperta 12 ore dalle 8 alle 20, queste eventualità di ore 00:00 le posso ignorare tranquillamente.
Anzi sto pensando che dato quest'orario di apertura (cioè senza eventi tra le ore 20 e le 8) potrei, volendo, usare "now +12 hours" con la formula da te proposta (anzichè adesso +24 ore) in modo da far sparire la visualizzazione dell'evento già nel momento stesso in cui finisce nell'arco della giornata ... Dico giusto?
Grazie di nuovo, per me il problema è risolto.
:-)

Dici giusto...

alattio wrote:
...Anzi sto pensando che dato quest'orario di apertura (cioè senza eventi tra le ore 20 e le 8) potrei, volendo, usare "now +12 hours" con la formula da te proposta (anzichè adesso +24 ore) in modo da far sparire la visualizzazione dell'evento già nel momento stesso in cui finisce nell'arco della giornata ... Dico giusto?

Si, l'algoritmo (parola grosso per un espressione così semplice) è valido per un qualunque lasso di tempo, che sia 12 ore, o un mese...

Più imparo, più dubito.