Le "Valuelists" (liste di valori) servono come vocabolari che possono essere utilizzati per i campi, come elenchi di selezione, i gruppi di checkbox e campi di completamento automatico.

Fino ad ora non abbiamo usato alcun campo "enumerate" come elenco di selezione, gruppi di caselle di controllo o campi di completamento automatico dei nostri esempi. Questo perché ci manca un ingrediente fondamentale che è richiesto da tutti questi tipi di widget: un vocabolario. Abbiamo bisogno di un modo per definire le opzioni per questi campi.

Questo è dove le "Valuelists" entrano in gioco. Una "Valuelists" è essenzialmente una lista di coppie chiave-valore che possono essere utilizzate come un vocabolario in settori elencati come gruppi di caselle di controllo, elenchi di selezione e campi di completamento automatico. le "Valuelists" sono definite nel file valuelists.ini nella directory di configurazione di ogni tabella.

Esempio 1: Utilizzare un elenco di selezione per il campo Subject nella tabella Course

Il campo "Subjects" nella tabella "Course", in realtà non dovrebbe essere un campo a forma libera che accetterà qualsiasi valore. L'utente deve solo essere in grado di scegliere da un elenco finito di soggetti in un elenco di selezione. Per apportare queste modifiche attenersi alla seguente procedura:

  1. Creare la directory di configurazione per la tabella "Course", se non esiste ancora.
  2. Creare un file denominato 'fields.ini' all'interno della directory di configurazione della tabella (cioè tables/Course/fields.ini), se non esiste già.
  3. Creare un file denominato 'valuelists.ini' all'interno della directory di configurazione della tabella (cioè tables/Course/valuelists.ini), se non esiste già.
    La struttura di directory dell'applicazione ora dovrebbe apparire come:

    application-structure-valuelists
  4. Modificare il file valuelists.ini in modo che assomiglia a:
    [Subjects]
    ENGL = English
    MATH = Math
    PHYS = Physics
    CHEM = Chemistry
    Questo definisce un valuelist chiamato 'Subjets' con valori {ENGL, MATH, PHYS, CHEM} e le etichette associate {Inglese, Matematica, Fisica, Chimica}.
    I valori (cioè, ENGL, matematica, ecc.) Rappresentano ciò che verrà memorizzato nel database, e dei valori è una rappresentazione di facile utilizzo che verrà visualizzato sullo schermo.
  5. Ora editiamo il file fields.ini in modo che assomiglia a:
    [Subject]
    widget:type = select
    vocabulary = Subjects
    Questo dice a Xataface che vogliamo utilizzare un widget di selezione per modificare il campo "Subject", ed i suoi suoi valori devono essere presi da "Subjects" in valuelist.
  6. Passare alla tabella "Course" nella nostra applicazione e selezionare "nuovo record" dalle "azioni da compiere menu" in alto a sinistra.
    actions-menu-1
    Si aprirà un modulo per creare un nuovo record in "Course".  Esso dovrebbe essere simile a:
    new-course-form-1
    Notare che il campo "Subject" è rappresentata da un widget select, le opzioni sono le seguenti:
    course-subject-pulldown-1
    E se si guarda il codice sorgente HTML per questa lista di selezione, esso risulterà così:
    <select class="default" id="Subject" name="Subject">
    <option value="">Please Select...</option>
    <option value="ENGL">English</option>
    <option value="MATH">Math</option>
    <option value="PHYS">Physics</option>
    <option value="CHEM">Chemistry</option>
    </select>

Esempio 2: Utilizzo di un gruppo di caselle di controllo per il campo 'Subject'

Nell'esempio 1, abbiamo mostrato come utilizzare un elenco di selezione per il campo 'Subject' nella tabella 'Course'. Questo può andar bene se ogni corso può avere un solo soggetto. Ma cosa succede se un corso deve essere classificato in due aree tematiche. Allora avremo bisogno di un widget che permette di selezionare più elementi. I gruppi di caselle di controllo funzionano bene per questo.

Apportate una modifica al file 'fields.ini' per la tabella 'Course' per cambiare il widget: tipo di attributo del campo 'Subject' a 'checkbox' come segue:

[Subject]
widget:type = checkbox
vocabulary = Subjects

Ora caricate nuovamente il form e notate che il campo 'Subject' è ora rappresentata da caselle di controllo.

