Come arricchire le viste con le Sections
Quando si ha a che fare con molti dati all’interno di una stessa vista potremmo aver bisogno di sistemi per filtrare rapidamente questi dati sulla base di criteri predefiniti. In un precedente tutorial avevamo già visto come usare a tale scopo le queryBySample, che sono particolarmente utili quando si vuole offrire dei criteri di ricerca predefiniti (es: ricerca per artista, per titolo della canzone, per album, per genere musicale).
Ipotizziamo però un caso in cui si voglia individuare tutte le tracce audio di un certo formato (“mp4”, “wav” e così via), o appartenenti allo stesso genere musicale, o raggruppando i risultati per durata: tutti casi, quindi, in cui si ha a che fare con pochi criteri di scelta, sempre uguali.
Questi casi ben si adattano all’uso delle sections, piuttosto che delle queryBySample, ovvero delle bottoniere, poste nella parte superiore o inferiore della schermata, che ci permettono di filtrare i risultati cliccando semplicemente su questi bottoni.
In realtà avevamo già visto all’opera le sections proprio in quel tutorial, ma vogliamo in questa sede approfondire le modalità di funzionamento e utilizzo di questo strumento messo a disposizione da Genropy.
Come sfruttare le sections automatiche per arricchire le viste
Avevamo già fatto un precedente tentativo di aggiunta delle sections automatiche sui generi, tuttavia essendo tanti (più di 20) la section non si presentava molto bene, inoltre la pressione di un bottone esclude di fatto gli altri casi, di conseguenza era possibile visualizzare solo le tracce di un genere per volta. Avevamo quindi ripiegato sulle sections per tipo di file audio, che invece erano funzionali e di semplice inserimento:
def th_top_toolbarsuperiore(self,top):
top.slotToolbar('*,sections@mediatypeid,*')
Come si può notare, per l’inserimento della section è sufficiente utilizzare il parametro sections@nomedellacolonna per attivare una bottoniera automatica con tutti i valori di quella colonna (nel nostro caso, i file media). Con gli asterischi a sinistra e destra andiamo semplicemente a posizionare la bottoniera al centro della nostra toolbar superiore, in alternativa sarebbe possibile specificare un numero di pixel (es: 10)
La suddivisione per genere però era interessante, di conseguenza andiamo a perfezionare il nostro primo tentativo come segue:
def th_top_toolbarsuperiore(self,top): top.slotToolbar('*,sections@genre_id,10', sections_genre_id_multiButton=False)
Specifichiamo quindi come parametro ulteriore alla nostra section per genere sections_genre_id_multiButton=False, che di fatto ci permette di disattivare la visualizzazione a bottone di default della section e sostituirà questa con un menu a tendina: la cosa interessante è che questa tendina presenterà delle checkbox con i valori, di conseguenza potremo selezionare anche più di un genere musicale per volta. Si noti che il parametro sections_nomecolonna_multiButton può anche ricevere un numero intero, in quel caso verrà impostato un limite in termini di numero di voci oltre il quale la bottoniera diventerà una tendina. Questo può rivelarsi molto utile in caso di variazioni successive che precludono la visualizzazione corretta della bottoniera.
In entrambi i casi abbiamo fatto uso di sections automatiche, ma questa non è l’unica possibilità. Supponiamo infatti di voler filtrare anche i dati raggruppati per durata (es: < 1min, tra 2 e 3 min, e così via), o anche eventualmente per gruppi di lettere (es: A-E, F-M, ecc). In questi casi le condizioni da specificare alla query da eseguire andranno specificate manualmente: vediamo quindi come costruire una section “manuale”.
Come definire le sections manualmente con criteri personalizzati
Per costruire una section manualmente andremo a costruire un metodo th_sections_nomeapiacere che ritornerà una lista di dizionari con un codice, un’etichetta da usare e le condizioni da utilizzare nelle query lanciate dai vari “bottoni”:
@metadata(variable_struct=True) def th_sections_length(self): return [dict(code='tutti', caption='Tutti'), dict(code='1min', caption='<1min', condition='$milliseconds < 100000'), dict(code='2min', caption='<2min', condition='$milliseconds >= 100000 AND $milliseconds <200000'), dict(code='3min', caption='<3min', condition='$milliseconds >= 200000 AND $milliseconds <300000'), dict(code='4min', caption='>3min', condition='$milliseconds >= 300000', struct='long')]
Il codice sarà chiaramente univoco per ciascun bottone, l’etichetta può essere a piacere e la condizione sarà quella da utilizzare per individuare i valori da visualizzare come risultato. Si noti che stiamo specificando nell’ultimo bottone anche una struct precedentemente definita: utilizzando il decoratore metadata(variable_struct=True), infatti, faremo sì che al clic su quel bottone verrà anche visualizzata una specifica struct, differente da quella di default. Questo può essere particolarmente utile nel caso di dati specifici di uno dei risultati individuati.
Infine, per utilizzare la section che abbiamo definito è sufficiente richiamarla nella nostra toolbar:
def th_bottom_toolbarinferiore(self,bottom): bottom.slotToolbar('10,sections@length,*,sections@mediatypeid,10')
Le sections sono in definitiva uno strumento estremamente potente per permettere all’utente di filtrare i dati di una vista in modo estremamente rapido: a mero titolo di esempio alcuni utilizzi tipici possono essere il periodo (ultimi anni, ultimi mesi), il tipo di interlocutore (cliente, fornitore, partner), lo status di un progetto (avviato, confermato, annullato, da avviare), il tipo documento (fattura, nota di credito).
Vuoi saperne di più? Consulta la sezione dedicata nella nostra Documentazione:
Ti stai avvicinando al mondo Genropy e desideri saperne di più? Seguici sui social per tenerti in contatto con le ultime novità che Genropy ha da offrire: