Preguntas frecuentes

Pregunta 1. ¿Cómo hacer multiidioma mi aplicación?

Dentro del directorio lang existen tres ficheros de idiomas:

  • - esp.conf → castellano
  • - val.conf → valenciano
  • - eng.conf → inglés

Son ficheros de texto, con pares:

Por ejemplo:

  • variable = "etiqueta"
    • smty_labelNombre = "Nombre Responsable"
    • smty_labelUbicacion = "Ubicación"

En la tpl hay que hacer referencia a esas variables definidas en los ficheros de configuración de idiomas:

Pregunta 2. ¿Cuál es la diferencia entre el parámetro "visible" y "oculto" en un campo?

El parámetro "oculto" solamente tiene sentido cuando el campo es un campo de texto porque se traduce en un campo "hidden" de html.

El parámetro "visible" permite tener el control del campo desde código ( setVisible(boolean) ), y hacerlo visible o no dependiendo de otros datos.

 

Pregunta 3 ¿Dónde tengo que desactivar los mensajes de consola de JavaScript?

La configuración de activar o no el log de JS de la aplicación se hace en el fichero de configuración de la aplicación, externo.gvHidraConfig.inc.xml, con la propiedad logJSSettings.

Pregunta 4. Quiero que mi lista desplegable se autocomplete.

Solamente tienes que añadir el parámetro "autocomplete" en la tpl al plugin cwlista.

Pregunta 5. Quiero añadir estilos propios en mi aplicación. ¿Dónde debo ubicar el fichero css?

En el directorio css de la aplicación existe el fichero appStyle.css que es el que se debe utilizar para incluir estilos propios de la aplicación.

Pregunta 6. Necesito colorear las filas de un panel tabular dependiendo del valor de un campo

En el método postBuscar(), o en el postRecargar() en el caso de que el panel sea un detalle, utilizaremos la función $objDatos→setRowColor($tupla,$color);

Por ejemplo:

Pregunta 7. Uso del checkbox en la clase manejadora

Al definir un checkbox en el constructor de la clase manejadora, se define el valor asignado al checkbox cuando éste está chequeado y cuando no lo está.

$check1 = new gvHidraCheckBox('check1');
$check1->setValueChecked('S');
$check1->setValueUnchecked('N');
$this->addCheckBox($check1);
 

El valor que se le asigna a un estado es el que se utilizará en métodos para comprobaciones, sql..., será el valor asociado a ese campo, y como tal, obtener el valor de un checkbox se realiza con el método setValue()

$objDatos->getValue("check1");   =>  Devolverá el valor "S" en el caso de que esté chequeado, y "N" cuando no lo esté
 

Por otro lado, trabajar con un checkbox desde una acción de interfaz, con ello lo que se necesita es que cambie el estado visual del checkbox en la pantalla.

Esto no significa que el checkbox cambie su valor, sino que el checkbox lo chequeas o no dependiendo del valor que quieras que tenga, por lo tanto el método es setChecked() pasándole un true/false según necesites.

Ejemplo:

$objDatos->setChecked("check1",true);   => El campo "check1" tendrá el valor "S" y visualmente aparecerá chequeado.
$objDatos->setChecked("check1",false); => El campo "check1" tendrá el valor "N" y visualmente NO aparecerá chequeado.

Pregunta 8. Diferencia acción "buscar" desde menuModulos vs acción "buscar" desde el botón buscar del panel filtro.

  • "buscar" desde botón del filtro:
    Cuando buscamos desde un panel filtro, ya estamos en el panel filtro, ya tenemos definidos los campos, valores por defecto y definiciones.
    Por lo tanto se ejecutará la sql definida en el constructor aplicando el where de los valores asignados a los campos del panel (valores por defecto y valores ya introducidos por el usuario)

    {cwboton iconCSS="glyphicon glyphicon-search" label="Buscar" class="button" accion="buscar" mostrarEspera="true"}

     
  • "buscar" desde menuModulos:
    Cuando en menuModulos se define el acceso a una pantalla con la acción "buscar", hay que entender que no se ha accedido al panel filtro, se salta directamente al panel tabular o ficha con el resultado.
    El framework ejecuta la sql definida, pero sin la asignación de valores por defecto porque no se llega a acceder al panel, no llega a existir. En el caso de que se quiera establecer algunas condiciones en esta consulta
    sin pasar por el panel filtro, se deben realizar en el preBuscar(). Para ello se puede definir una variable en el enlace del menú que indique q se accede desde el menú, y entonces asignar los valores que se necesiten por defecto.

    <opcion imagen="menu/menu.gif" titulo="Ej. Registre" descripcion="Manteniment de Registro" url="phrame.php?action=Registro__buscar&acceso=MENU"/>

    public function preBuscar($objDatos)
    {
        $acceso = $objDatos->getValue('acceso');
        if ($acceso == 'MENU')
        {
            // Sabemos que se ha accedido a la pantalla desde el menú
            // Fijamos los valores que se necesiten tener por defecto
            $objDatos->setValue('fil_DNI', '12111222X');
        }
        else {
            // Sabemos que se ha accedido desde el panel búsqueda
            // Se han definido los valores por defecto con addDefaultData(), o setSelected() en el caso de las listas
        }
        return 0;
    }

     

 

