alvaro-prieto
3/26/2018 - 3:26 PM

insertaFormulario

El insertaFormulario tendría que ser, y hoy lo digo bastante convencido y entendiéndolo porque he estado con Santiago, la forma estandar de agregar campos en un formulario web, ya sean vinculados o desvinculados. Funciona del siguiente modo: si el objeto está cargado permite su edición, si no, permite su inserción. Hay diferentes modos, uno para que aparezca un botón de insertar (que lanza el formulario de edición en un emergente) y otro sencillo que lo muestra inline sin botones, por lo tanto se puede utilizar para editar cualquier tipo de cosa directamente.

Se le puede pasar el campo "desvinculado" => 1 si queremos que no guarde en base de datos, pero ojo, que si el objeto está cargado se quejará! porque comprobará que hay campos que no existen y pretenderá hacer una edición, por ello si queremos trabajar con desvinculados es mejor trabajar sobre registros no cargados y/o atrapar el onModificado desde JS para que no pase nada raro. A continuación un ejemplo.

/* Al ser desvinculado, en JS haremos lo siguiente

	$(".Quontrol_insertaFormulario").on("modificado",function(e,datos){
		console.log("hola");
		e.preventDefault();
	}).on("accion",function(e, datos){
		console.log("adsfad", datos);
	});

*/



//selector de curso
$preguntas_curso = new WebPreguntasCursos($this->quid);
$preguntas_curso->orden("id");
$listaCurso=$preguntas_curso->lista("id,curso as rotulo");

//selector de estudios
$carreras=new WebPreguntasCoieCarreras($this->quid);
$carreras->orden("nombre");
$carreras->añadeFiltro("activo=1");
$listaEstudios=$carreras->lista("id,nombre as rotulo");	
$listaEstudios[] = ["id"=>0, "rotulo"=>"Otros"];

$Plugins = new Plugins();
$s.= $Plugins->insertaFormulario([
	"sinTitulos"=>1, 
	"_escritura"=> 1,
	"modo"=>"estatico", 
	"simple"=>true,  
	"tituloEmergente" => "Titulo del formulario",
	"botones"=> [
		"enviar"=>[
			"rotulo"=>"ENVIAR"
		]
	],
	"campos"=>[
		
		"titulo"=>[  //no olvidarse de este campo! la estructura que espera está agrupada por secciones. Si no pusieramos sinTitulos=>1 aparecerian estas regiones como fieldsets
		
			"nombre"=>[
				"campo"=>"nombre",
				"rotulo"=>"Nombre",
				"obligatorio"=> true,							
				"mostrarEtiqueta"=>true,
				"tipo"=> "texto",
			],
			"apellidos"=>[
				"rotulo"=>"Apellidos",
				"obligatorio"=> true,							
				"mostrarEtiqueta"=>true,
				"tipo"=> "texto",
			],
			
			"sexo"=>[ 
				"campo"=>"sexo",
				"rotulo"=>"Sexo",
				"tipo"=> "lista",
				"parametros"=> [
					"rotulo"=>"",
					"todos" => false,
					"texto_todos"=> "selecciona",
					"etiqueta" => false,
					"lista"=> ["mujer", "hombre"]
				]
			],

			"dni"=>[
				"campo"=>"dni",
				"rotulo"=>"DNI / Pasaporte",
				"obligatorio"=> true,							
				"mostrarEtiqueta"=>true,
				"tipo"=> "texto",
			],
			
			"telefono"=>[
				"campo"=>"telefono",
				"rotulo"=>"Teléfono",
				"obligatorio"=> true,							
				"mostrarEtiqueta"=>true,
				"tipo"=> "telefono",
			],

			"email"=>[
				"campo"=>"email",
				"rotulo"=>"Email de contacto",
				"obligatorio"=> true,							
				"mostrarEtiqueta"=>true,
				"tipo"=> "email",
			],

			"usuario"=>[ 
				"campo"=>"usuario",
				"rotulo"=>"Tipo de usuario",
				"tipo"=> "lista",
				"parametros"=> [
					"rotulo"=>"",
					"todos" => false,
					"texto_todos"=> "selecciona",
					"etiqueta" => false,
					"lista"=> ["Estudiante", "PDI", "PAS", "Tutores", "Otros"],
				]
			],

			"curso"=>[ 
				"campo"=>"curso",
				"rotulo"=>"Curso",
				"tipo"=> "lista",
				"parametros"=> [
					"campo_key"=> 'id' , 
					"rotulo"=>"",
					"todos" => false,
					"texto_todos"=> "selecciona",
					"etiqueta" => false,
					"lista"=> $listaCurso,
				]
			],


			"estudios"=>[ 
				"campo"=>"estudios",
				"rotulo"=>"Estudios",
				"tipo"=> "lista",
				"parametros"=> [
					"campo_key"=> 'id' , 
					"rotulo"=>"",
					"todos" => false,
					"texto_todos"=> "selecciona",
					"etiqueta" => false,
					"lista"=> $listaEstudios,
				]
			],
			
			
			"otros"=>[
				"anchura"=>"100%",
				"campo"=>"otros",
				"rotulo"=>"Otros estudios",
				"obligatorio"=> true,							
				"mostrarEtiqueta"=>true,
				"tipo"=> "texto",
			],

			"pregunta"=>[
				"anchura"=>"100%",
				"campo"=>"pregunta",
				"rotulo"=>"Preguntas / Sugerencias / Dudas",
				"obligatorio"=> true,							
				"mostrarEtiqueta"=>true,
				"tipo"=> "textolargo",
			],
			
		]
		
	]
]);

