Mostrar Mensajes

Esta sección te permite ver todos los mensajes hechos por este usuario, recuerda que solo puedes ver los mensajes en áreas en donde tu tienes acceso.


Mensajes - richard

Páginas: 1 ... 174 175 [176] 177 178 ... 181
2626
Hola Martin,

la falta de salida HTML indica que se produjo un fatal error, si no ves ningun mensaje por el estilo te recomendaria que miraras en el php.ini y activaras las opciones de error_reporting = E_ALL y display_errors= On de esa manera cuando palme por algo php te vas a enterar por medio de un mensaje.

Por otro lado, el tema con el codigo que te pase es que la funcion se llama "get_cantidad_filas" y yo por escribirlo de memoria y no ir a la documentacion le mande "get_cant_filas" fijate si haciendo ese pequeño cambio de nombre funciona. A futuro compara los nombres de las funciones que te paso con la documentacion porque como veras mi memoria es peligrosa XD.

Saludos

2627
Hay que tener en cuenta que docentes_cargos (... id_cargo... id_vinculacion) depende de que cargos y vinculaciones hayan sido dadas de alta primero. Sin embargo, por una cuestión de lógica visual del usuario, es el primer formulario.

Si este es el caso tienes la relacion definida al reves... lo que buscas es un grafo similar a una V.... con cargos y vinculaciones como padres y docentes_cargos como hijo de ambas tablas.

Mas alla de eso me intriga el hecho de que no dispare los eventos de modificacion de los formularios, podrias enviarme una captura de pantalla de la solapa eventos del CI que controla toda la operacion? tambien adjuntame capturas de las solapas de eventos de los 3 formularios por favor.

Saludos

2628

Te hago una consulta, tanto los eventos implicitos de los formularios como el evento aplicar del CI tienen el tilde 'Maneja Datos' activado?. Si eso es asi te pediria que me subieras el archivo de log ya que el codigo pareciera estar correcto.

Saludos
Richard

2629
Hola Martin,

creo que el inconveniente puede estar justamente en el conf__ de dicho formulario, el detalle radica en una sutil diferencia en la interpretacion de lo que hace el metodo datos_relacion::esta_cargada() , ese metodo surgio para determinar cuando una relacion fue cargada exitosamente desde la bd, que es distinto a determinar si la relacion tiene datos o no. Creo que la documentacion es responsable de esta diferencia de interpretacion ya que no explicita desde donde se carga.

Por lo pronto hay 2 opciones:

  • En los metodos de modificacion utilizas el metodo set_cargado(true) para indicar que la relacion esta cargada, el problema de esto es que te puede traer fantasmas en alguno de los formularios ya que dicho metodo afecta toda la relacion y no individualmente a las tablas
  • Modificar el metodo conf__ del formulario para contemplar la diferencia de interpretacion:
Código: [Seleccionar]
        function conf__formulario_materia_dictado(toba_ei_formulario $form)
{
                $cant_datos = $this->get_relacion->tabla('materias_dictados')->get_cant_filas(); //Contamos la cantidad de filas que tiene, debe tener 1 fila si hay datos
if ($cant_datos > 0) {
$datos = $this->get_relacion()->tabla('materias_dictados')->get();
$form->set_datos($datos);
}
}

Probalo, creo que con esto puede funcionar
Saludos
Richard

2630
Toba - Desarrollo / Re: Se puede por toba crear un ML por código ?
« : enero 25, 2010, 03:52:38 pm »
Cuando comentas:
"Si todos los alumnos incluidos en el ML tienen la misma asignatura y no hay diferencia de logros entre ellos, lo que podrias hacer es tener un formulario extra con el ef_seleccion_multi_check el cual podrias ubicar a un lado del ML (con css/html) y alli tildar los logros para todo el grupo."

La verdad NO tengo los conocimientos del CSS/HTML que comentas, pero me gustaría que si tienes un ejemplo en toba referencia u otro medio me lo facilitaras.

Hola John, si miras en la operacion 'Componentes > Controladores de Interface > Cambio de layout' del proyecto toba_referencia en la segunda solapa de la operacion hay un 'layout 2 columnas', podrias usar algo similar para lo que te proponia :)

