Consulta sobre toba::menu()->set_modo_confirmacion()

Hola …

Me ha surgido la siguiente duda:

toba::menu()->set_modo_confirmacion(), solo puede usarse en funciones tipo “conf” o “post_configurar” de un CI ??

Sucede que necesito que la solicitud de confirmación aparezca en un evento cualquiera como “procesar”.

El codigo que use es el siguiente …

function evt__procesar()
{
toba::menu()->set_modo_confirmacion(‘Guarda la pasantia?’, true);
}

Nunca aparece el mensaje.

Luego pruebo cambiar la solicitud a otras funciones como “post_configurar” y “conf”, ahi si funciona, eso si aparece el mensaje cuando quiero cambiar de menu/operacion.

function post_configurar()
{
toba::menu()->set_modo_confirmacion(‘Guarda pasantia , ¿Desea continuar?’, true);
}

Busque ejemplos aca en el foro, en toba_referencia (ejemplo “zona”) y pude ver que lo utilizan en la funcion “conf”

Puedo usar “toba::menu()->set_modo_confirmacion()” en cualquier funcion ??

Tambien he visto que cuando uno quiere hacer un click en un boton tipo “Eliminar” pide confirmación. Como es el codigo de ese boton??

Marcela

Fijate que en cada evento (en las propiedades), podés poner un texto para confirmar. Si hay contenido en ese campo, hace la pregunta correspondiente.
Capaz no es lo que necesitás, pero espero que si.

Hola Marcela,

creo que Martin dio justo en el clavo con lo que andas necesitando. Mas alla de eso, te cuento que la idea del modo confirmacion de toba_menu, es impedir que la gente se vaya de la operacion por medio del menu, es en esos casos donde se la detiene y se le pregunta.

Si te quedas dentro de la operacion misma siempre, esa confirmacion no aparece.

Saludos

Aprovecho este hilo para preguntar. En un evento predefinido pdf, te puede agregar también un mensaje de confirmación? Pregunto esto porque lo probe y no me anduvo -.s

La idea seria que antes de exportar, confirme, ya que esta exportacion a pdf incluye una actualizacion de una datos en la base.

Gracias desde ya
Saludos

Hola Carolina, podrías extender el javascript del formulario y tener un código similar a este


{$this->objeto_js}.evt__descargarPDF__validar = function()
{
      if(confirm('¿Desea exportar los datos a pdf?')){
		return true;
      }else{
               return false;
      }
}

Si el usuario confirma que desea continuar con la operación, retorna true y el evento se ejecuta. Caso contrario, retorna false y la ejecución de evento el botón se interrumpe.

Roberto, lo probe de la siguiente manera:

function extender_objeto_js() {
echo "{$this->objeto_js}.evt__vista_pdf__validar = function()
{
echo (‘Algo’);
// if(confirm(‘¿Desea exportar los datos a pdf?’)){
return true;
}else{
return false;
}
}
";
}

Luego la funcion vista_pdf es la que tiene la accion predefinida.
function vista_pdf($salida)
{}

Pero no le esta gustando porque no me muestra nada de nada, ni el echo de prueba que le puse. Algo estoy haciendo mal. Aclara que el vista_pdf esta a nivel ci, asi que agregue directamente el comportamiento en el php del ci.

Gracias desde ya por la ayuda
Saludos

p/d: acabo de probar tambien cno:

{$this->objeto_js}.evt__pdf__validar = function() y el pdf sin el validar, pero nada le gusta :frowning:

