====== phpHtmllib: Automatically generate form from database tables ======
Just experimenting, inspired by [[http://www.rubyonrails.com/|rubyonrails]].
class gemilang_standardform_auto extends gemilang_standardform {
var $_my_elements = array();
var $_my_tablename;
function setup_auto_init_elements() {
$db = &$GLOBALS['db'];
$rs = $db->Execute("select * from $this->_my_tablename limit 1");
while (!$rs->EOF) {
$fld = array();
while ($count < $rs->_numOfFields) {
$fld[] = $rs->FetchField($count);
$count++;
}
$rs->MoveNext();
}
$this->my_elements = array();
foreach ($fld as $field) {
$attr = array();
$attr['name'] = $field->name;
$attr['type'] = $field->type;
$attr['length'] = $field->max_length;
if (!isset($this->_my_elements[$field->name]['control'])) {
$attr['control'] = 'text';
} else {
$attr['control'] = $this->_my_elements[$field->name]['control'];
}
if (!isset($this->_my_elements[$field->name]['data'])) {
$attr['data'] = array();
} else {
$attr['data'] = $this->_my_elements[$field->name]['data'];
}
$this->_my_elements[$field->name] = $attr;
}
}
function auto_init_elements() {
foreach ($this->_my_elements as $element) {
switch($element['control']) {
case 'listbox':
$this->add_element(new FEListBox($element['name'], False, Null, Null, $element['data']));
if (!isset($this->description[$element['name']])) {
$this->description[$element['name']] = $element['name'];
}
break;
default:
$this->add_element(new FEText($element['name'], False, $element['length']));
if (!isset($this->description[$element['name']])) {
$this->description[$element['name']] = $element['name'];
}
}
}
}
function set_description($element_name, $description) {
$this->description[$element_name] = $description;
}
function set_control($element_name, $control, $data = Null) {
$this->_my_elements[$element_name]['control'] = $control;
if (is_array($data)) {
$this->_my_elements[$element_name]['data'] = $data;
}
}