PX : code

Flexible SELECT creation by Stephan Beal
Download this code


########################################
# Returns a selection list...
# This function is intended to take arrays of OBJECTS!!!
# This is tricky... 
# For comparison of the $content and $selectinitial arrays, you must give it a 
# function name in $compfunc. This function will be called against the VALUE of
# each element of $content. If that VALUE is in the array $selectinitial,
# then that item will be preselected. If $compfunc is false, then it
# stick each element of $content into the selection list (which is what you want
# in the case of strings, ints, etc.).
# If you pass it a function name for $valuefunc, then it will use that 
# function to set the value, calling it against each element of $content.
# If both $compfunc and $valuefunc are defined, the value from $compfunc will be
# shown in the list, BUT the value from $valuefunc will be set in each option's VALUE
# field, so THAT will be the value you get back.
  function getSelectionList( $selectname="SELECTION",
                 $content=array(),
                 $compfunc=false,
                 $valuefunc=false,
                 $selectinitial=array(),
                 $selectsize=10
               ) {
    $sel = "<SELECT NAME=\"".$selectname."\" MULTIPLE SIZE=\"$selectsize\">\n";
    while( list($k,$g) = each( $content ) ) {
      $SEL="";
      $value = "";
      if ( $compfunc != false ) {
    if ( in_array( $g->$compfunc(), $selectinitial ) ) {
      $SEL=" SELECTED";
    }
    if( $valuefunc != false ) {
      $SEL .= " VALUE=\"".$g->$valuefunc()."\"";
    }
    $value = $g->$compfunc();
      }
      else if( $valuefunc != false ) {
    $value = $g->$valuefunc();
      }
      $sel .= "\t<OPTION$SEL>".$value."</OPTION>\n";
    }
    return $sel."</SELECT>\n";

  }


SAMPLE USAGE:
echo getSelectionList( "MY_SELECTION", array( "One","Two","Three" ), false, false, array("Two"), 8 );

makes a size-8 selection list with the items One, Two, and Three, with Two preselected.

If you pass it an array of your own objects, do something like:
echo getSelectionList( "MY_SELECTION", $myobjarray, "getName", false, array("Two"), 8 );

This will make a selection list which uses the getName() function of your object to populate the list.

echo getSelectionList( "MY_SELECTION", $myobjarray, "getName", "getID", array(new MyObject(13)), 8 );

This will make a selection list which uses the getName() function of your object to populate the list, BUT it will use the getID() value in the VALUE field of the OPTION tag. It will use the getName() method of $myobjarray's contents to see if they those items should be preselected (looking at the KEYS of the new array).

echo getSelectionList( "MY_SELECTION", $myobjarray, false, "getVersion", array("Two"), 8 );

This will make a selection list which uses the getVersion() function of your object to populate the list.

Maybe a bit TOO flexible to be practical, but here it is, anyway.



Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.