Saludos
Richard

2631
Lo que no puedo hacer ahora, es lo siguiente:
1) como puedo hacer para chequear si un hobbie ya fue seleccionado (es decir, si hubo o no cambios), para no replicar el alta de un nuevo nexo y generar un error?

Lo que podes hacer es usar operaciones de arreglos para calcular diferencias entre los valores viejos y los nuevos, por ejemplo array_diff($val_viejos, $val_nuevos) te diria si se borro alguno, con los parametros al reves te diria cuales se agregaron, de esa forma podes ir agregando unicamente los que se fueron incorporando.

Citar
2) recuperar los tildes desde los datos. Recupero los datos, pero no se representan en el ef.

Código: [Seleccionar]
function conf__form_descripcion(toba_ei_formulario $form)
{
$datos = $this->get_relacion()->tabla('docentes_comentarios')->get_filas(null, true);
//var_dump($datos);
                //array(2) { [0]=>  array(3) { ["id"]=>  int(2) ["id_hobbie"]=>  int(3) ["id_persona"]=>  int(1) }
                //              [1]=>  array(3) { ["id"]=>  int(3) ["id_hobbie"]=>  int(2) ["id_persona"]=>  int(1) }}
$form->set_datos($datos); //esto no funciona tildando los checkboxes que corresponderían.
}

en fin...

El tema aqui es la organizacion del arreglo a devolver, tendrias que reorganizar las cosas para que el componente con id 'id_hobbie' sea un arreglo de los posibles valores a tomar.
La idea seria devolver algo con la siguiente forma:
//array(1) { ['id_hobbie']=>  array(3) {
  • =>  int(2) [1]=>  int(3) [2] =>  int(1) [3] => int(4)}}
Código: [Seleccionar]
function conf__form_descripcion(toba_ei_formulario $form)
{
$datos_filas = $this->get_relacion()->tabla('docentes_comentarios')->get_filas(null, true);
                $datos['id_hobbie'] = array();
                 foreach($datos_filas as $fila) {
                     $datos['id_hobbie'][] = $fila['id_hobbie'];
                 }
$form->set_datos($datos);
}

Saludos
Richard

2632
Alternativa 2
Otra idea, sería tener un cuadro con todos los datos, y en la misma pantalla o en otra de edición, 3 formularios, uno debajo del otro, que se acepten, eliminen o modifiquen en conjunto con eventos dentro del ci controlador.
      En este punto, las consultas puntuales son las siguientes:
      1) puedo incluir más de un formulario en un ci?

Si, solo tenes que agregarlos como dependencias distintas en el CI y asignarlos a la pantalla correcta.

Citar
      2) debería incluir cada tabla por separado, o mantengo la relación de las tablas?

Podes hacerlo de cualquiera de las 2 formas, la que te quede mas comoda.. toma en cuenta que la relacion te maneja la transaccion automaticamente.. si lo haces con datos_tabla separados vas a tener que hacer un manejo de transacciones explicito.

Citar
3) Intuitivamente, me parece que podría utilizar la relación, y 3 formularios, uno arriba del otro... y aplicar todo si fueran distintas solapas... como si fuera la alternativa 1), es decir como si estuvieran en solapas separadas? en este caso definiría en cada formulario un evento modificacion, pero se dispara en que momento? cada vez que edito un ef? porque en ese evento debería hacer el set, y luego en el evento aplicar del ci controlador sincronizar.

Lo que deberias hacer es definir los eventos de modificacion de cada formulario como implicitos (imagen 1). Eso significa que cada vez que se haga un envio al servidor los datos de dicho formulario viajaran hacia el mismo. Lo que podrias hacer luego es definir un par de eventos a nivel de CI, digamos un 'Guardar' y 'Cancelar' que realicen la interaccion con el servidor, esos serian los eventos que dispararian el envio de datos (imagen 2). Del lado del servidor tendrias los metodos para escuchar las modificaciones de los formularios y la sincronizacion la dispararias desde el metodo que captura el 'Guardar'.  De esta forma la operacion te quedaria 'atomica', aunque en realidad sean 3 datos_tabla distintos.