Pregunta 9. Quiero que la where de la búsqueda me permita buscar sin poner el texto completo

gvHidra crea una cadena que añade al WHERE de la consulta del panel con los datos que ha introducido el usuario desde el modo de búsqueda. Esta cadena se puede formar de tres formas diferentes, dependiendo del valor que se le pase al método setQueryMode().

Lo que hay que tener en cuenta es que en ninguna de las opciones se distingue por mayúsculas/minúsculas ni por acentos u otros carácteres especiales:

  • Valor 0: Se construye la WHERE igualando los campos a los valores.
    Formato: campo = valor
  • Valor 1: Se construye la WHERE utilizando el operador LIKE
    Formato: campo LIKE %valor%
  • Valor 2: Se construye la WHERE igualando los campos a los valores siempre y cuando éstos no contengan el carácter % o _, en cuyo caso se utilizará el LIKE.


    NOTA: gvHIDRA tiene marcado por defecto el valor 2 para ejecutar las consultas.

 

Pregunta 10. Desde el método que dispara la acción de interfaz, cómo puedo saber cuál ha sido el campo que la lanza?

El campo disparador de la acción de interfaz lo podemos obtener con el siguiente método:

$campoDisparador = $objDatos->getTriggerField();

Pregunta 11. Quiero personalizar la css de la búsqueda avanzada (versiones 5.1.x)

El selector que engloba la búsqueda avanzada es el siguiente: .gvh-querybuilder

Por otra parte, para personalizar la botonera:

Operadores: Para poder asignar un estilo a los botones "Y" / "O" del buscador avanzado.
  • Selector para botón activado: .group-conditions.btn-group >label.active
Ejemplo
.group-conditions.btn-group > label.active {
    background-color: red;
}
  • Selector para botón desactivado: .group-conditions.btn-group >label
Ejemplo
.group-conditions.btn-group > label {
    background-color: #db985b;
}
  • Selector para hover sobre los botones .group-conditions.btn-group:hover > label
Ejemplo
.group-conditions.btn-group:hover > label {
    background-color: #ffd2e9;;
}
Botón NO
  • Selector: .gvh-querybuilder .btn-group > .btn:first-child:not(.btn-danger)  
                  .gvh-querybuilder .btn-group > .btn:first-child:hover:not(.btn-danger)
Ejemplo
.gvh-querybuilder .btn-group > .btn:first-child:not(.btn-danger) {
    background-color: #ffd2e9;
}
Botón INVERTIR
  • Selector: .rules-group-header > button.btn-default 
                  .rules-group-header > button.btn-default:hover
Ejemplo
.rules-group-header > button.btn-default:hover {
    background-color: #ff7d7d;
    color: #fff;
}

Pregunta 12 - Quiero que el panel de búsqueda permanezca siempre visible

El estado de un panel viene definido por el parámetro estado del plugin cwpanel, por lo tanto si se quiere que el panel búsqueda siempre esté visible, en la tpl el parámetro estado debe tener el valor "on"

{cwpanel id="fil" action="buscar" estado="on" claseManejadora="claseM"}

Pregunta 13 - En un patrón FIL-LIS-EDI, si la búsqueda sólo devuelve un registro. ¿Se puede ir directamente al panel EDI?

Sí, para ello existe el actionForward "gvHidraSuccessOne', que se tiene que añadir en el mappings.php para la acción "buscar".

$this->_AddForward('ClaseManejadora__buscar', 'gvHidraSuccessOne', 'index.php?view=views/App/p_ClaseManejadora.php&panel=editar');

 

Pregunta 14 - Tengo una lista dependiente de un campo, si el campo no tiene valor, no me muestra todos los resultados

Cuando se define la dependencia de una lista (método setDependence($listasCamposTpl, $listasCamposBD, $tipoDependencia)), hay que indicar de forma obligatoria dos parámetros, que son:

  • $listasCamposTpl: Es un vector con los nombres de los campos de los que depende.
  • $listasCamposBD: Vector con los nombres de los campos de la BD correspondientes con los indicados en el parámetro anterior (ambos vectores deben tener el mismo orden)
  • $tipoDependencia: Podrá tomar el valor 0, en el caso de que se necesite que la dependencia de la lista sea fuerte, y 1 en el caso de que se quiera que sea débil. El caso de la dependencia débil, lo que hará es que si el campo dependiente no tiene valor, lo ignorará.

Por lo tanto, si lo que se quiere es que no haga caso de la dependencia cuando el campo dependiente no tiene valor, hay que poner el tipoDependencia=1, así mostrará todas las opciones de la lista.

NOTA: gvHIDRA tiene marcado por defecto el valor 0 para ejecutar las dependencias de las listas.