JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
metaform: can set options for pulldown/radio
authorJason Woofenden <jason@jasonwoof.com>
Sat, 30 Oct 2010 05:58:24 +0000 (01:58 -0400)
committerJason Woofenden <jason@jasonwoof.com>
Sat, 30 Oct 2010 05:58:24 +0000 (01:58 -0400)
metaform.php
metaform/template.php

index 274128f..9294189 100644 (file)
@@ -172,7 +172,7 @@ function get_fields() {
                        $options = null;
                } else {
                        list($name, $type, $options) = split('  *', $field);
-                       if($options) $options = split(',', $options);
+                       if($options) $options = explode(',', $options);
                        if(!$type) $type = $name;
                }
                $input = field_input($type);
@@ -364,6 +364,21 @@ function show_in_listing($type, $input, $format, $sql) {
        return true;
 }
 
+function pulldown_options_array($options) {
+       if($options) {
+               $pulldown_options = array();
+               foreach($options as $option) {
+                       $option = preg_replace("/['\\\\]/", '\\\\$0', $option);
+                       $pulldown_options[] = "'$option'";
+               }
+               $pulldown_options = 'array(' . join(', ', $pulldown_options) . ')';
+       } else {
+               $pulldown_options = "array(array('op1', 'Option One'), array('op2', 'Option Two'), 'n/a')";
+       }
+
+       return $pulldown_options;
+}
+
 function make_php() {
        $has_html_editors = false;
        $tem = new tem();
@@ -374,7 +389,7 @@ function make_php() {
        $always_field = find_always_field($fields);
        $image_included_yet = false;
        foreach($fields as $field) {
-               list($name, $type, $input, $format, $sql) = $field;
+               list($name, $type, $input, $format, $sql, $options) = $field;
                if($input != 'submit') {
                        $tem->set('format', $format);
                        $tem->set('name', $name);
@@ -400,6 +415,8 @@ function make_php() {
                                if($input == 'html') {
                                        $has_html_editors = true;
                                } elseif($input == 'pulldown' || $input == 'radio') {
+                                       $pulldown_options = pulldown_options_array($options);
+                                       $tem->set('pulldown_options', $pulldown_options);
                                        $tem->show('pulldowns');
                                        $tem->show('pulldown_format_extra');
                                }
@@ -498,9 +515,9 @@ function preview() {
        }
        $fields = get_fields();
        foreach($fields as $field) {
-               list($name, $type, $input, $format, $sql) = $field;
+               list($name, $type, $input, $format, $sql, $options) = $field;
                if($type == 'pulldown' || $type == 'radio') {
-                       pulldown($name, array('option 1', 'option 2', 'option 3'));
+                       pulldown($name, eval('return ' . pulldown_options_array($options) . ';'));
                }
        }
        $preview = $preview_tem->run();
index 086c642..d8f663b 100644 (file)
@@ -119,7 +119,7 @@ function ~file_name~_display_main() {
 }
 
 function ~file_name~_edit_main() {<!--~}~--><!--~pulldowns {~-->
-       pulldown('~name~', array(array('op1', 'Option One'), array('op2', 'Option Two'), 'n/a'));
+       pulldown('~name~', ~pulldown_options~);
 <!--~}~--><!--~opt_db {~-->
        $edit_id = format_int($_REQUEST['~file_name~_edit_id']);
        unset($_REQUEST['~file_name~_edit_id']);