Te comento que a gusto mio en este tipo de casos queda bueno tener un cuadro de seleccion en una primer pantalla y los formularios para la edicion en otra, la navegacion entre las pantallas la vas manejando vos explicitamente en los eventos de seleccion del cuadro y en los eventos de procesamiento (Guardar/Eliminar/Cancelar). Para ello seteas que la navegacion del Ci queda a cargo de la subclase y usas para los cambios de pantalla el metodo $this->set_pantalla('id_pantalla');

Saludos
Richard








2633
Buenisimo Martin... una masa!!!,

solo un detalle extra, fijate que en el metodo crear_fila que extendiste no se esta devolviendo ningun valor... el original te devuelve el id_fila, agregandole eso te queda joya. Te lo comento porque puede surgir algun comportamiento medio extraño con el ML quizas ya que el resto de la API asume que retorna un valor la funcion esa.

Saludos
Richard

2634
Toba - Desarrollo / Re: Se puede por toba crear un ML por código ?
« : enero 22, 2010, 05:25:53 pm »
Pero me lo imaginaba en forma vertical y no horizontal como lo hace el ef_seleccion_multi_check. Se puede vertical ?

Si mal no te entiendo lo que buscarias es que un solo ef_seleccion_multi_check abarque varias filas del ML no?.. esto desgraciadamente no se puede ya que cada fila lleva una instancia del ef. Incluso si se ocultara dicho EF para el resto de las filas creo no lograrias el efecto visual buscado, complicando ademas el manejo de las filas del ML. Si todos los alumnos incluidos en el ML tienen la misma asignatura y no hay diferencia de logros entre ellos, lo que podrias hacer es tener un formulario extra con el ef_seleccion_multi_check el cual podrias ubicar a un lado del ML (con css/html) y alli tildar los logros para todo el grupo.

Si erre en mi apreciacion y solo buscas que la presentacion de las opciones sea de manera vertical.. solo debes dejar sin valor la propiedad de cantidad de columnas.

Citar
El ef_seleccion_multi_check al momento de almacenar y cargar, me sube un registro por cada tildado en la Base ?; por ejemplo si tildo 10 logros de un estudiante me almacena los 10 registros por cada estudiante ?
No... el ef solamente te entrega (ya sea serializado o en arreglo) las opciones que fueron seleccionadas, depende de vos convertir cada una de esas opciones a registros en la base de datos o en el datos_tabla correspondiente, eso al menos si es que los logros estan Normalizados y no se guardan como un campo separado por comas.

El ef solo se encarga del aspecto visual y la interaccion con el usuario, es tu codigo quien se encarga de llevar adelante la parte de negocio.

Saludos y buen fin de semana

PD: Odio que el foro se quede sin sesion cuando publico XD

2635
Toba - Desarrollo / Re: Consultas sobre ei_formulario_ml
« : enero 22, 2010, 04:58:52 pm »
Hola Martin,

En realidad venis vos mucho mejor que yo con el codigo XD... en la funcion de creacion de la fila hice cualquier desman. Asi que muy bien por entenderme a pesar de lo despiolado.

Con respecto al tema de inicializar la variable de acuerdo al tope maximo.. lo podrias hacer asi:
Código: [Seleccionar]
<?php
class formulario_emails extends toba_ei_formulario_ml
{
function extender_objeto_js()
{
                  
$limite_filas $this->controlador()->get_relacion()->tabla('emails')->get_tope_max_filas();
                  if (
$limite_filas == 0) {            //No existe tope y se pueden incorporar todas las filas que se deseen
                        
$limite_filas 10;             //Creo limite artificial
                  
}

                  echo 
"
                                  cantidad_filas = 
{$this->objeto_js}.filas().length;
                                  limite_filas = 
$limite_filas;
                                  ....
                                  ....
                           "
;
         }
}
?>


