Elemento del array que devuelve el método get de la tabla no tiene campo de la tabla en toba 3.4

Cuando hago un ei_arbol($datos); después de hacer $datos = $this->dep("datos")->tabla("pacientes")->get(); en el método conf__formulario del ci el último campo de la tabla me lo reemplaza por x_dbr_clave, como muestro en la captura de pantalla:


Y justo el campo que me reemplaza es la foto del paciente entonces no me muestra nada en el formulario.
¿Cómo puedo hacer para solucionar este asunto?

Buenas tardes,
Ese campo x_dbr_clave, es propio del framework en el datos tabla y dicho valor corresponde a la fila seleccionada en Editar, funciona como un array de filas y columnas.

Cordial saludo

Gracias por la respuesta, pero quiero saber por qué me elimina el último campo de la tabla (que se llama imagen), y como puedo hacer para que no lo elimine para poder mostrar la foto del paciente.

Los campos y valores vienen del sql ejecutado que carga el cuadro y para reconstruir la imagen se debe hacer lo que hiciste antes con imagen_vista_previa.

Sí, lo tengo tal como me lo pasaste en el otro posteo, funcionaba perfecto, pero ahora dejó de funcionar, incluso no anda cuando quiero agregar un registro nuevo o modificar uno existente, sube el archivo perfecto, pero no modifica el campo imagen en la tabla.
Este es el código de dt_pacientes.php:

<?php
class dt_pacientes extends ciftoba_datos_tabla
{
	function get_listado($filtro=array())
	{
		$where = array();
		if (isset($filtro['apellidos'])) {
			$where[] = "apellidos ILIKE ".quote("%{$filtro['apellidos']}%");
		}
		if (isset($filtro['nombres'])) {
			$where[] = "nombres ILIKE ".quote("%{$filtro['nombres']}%");
		}
		if (isset($filtro['email'])) {
			$where[] = "email ILIKE ".quote("%{$filtro['email']}%");
		}
		$sql = "SELECT
			t_p.id_paciente,
			t_p.apellidos,
			t_p.nombres,
			td.descripcion,
			t_p.nrodoc,
			t_p.fecnac,
			s.sexo,
			t_p.vive_con,
			pn.nombre as pais_nacimiento,
			pr.nombre as pais_residencia,
			pro.provincia,
			l.localidad,
			t_p.telefono,
			t_p.celular,
			t_p.email,
			t_p.barrio,
			t_p.certificado_discapacidad,
			t_p.obra_social,
			t_p.anamnesis,
			t_p.imagen
		FROM
			pacientes as t_p
			inner join tipos_documentos td on td.id_tipo=t_p.id_tipo
			inner join sexos s on s.id_sexo=t_p.id_sexo
			left join paises pn on pn.id_pais=t_p.pais_nacimiento
			left join paises pr on pr.id_pais=t_p.pais_residencia
			left join provincias pro on pro.id_provincia=t_p.provincia
			left join localidades l on l.id_localidad=t_p.localidad
		ORDER BY apellidos, nombres";
		if (count($where)>0) {
			$sql = sql_concatenar_where($sql, $where);
		}
		return toba::db('ciftoba')->consultar($sql);
	}

}

?>

Lo que habrá que revisar es el comportamiento del conf__form y form__modificacion, es hay donde se hacen las actualizaciones del nombre del archivo en la BD

Este es el código de esos dos métodos:

	function conf__formulario(toba_ei_formulario $form)
	{
		if ($this->dep("datos")->esta_cargada()) {
			$datos = $this->dep("datos")->tabla("pacientes")->get();
			if ($datos["imagen"]) {
				$temp_nombre = "img/".$datos["imagen"];
				$temp_archivo = toba::proyecto()->get_www($temp_nombre);
				$datos["vista_previa"] = "<a href='{$temp_archivo["url"]}' target='_blank'>Abrir - ".$datos["imagen"]."";
				$tamanyo = 0;
				if(file_exists($temp_archivo["path"])) $tamanyo = round(filesize($temp_archivo["path"]) / 1024);
				$datos["archivo"] = "Tama&ntilde;o: ".$tamanyo." KB";
			} else {
				$datos["imagen"] = null;
			}
			return $datos;
		} else {
			$this->pantalla()->eliminar_evento("eliminar");
		}
	}

	function evt__formulario__modificacion($datos)
	{
		$this->dep('datos')->tabla("pacientes")->set($datos);
		$this->dep('datos')->tabla("pacientes")->sincronizar();
		if (is_array($datos["archivo"])) $datos = $this->preparar_descarga ($datos);
		$this->dep('datos')->tabla('pacientes')->set($datos);
	}