checkbox-group-1

Ci si potrebbe chiedere come memorizziamo valori multipli in un singolo campo. In questo caso 'Subject' è trattato come un campo di 'repeat', dove ogni valore è su una riga separata. Vale a dire, con il modulo qui sopra, se abbiamo cliccato 'save' e controllato i valori memorizzati nel database vorremmo vedere:

PHYS
CHEM

Questi sono i valori nel campo 'Subjects'. Tenete presente che se avete intenzione di utilizzare un campo ripetuto come questo, è necessario assicurarsi che il campo sia di grandezza sufficiente per memorizzare tutti i valori. Ad esempio, se il campo Subject è un VARCHAR (64) (64 caratteri), la somma delle lunghezze di tutti i valori 'checked' per 'Subject' deve essere inferiore a 64.

Esempio 3: Valuelists dinamiche basate sui risultati di query SQL

Gli esempi 1 & 2 hanno dimostrato l'idea di base di "valuelists" e come possono essere utilizzati come valori per le liste di selezione e gruppi di checkbox. Tuttavia definire una valuelists "staticamente" all'interno del file valuelists.ini non sembra davvero offrire qualcosa di più dell'utilizzo di ENUM o SET dei campi nel database MySQL. In molti casi si vuole che l'utente sia in grado di scegliere tra una serie di opzioni che vengono estratti dal database. Ad esempio, potremmo volere che l'utente sia in grado di specificare per un "Program" (programma) a quale "Course" (Corso) appartiene, utilizzando un elenco a discesa.

Ricordate che quando abbiamo creato la tabella 'Course' abbiamo inserito un campo chiamato 'ProgramID' per memorizzare il numero di ID del Programma a cui questo corso appartiene. Sarebbe irragionevole aspettarsi che gli utenti dell'applicazione ricordassero il numero ID del Programma a cui il corso appartiene quando compilano un modulo 'Course'. Sarebbe molto meglio se l'utente potesse scegliere il programma da un elenco di programmi disponibili. Fortunatamente, questa funzionalità è semplice da aggiungere:

  1. Aggiungete un valuelist chiamato 'Programs' al file valuelists.ini per la tabella 'Course' come segue:
    [Programs]
    __sql__ = "SELECT ProgramID, ProgramName FROM Program ORDER BY ProgramName"
    Nota: Assicurarsi di utilizzare due caratteri di sottolineatura su entrambi i lati del 'sql' nell'esempio precedente. Dovrebbe essere '__sql__' non '_sql_'.

    Questo valuelist sarà una lista dei record nella tabella 'Program' in ordine alfabetico sul nome del programma. Si noti che questa query seleziona 2 colonne. La prima colonna è sempre considerata come la colonna ID della lista valori e la seconda colonna (se specificato) è la colonna Nome del valuelist. La colonna ID è ciò che verrà effettivamente memorizzato nel database, e la colonna Nome è ciò che verrà mostrato all'utente al posto del ID.
  2. Aggiungete una definizione di campo per il campo ProgramID nel file fields.ini della tabella 'Course' come segue:
    [ProgramID]
    widget:type = select
    vocabulary = Programs
    Ora possiamo caricare il nostro modulo e vedere come si presenta:
    programid-select-list

    Possiamo vedere che il campo ProgramID appare ora con una lista selezionata di tutti i programmi presenti nel database. Il codice HTML per l'elenco di selezione è:
    <select class="default" id="ProgramID" name="ProgramID">
               <option value="">Please Select...</option>
               <option value="2">Advanced Widgetry</option>
               <option value="1">Basic Widgetry</option>
               <option value="3">International Widgetry</option>
    </select>

Le Nostre Applicazioni

Xataface Ultimate Framework, pacchetto base necessario per tutte le applicazioni

Rubrica Pacchetto per applicazione versione base

Video applicazione Rubrica versione base

Rubrica Versione 2 Aggiungere login e cryptare password

Video applicazione Rubrica versione 2 Aggiungere login

Video applicazione Rubrica versione 2 Cryptare password

Rubrica  Versione 4 Campi Dropdown

Video applicazione Rubrica Campi Dropdown

Zeroshell - Zerotruth

zerotruthzeroshell

Execution Time: 0.0022199153900146