Ahi estoy asumiendo que en el CI tenes un metodo get_relacion que te devuelve una referencia a la dependencia del datos_relacion, si no es asi tranquilamente podes reemplazar eso por:

 $this->controlador()->dep('nombre_dependencia_datos_relacion')->tabla('emails')->get_tope_max_filas();

Saludos

2636
Toba - Desarrollo / Re: Se puede por toba crear un ML por código ?
« : enero 21, 2010, 04:10:46 pm »
Hola John,

No termino de entender del todo lo que quieres lograr... pero te dejo una idea y tu me diras si voy en el camino correcto o no.

En lugar de utilizar columnas con combos quizas te seria mas comodo utilizar una sola columna que contenga un ef_multiseleccion_check el cual te permitiria seleccionar para un alumno/asignatura varios logros al mismo tiempo. El ef_multiseleccion_check lleva una cantidad de columnas en las que debe presentarse el resultado... por lo tanto si colocas un nro lo suficientemente representativo podrias 'simular' columnas horizontales. Podrias ponerle una etiqueta generica Logros  y lo que deberias tener en cuenta es que dicho ef deberia estar en cascada con la asignatura para que recupere distintos logros de acuerdo a la misma, cuando te decia de colocar un nro representativo estaba pensando en algo como 10 o 15... este es un metodo que podrias utilizar si es que la cantidad de logros por asignatura no supera los 20 o 25.

El tema con el ML y sus columnas es que se usa una fila modelo para agregar en JS que ya debe llegar al cliente con una cantidad de columnas fijas, lo cual nos dejaria con la necesidad de hacer un pedido de pagina nuevo por cada fila agregada e intentar agregar de manera furtiva los metadatos para que se generen las nuevas columnas.

Te adjunto una imagen sobre como podria quedar. Saludos

2637
Toba - Desarrollo / Re: Consultas sobre ei_formulario_ml
« : enero 21, 2010, 03:56:19 pm »
Hola Martin, paso a responderte los puntos:

1) El ML tiene dos formas de trabajar con los eventos:
   a) JS donde los eventos se trabajan del lado cliente y luego se envian como un todo junto con los datos al servidor para ser procesados alli, esto lo recibis en el evento de modificacion del formulario. Esta es la forma actual que estas trabajando vos.

   b) Tipica de pagina web... donde cada evento dispara un pedido de pagina al servidor, es en este modo en el cual se dispara en el servidor el evento pedido_registro_nuevo.

No desesperes... todo tiene solucion o casi XD.. lo que podrias hacer para mantener el esquema actual y realizar el control que necesitas es lo siguiente:

 * Extendes el formulario_ml y en el metodo 'extender_objeto_js' tendrias que colocar algo por el estilo:
   
Código: [Seleccionar]
     function extender_objeto_js()
     {
          echo "
                      var cantidad_filas = 0;
                      var limite_filas = 5;                        //Este limite lo podes sacar de una variable
                     {$this->objeto_js}.crear_fila = function() {
                             var id_fila_nueva =  this.prototype.crear_fila.call();         //Llamo al padre
                             if (cantidad_filas > limite_filas) {
                                           notificacion.agregar('Superaste tu expectativa de vida', 'error');
                                           return false;
                             }
                             if (id_fila_nueva != 'undefined' && id_fila_nueva !== false) {
                                      cantidad_filas++;
                             }
                           return id_fila_nueva;
                      }
          ";
     }
   


2) Teniendo algo como lo del punto anterior, lo que podrias hacer es antes de hacer el return id_fila_nueva; llamar a un metodo que te coloque los valores por defecto que necesitas, por ejemplo:

Código: [Seleccionar]
       {$this->objeto_js}.inicializar_valores_defecto = function (id_fila) {
             if (id_fila_nueva != 'undefined' && id_fila_nueva !== false) {
                  this.ef('nombre_ef1').ir_a_fila(id_fila).set_estado('estado_defecto1');   
                  this.ef('nombre_ef2').ir_a_fila(id_fila).set_estado('estado_defecto2');
                  //etc..
             }
       }