Y en la función preparar descargas asignas bien el nombre del archivo al compo images de la base de datos?

Creo que sí.
Este es el código de ese método:

	function preparar_descarga ($registro)
	{
		$error_descarga = validacion::get_error_descargas ($registro);
		if ($error_descarga) toba::notificacion()->agregar($error_descarga, "error");
		else {
			$datos = $this->dep("datos")->tabla("pacientes")->get();
			if($datos["imagen"]){
				$temp_nombre = "img/".$datos["imagen"];
				$temp_archivo = toba::proyecto()->get_www($temp_nombre);
				if(file_exists($temp_archivo["path"])) unlink($temp_archivo["path"]);
			}
			$id_paciente = $datos["id_paciente"];
			$array_directorios = array("upload","pacientes",$id_paciente);
			$registro = validacion::get_validar_descargas ($registro, $array_directorios);
		}
		return $registro;
	}

Y este es el código de get_validar_descargas:

	static function get_validar_descargas ($datos, $array_directorios)    {
		$aux_datos = $datos;
		$fp = fopen($datos["archivo"]["tmp_name"], "rb");
		$archivo_adjunto = self::quitar_tildes($datos["archivo"]["name"]);
		$ruta = self::set_crear_directorios ($array_directorios);
		$ruta .= '/'.$archivo_adjunto;
		$datos['imagen'] = implode("/", $array_directorios)."/".$archivo_adjunto;
		if (move_uploaded_file($archivo_adjunto, $ruta)) {
			toba::notificacion()->agregar("<center>El archivo se subio exitosamente al servidor.",'info');
			return $datos;
		} else {
			toba::notificacion()->agregar("<center>ERROR: El archivo no se logro subir con exito.",'error');
		}
		return $aux_datos;
	}

No tiene mucha lógica volver a leer el datos tabla, sabiendo que en el método preparar descarga ya se ha enviado el registro del formulario, sería solo

//$datos = $this->dep("datos")->tabla("pacientes")->get();
			if($registro["imagen"]){

Muchas gracias, eso quedó resuelto, pero sigue sin mostrar la imagen, ¿puede ser porque en toba_editor cambié el nombre del ef imagen por archivo? ¿cómo hago para que reconozca a $datos[“imagen”] como campo de la base de datos?

ei_arbol($datos); después de hacer $datos = $this->dep("datos")->tabla("pacientes")->get();

usa mejor print_r($datos); y hay te deberá mostrar el array de datos que vienen del datos tabla, en este caso [‘imagen’] => ‘nombre_archivo.xxx’;

si no lo muestra es que debes recargar el datos tabla por que no lo estas incluyendo, ese es el puente con la BD.

Otro asunto que me atrevo a adivinar es que NO estás incluyendo en el front-end del formulario el campo imagen, incluyelo como ef_oculto, porque si no no navega en ```
function evt__formulario__modificacion($datos)

que es donde se crea y actualiza.

Con print_r tampoco aparece el campo imagen, ¿cuál es el error? :sob: :sob: :sob: :sob:

Incluyelo en el formulario como ef_oculto, que ese es el que va interacturar entre el front-end y el código que tienes

NO, el archivo es un campo temporal para capturar el archivo, y el imagen es el que va a guardar el nombre del archivo; pueden ir los dos y el imagen como ef_oculto, si no lo tienes es por eso que NO te lo muestra.

Le tengo que poner solo lectura en modificacion? O qué tengo que hacer para que me aparezca?
Lo agregué como ef_oculto y sigue sin aparecer con ei_arbol.

mejor con print_r ($datos) vas más a la fija

Sigue sin aparecer, te mando una captura de pantalla:


Debería aparecer al último antes de x_dbr_clave.

esa es la idea NO mostrar el nombre del archivo, pero si lo desea ver, entonces dejalo no como ef_oculto sino como ef_editable.

En útimas habría que mirar como cargas el cuadro con que método y sql en conf__cuadro

Hola Matias, en la definición del datos tabla “pacientes”, en el toba editor, tenes el campo imagen? Me ha pasado de agregar nuevas columnas a una tabla, en la BD, y no agregarlas en la definición del datos tabla y me pasaba lo mismo.