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;
}