3) Lo que te esta faltando en este caso es guardar los datos antes de lanzar la excepcion, esto podes hacerlo de dos maneras, con una variable de clase extra... o subiendo la llamada del procesar_filas... total hasta que no dispares el metodo de sincronizacion... dichos datos solo estan en el datos_tabla. Aca te presento la opcion de la variable extra por si te resulta mas comodo.

Código: [Seleccionar]
function evt__formulario_emails__modificacion($datos)
{
         $this->temporal_datos_recibidos = $datos;
$cantidad_predeterminados = 0;
foreach ($datos as $fila) {
if ($fila['predeterminado'] == true) {
$cantidad_predeterminados++;
}
}
if (($cantidad_predeterminados > 1) ||
(($cantidad_predeterminados == 0) && ($this->dep('formulario_emails')->get_cantidad_lineas() > 1))) {
throw new toba_error('Debe predeterminarse un único email');
} else {
if (($cantidad_predeterminados == 0)  && ($this->dep('formulario_emails')->get_cantidad_lineas() == 1)) {
$datos[0]['predeterminado'] = true;
}
$this->get_relacion()->tabla('docentes_emails')->procesar_filas($datos);
}
}

Luego en el metodo conf__formulario_emails:
Código: [Seleccionar]
function conf__formulario_emails($form)
{
    if (isset($this->temporal_datos_recibidos)) {
           $form->set_datos($this->temporal_datos_recibidos);
    }
}

Espero haberte sido de ayuda..
Saludos

2638
Toba - Desarrollo / Re: Migración de 1.2.0 a 1.4.6
« : diciembre 21, 2009, 12:08:01 pm »
Hola José

Hola como estan? segui probando la migración de mis proyectos y puede realizar la migración a toba 1.4.8 desde toba 1.3.1.

Buenisimo!

Citar
Primeramente, cuando probe la migración y reporte mi problema, tenía instalado el toba 1.3.1 y el toba 1.4.8 en dos máquinas distintas, y para hacer la migración copie la carpeta del proyecto de una pc a otra y realize la migración tal como figura en el archivo "prueba_1.txt", tras lo cual los objetos en el toba editor se visualizan al nivel del CI y no de sus respectivas ventanas.

Me quedo la duda si el primer procedimiento de migración que realize, o sea teniendo las dos versiones del toba corriendo en PCs distintas es correcto.

Aca estaba la madre del borrego... nop.. el procedimiento que usaste antes no es correcto, el comando de migracion debe tener acceso a la carpeta de la version anterior para tomar los datos de instancia de la misma. Esa ruta a la version anterior se asume como path fisico dentro de la maquina y no como ruta de red, por lo tanto la instalacion nueva quedo apuntando a la base de la version vieja (toba 1.3) pero sin realizarse la migracion, de ahi que vieras el arbol de las operaciones de manera incorrecta... eso es porque la relacion pantalla-componente se traslado a otra tabla en la version 1.4.

Bueno, me alegro que finalmente lo hayas podido solucionar, un aplauso de mi parte por la garra y el esfuerzo!.

Saludos y felices fiestas
Richard


2639
Toba - Desarrollo / Re: Pequeño problema con IE
« : diciembre 17, 2009, 12:32:43 pm »
Hola Fabian,

para serte sincero no recuerdo bien en que version de Toba venias trabajando pero no te convenia definir el evento como vinculo, setear todos los parametros y fijarlo como popup?. Con respecto al tema del explorer, que version puntual es la que estas usando?, si es una de las ultimas no tendras activado el bloqueador de popups?.

Te paso una imagen de lo que te decia del cuadro

2640
Toba - Desarrollo / Re: Pasa parametros de la Base de Datos a JS
« : diciembre 16, 2009, 05:41:52 pm »
Hola John,

la clase toba_js actua del lado del servidor, la funcion devuelve un string con la declaracion del arreglo en JS... osea que lo que deberias hacer simplemente es un
Código: [Seleccionar]
echo 'var mi_arreglo_js = ' . toba_js::arreglo($arreglo);

Luego en JS lo accedes normalmente como accederias a cualquier objeto Array.

Saludos
Richard

Páginas: 1 ... 174 175 [176] 177 178 ... 181