Using Value-listsValue-lists serve as vocabularies that can be used for fields such as select lists, checkbox groups, and auto-complete fields.
So far we have not used any enumerated fields such as select lists, checkbox groups, or auto-completion fields in our examples. This is because we are missing a key ingredient that is required by all of these widget types: a vocabulary. We need a way to define options for these fields. This is where 'valuelists' come into play. A valuelists is essentially a list of key-value pairs that can be used as a vocabulary in enumerated fields like checkbox groups, select lists, and auto-completion fields. Valuelists are defined in the valuelists.ini file in each table's configuration directory.Example 1: Use a select list for the Subject field in the Course tableThe "Subject" field in the "Course" table really shouldn't be a
free-form field that will accept any value. The user should just
be able to pick from a finite list of subjects in a select list.
To make these changes we will follow these steps:
Example 2: Using a checkbox group for the 'Subject' fieldIn Example 1, we showed how to use a select list for the 'Subject'
field in the 'Course' table. This is great if each course can
only be one subject. But what if a course can be categorized in 2
subject areas. Then we will need a widget the allows you to
select multiple items. Checkbox groups work well for this. Make a change to the 'fields.ini' file for the 'Course' table to
change the widget:type attribute of the 'Subject' field to 'checkbox'
as follows: [Subject]Now load the form again and notice that the 'Subject' field is now represented by checkboxes. ![]() You may be wondering how we store multiple values in a single
field. In this case Subject is treated as a 'repeat' field where
each value is on a separate line. I.e., with the form above, if
we clicked 'save' and checked the values stored in the database we
would see: PHYS As the value in the 'Subject' field. Please note that if you
are going to use a repeating field like this, you should make sure that
the field is 'big' enough to store all of the values. E.g., I
think my Subject field was a VARCHAR(64) (64 characters long), so the
sum of the lengths of all of the values 'checked' for 'Subject' should
be less than 64. Example 3: Dynamic Valuelists based on the results of SQL queriesExample 1 & 2 demonstrated the basic idea of valuelists and how they can
be used as values for select lists and checkbox groups. However defining valuelists
"statically" inside the valuelists.ini file doesn't really seem to offer
anything over using and ENUM or SET field in the MySQL database.
In many cases we want the user to be able to choose from a number of
options that are pulled from the database. For example, we may
want the user to be able to specify the Program that a Course belongs
to, using a pull-down list.
![]() We can see that the ProgramID field now appears with a select list
of all of the programs in the database. The HTML code for the
select list is: <select class="default" id="ProgramID" name="ProgramID"> SummaryIn this section, we have learned how to use valuelists to add
selection lists and checkbox groups to our web forms. We also
shows how valuelists can be dynamically defined using SQL. Using
valuelists in this way is like defining a many-to-one relationship to
our database (in example 3, it was many 'Course' records to one
'Program' record). In the next section we will learn how to add
many-to-many and one-to-many relationships to our database in such a
way that records can be easily added and removed from relationships
using Dataface.
|