En lugar de echo deberías usar alert('Algo), dado que estas dentro de la función javascript, por lo cual dentro de function() deberías usar sólo sentencias en este lenguaje .

Por otro lado al comentar la línea del if, seguramente debe estar dando error de javascript porque sintácticamente queda mal la definición de la función, porque hay ‘{’ que no se cierran adecuadamente.

Probá con el método exportar_pdf, es decir:

{$this->objeto_js}.exportar_pdf = function()

Roberto, ese doble comilla quedo, pero en realidad no estaba asi.

Lo probe de la siguiente manera:

function extender_objeto_js() {
echo “{$this->objeto_js}.evt__pdf = function()
{
alert(‘Algo’);
if(confirm(‘¿Desea exportar los datos a pdf?’)){
return true;
}else{
return false;
}
}”;
}
Y solo me aparece la ventana de descarga de pdf sin el mensaje previo.
Lo probe tambien con {$this->objeto_js}.exportar_pdf = function() y me hace exactamente lo mismo. Te adjunto una imagen de como esta definido el evento en el ci.


vista_pdf.png

vista_pdf.png

Lo que deseas imprimir es la pantalla completa? o algún cuadro o formulario? porque el método vista_pdf no está disponible a nivel de CI. O definiste uno?
Lo que se me ocurre que puedes hacer es lo siguiente:

  1. en el toba editor, en “Acción Predefinida” del botón “pdf”, seleccioná Ninguna.
  2. luego extendé el objeto javascript para que te quede como ya lo tenías

function extender_objeto_js()
	{ 
		echo "
		//---- Eventos ---------------------------------------------
		
		{$this->objeto_js}.evt__pdf = function()
		{
                   alert('Pasa por aquí');
                   if(confirm('¿Desea exportar los datos a pdf?')){
                        return true;
                   }else{
                        return false;
                   }
		}
		";
	}

  1. Luego extiendes el evento del botón en php y desde allí llamas al método para la impresión en pdf del componente que deseas imprimir. No sé cómo se invoca, estuve probando pero no encontré cómo hacerlo.
    De todos modos te dejo la idea.
    Haciéndolo de esta manera, se ejecuta el evento javascript que te permitirá confirmar o no la generación del pdf.

function evt__pdf()
	{
            //Aquí llamarías al método para hacer la impresión en pdf.
	}

Roberto, lo que se quiere imprimir es un cuadro. Pero no se uso el exportar a pdf del cuadro, se uso el evento predefeinido en en ci para exportar.

Lo pruebo a todo esto que me pasaste y te aviso como me va
Gracias

Saludos

Hola Carolina,

nop, no se puede, porque la exportacion se dispara a traves de un link inline, no hay intermediacion de JS en este caso.

La idea seria que antes de exportar, confirme, ya que esta exportacion a pdf incluye una actualizacion de una datos en la base.

Aca creo que hay un problema de logica de negocio, osea… lo importante es la actualizacion en la base, no la exportacion del pdf… por lo tanto dicho evento deberia confirmar dicha accion, no exportar un pdf… es raro que vayas a una pagina a descargar algo y te pregunte ‘Esta seguro que quiere descargarlo?’… es medio agarrado de los pelos eso.

Si me parece logico que me pregunte si quiero actualizar la base y que luego a consecuencia se exporte el pdf.

Saludos

Richard, Esa es la idea, o sea, lo importante es la actualizacion pero al usuario final enviarle un mensaje que le diga “Esta seguro que quiere actualizar la base de datos?” medio que no nos parecia correcto. Pero la idea es un mensaje antes de exportar a pdf.

Sigo probando
Saludos

Bueno, visto y considerando que con javascript todavia no me llevo :P, solucione el problema con dos pantallas. Una en la que se muestra el cuadro y la siguiente donde se exporta con el mensaje adviertiendo de la actualizacion que se efectua al descargar.

Mas adelante, y con mas tiempo, probare con el javascript.
Gracias de todos modos

Hola Carolina,

esta bien, a lo que me refiero es que eso no lo vas a poder hacer mientras intervenga un link unicamente, si el boton tuviera un autovinculo y lo enviaras a un servicio particular, por ejemlo seria otro tema, porque ahi si tenes intervencion de JS en el browser y podes llegar a hacer algo similar a lo que esta en el ejemplo “Componentes > Eventos > Vinculos > Control en runtime” de toba_referencia, fijate que ahi se captura un evento del CI y se redefine en JS.

Con respecto al tema del mensaje en si, lo importante me parece es que el usuario supiera que era una actualizacion + exportacion… y no unicamente una exportacion a pdf que en si mismo es una impresion y por tanto algo bastante inocuo a nivel sistema.

Lo de las dos pantallas explicita esto y me parece una buena manera tambien, sobre todo porque evita el tipico click zombie.

Saludos

Gracias Richard. Voy a mirar mas en detalle entonces el “Componentes > Eventos > Vinculos > Control en runtime”

Saludso