echo $s;
$s.= $WebexSesiones->insertaFormulario([
	"sinTitulos"=>1,
	"_escritura"=> 1,
	"modo"=>"estatico", //creo que para que no salga como emergente flotante
	"simple"=>1,  //esto hace que no aparezca dentro de una ventana emergente 
	"campos"=>[
		
		"titulo"=>[  //no olvidarse de este campo! la estructura que espera está agrupada por secciones. Si no pusieramos sinTitulos=>1 aparecerian estas regiones como fieldsets
		
			"hora"=>[
				"campo"=>"hora",
				"rotulo"=>"Hora inicio",
				
				"mostrarEtiqueta"=>true,
				"tipo"=> "hora2",
				

				"parametros" => [
					"rangoValido"=> "7:00-23:00"	
				]
			],
			"hora2"=>[
				"campo"=>"hora2",
				"rotulo"=>"Hora fin",
				
				"desvinculado"=>true,
				"fuerzaTipo"=> "hora2",

				"parametros" => [
					"rangoValido"=> "7:00-23:00"	
				]
			],
			
			"fecha1"=>[ 
				"campo"=>"fecha1",
				"rotulo"=>"Desde de la fecha",
				"tipo"=> "fecha",

			]
			,
			
			"fecha2"=>[ 
				"campo"=>"fecha2",
				"tipo"=> "fecha",
				"rotulo"=>"Hasta la fecha",

			]
			
		]
		
	]
]);


En este ejemplo, (que pretendía ser desvinculado), se ha convertido en 
desvinculando atrapando los eventos desde JS y no dejando que guarden nada:

Creo que a Santiago esta opción le gusta más que agregar el campo "desvinculado" 

$(".Quontrol_insertaFormulario").on("modificado",function(e){
			e.preventDefault();
		});


//  cambiar tipo de un campo editor lista 
//=======================================


//A veces queremos que un campo se muestre con otro tipo de editor distinto al normal,
//por ejemplo un campo de texto que se muestre como un combo.

//este ejemplo es un campo de un insertaFormulario


$valoresLista =[
	"t2" => "t2",
	"t3" => "t3"
];

// insertaformulario aquí [....]

"altura"=>["campo"=>"altura","tipo"=> $esCombo ? "lista" : "" ,"parametros"=>["lista"=> $valoresLista, "identifica_con_key"=>1,"texto_todos"=> "auto", "todos" => true]],