/** * Genera un form de un modelo (objeto) automáticamente * * @var object */ public static function create($model, $action = NULL) { $model_name = Util::smallcase(get_class($model)); if (!$action) { $action = ltrim(Router::get('route'), '/'); } echo '<form action="', PUBLIC_PATH . $action, '" method="post" id="', $model_name, '" class="scaffold">', PHP_EOL; $pk = $model->primary_key[0]; echo '<input id="', $model_name, '_', $pk, '" name="', $model_name, '[', $pk, ']" class="id" value="', $model->{$pk}, '" type="hidden">', PHP_EOL; $fields = array_diff($model->fields, $model->_at, $model->_in, $model->primary_key); foreach ($fields as $field) { $tipo = trim(preg_replace('/(\\(.*\\))/', '', $model->_data_type[$field])); //TODO: recoger tamaño y otros valores $alias = $model->get_alias($field); $formId = $model_name . '_' . $field; $formName = $model_name . '[' . $field . ']'; if (in_array($field, $model->not_null)) { echo "<label for=\"{$formId}\" class=\"required\">{$alias} *</label>", PHP_EOL; } else { echo "<label for=\"{$formId}\">{$alias}</label>", PHP_EOL; } switch ($tipo) { case 'tinyint': case 'smallint': case 'mediumint': case 'integer': case 'int': case 'bigint': case 'float': case 'double': case 'precision': case 'real': case 'decimal': case 'numeric': case 'year': case 'day': case 'int unsigned': // Números if (strripos($field, '_id', -3)) { echo Form::dbSelect($model_name . '.' . $field, NULL, NULL, 'Seleccione', NULL, $model->{$field}); break; } else { echo "<input id=\"{$formId}\" type=\"number\" name=\"{$formName}\" value=\"{$model->{$field}}\">", PHP_EOL; break; } case 'date': // Usar el js de datetime echo "<input id=\"{$formId}\" type=\"date\" name=\"{$formName}\" value=\"{$model->{$field}}\">", PHP_EOL; break; case 'datetime': case 'timestamp': echo "<input id=\"{$formId}\" type=\"datetime\" name=\"{$formName}\" value=\"{$model->{$field}}\">", PHP_EOL; //echo '<script type="text/javascript" src="/javascript/kumbia/jscalendar/calendar.js"></script> //<script type="text/javascript" src="/javascript/kumbia/jscalendar/calendar-setup.js"></script> //<script type="text/javascript" src="/javascript/kumbia/jscalendar/calendar-es.js"></script>'.PHP_EOL; //echo date_field_tag("$formId"); break; case 'enum': case 'set': case 'bool': $enumList = explode(",", str_replace("'", "", substr($model->_data_type[$field], 5, strlen($model->_data_type[$field]) - 6))); echo "<select id=\"{$formId}\" class=\"select\" name=\"{$formName}\" >", PHP_EOL; foreach ($enumList as $value) { echo "<option value=\"{$value}\">{$value}</option>", PHP_EOL; } echo '</select>', PHP_EOL; break; case 'text': case 'mediumtext': case 'longtext': case 'blob': case 'mediumblob': case 'longblob': // Usar textarea echo "<textarea id=\"{$formId}\" name=\"{$formName}\">{$model->{$field}}</textarea>", PHP_EOL; break; default: //text,tinytext,varchar, char,etc se comprobara su tamaño echo "<input id=\"{$formId}\" type=\"text\" name=\"{$formName}\" value=\"{$model->{$field}}\">", PHP_EOL; //break; } } //echo radio_field_tag("actuacion", array("U" => "una", "D" => "dos", "N" => "Nada"), "value: N"); echo '<input type="submit" value="Enviar" />', PHP_EOL; echo '</form>', PHP_EOL; }
/** * Lista desplegable para actualizar usando ajax que toma los valores de un array de objetos * * @param string $field nombre de campo * @param string $show campo que se mostrara * @param array $data Array('modelo','metodo','param') * @param string $update capa que se actualizara * @param string $action accion que se ejecutara * @param string $blank campo en blanco * @param string $class * @param string|array $attrs */ public static function dbSelect($field, $show, $data, $update, $action, $blank = null, $class = null, $attrs = null) { if (is_array($attrs)) { $attrs = Tag::getAttrs($attrs); } // ruta a la accion $action = PUBLIC_PATH . rtrim($action, '/') . '/'; // genera el campo return Form::dbSelect($field, $show, $data, $blank, "class=\"js-remote {$class}\" data-update=\"{$update}\" data-url=\"{$action}\" {$attrs}"); }
public static function dbSelect($field, $show = NULL, $data = NULL, $blank = 'Seleccione', $attrs = NULL, $value = NULL, $label = '', $req = false, $err = false) { $attrs = self::_getAttrsClass($attrs, 'select', $req); $input = "\n" . parent::dbSelect($field, $show, $data, $blank, $attrs, $value) . "\n"; $input .= self::label($field, $label, null, $req, $err); return $input . "\n"; }