Site Menu

Make the "Select" Form Element Easy with Mivascript

Create, populate, and select form options the easy way.

Using shortcut functions makes your mivascript projects go faster. This function takes the hassle out of the select form element.

by Scot Ranney

The "select" form element let's people select from a list of options. The only real problem with it is when the data is being edited there may be a lot of MvIF's to contend with and if there are a lot of "select" form elements, populating the form data with the right selection can get messy with a lot of extra code.

Here's a mivascript function that makes this super easy and removes the mess.

<MvFUNCTION NAME = "select" PARAMETERS = "class,default,name,condition,options" STANDARDOUTPUTLEVEL="compresswhitespace,text,html" >
    <MvASSIGN NAME = "l.options" VALUE = "{ miva_array_deserialize( l.options ) }" />
    <select class="{ l.class } name="{ l.name }">
        <option value=""><MvEVAL EXPR = "{ l.default }"></option>
        <MvFOREACH ITERATOR = "l.option" INDEX = "l.pos" ARRAY = "l.options">
            <MvIF EXPR = "{ gettoken(l.option,'-',1) EQ l.condition }">
                <option value="{ gettoken(l.option,'-',1) }" selected><MvEVAL EXPR = "{ gettoken(l.option,'-',2) }"></option>
            <MvELSE>
                <option value="{ gettoken(l.option,'-',1) }"><MvEVAL EXPR = "{ gettoken(l.option,'-',2) }"></option>
            </MvIF>
        </MvFOREACH>
    </select>
</MvFUNCTION>

The options parameter is set up in a deserialized array style and we also use a dash to separate the value from the option label:

<MvASSIGN NAME = "l.options" VALUE = "{ 'value1-Option Label One,value2-Option Label Two,value3-Option Label Three,value4-Option Label Four' }" />

Here's a basic call to list the above options without anything selected. This would be used for a fresh form for a new record.

<MvASSIGN NAME = "l.ok" VALUE = "{ select(l.null,'Select one...','selected_value',l.null,l.options) }" />

When you're populating the form for editing you would set the condition that needs to be matched so the proper "option" is preselected. In this example we'll set the condition to  'value2' so it's automatically selected:

<MvASSIGN NAME = "l.condition" VALUE = "{ 'value2' }" />
<MvASSIGN NAME = "l.ok" VALUE = "{ select(l.null,'Select one...','selected_value',l.condition,l.options) }" />

This sets the value2 option as selected:

I'm using the bootstrap framework here so I could include the form-control class:

<MvASSIGN NAME = "l.condition" VALUE = "{ 'value2' }" />
<MvASSIGN NAME = "l.ok" VALUE = "{ select('form-control','Select one...','selected_value',l.condition,l.options) }" />

This will evaluate to:

<select class="form-control" name="selected_value">
    <option value="">Select one...</option>
    <option value="value1">Option Label One</option>
    <option value="value2" selected>Option Label Two</option>
    <option value="value3">Option Label Three</option>
    <option value="value4">Option Label Four</option>
</select>

Related Articles

These articles might be interesting for you as well:

This page might use cookies if your analytics vendor requires them.