public function render($attr = array()) { parent::mergeAttr($attr); $selected = isset($attr['value']) ? A_Html_Form_Select::_toArray($attr['value']) : array(); unset($attr['value']); $values = A_Html_Form_Select::_toArray($attr['values']); if (empty($attr['labels'])) { $attr['labels'] = $values; } $this->removeAttr($attr, 'values'); $labels = A_Html_Form_Select::_toArray($attr['labels']); $this->removeAttr($attr, 'labels'); if (isset($attr['multiple']) || count($selected) > 1) { $attr['name'] .= '[]'; $attr['multiple'] = 'multiple'; // multiple sends array } $str = ''; foreach ($values as $value) { $str .= '<option value="' . $value . '"'; if (in_array($value, $selected)) { $str .= ' selected="selected"'; } $str .= '>' . current($labels) . "</option>"; next($labels); } return parent::render('select', $attr, $str); }
public function render($attr = array()) { parent::mergeAttr($attr); if (isset($attr['value_col']) && isset($attr['label_cols'])) { $rows = array(); if (isset($attr['db']) && isset($attr['sql'])) { $db = $attr['db']; $result = $db->query($attr['sql']); if (!$db->isError()) { while ($row = $result->fetchRow()) { $rows[] = $row; } } } elseif (is_array($attr['model'])) { $rows = call_user_func_array($attr['model'], isset($attr['model_params']) ? $attr['model_params'] : array()); } if ($rows) { if (is_string($attr['label_cols'])) { $attr['label_cols'] = explode('|', $attr['label_cols']); } foreach ($rows as $row) { $attr['values'][] = $row[$attr['value_col']]; $label = ''; foreach ($attr['label_cols'] as $col) { $label .= $row[$col] . ' '; } $attr['labels'][] = $label; } } $this->removeAttr($attr, 'model'); $this->removeAttr($attr, 'db'); $this->removeAttr($attr, 'sql'); $this->removeAttr($attr, 'value_col'); $this->removeAttr($attr, 'label_cols'); } return parent::render($attr); }