FastInserter
Una operación muy común es obtener datos (por ejemplo de una tabla) para ser incorporados a otra tabla. Aunque DatePicker puede ayudar, en algunos casos se necesita más velocidad.
Un bloque FastInserter permite, a partir de entrada de texto, realizar una búsqueda personalizada y elegir de entre los resultados para realizar una operación de inserción (u otra operación cualquiera) personalizada.
Para activarlo, se asigna la variable fastInserter del objeto crud a una instancia de \zfx\FastInserter:
$this->fastInserter = new \zfx\FastInserter();
Se puede especificar una acción del controlador crud para realizar la búsqueda. Por ejemplo
$this->fastInserter->setAxSearchUrl($this->_urlController() . 'busq');
Si no se especifica una acción, todo el mecanismo de búsqueda, obtención de resultados y selección de resultados queda desactivado.
Se debe especificar una acción del controlador crud para realizar la inserción (o el proceso que deba hacerse). Por ejemplo
$this->fastInserter->setAxInsertUrl($this->_urlController() . 'ins');
Esta acción recibirá el resultado que se eligió o si el mecanismo de búsqueda estaba desactivado recibirá el propio texto de búsqueda introducido.
Por último, el resultado de esta última acción se colocará en un contenedor cuyo ID se deberá especificar. Como siempre en ZAF, si el ID no se encuentra se creará un popup. Comúnmente al insertar lo que vamos a querer es hacer un lst(), por lo que podemos especificar el div que contiene el listado de la tabla:
$this->fastInserter->setTarget($this->lstSelector);
Todo este proceso (instanciar, especificar acciones y el div final) se puede automatizar llamando a la función createFastInserter del crud. Por ejemplo, esta línea es equivalente a todas las anteriores:
$this->createFastInserter('ins', 'busq');
La acción que ejecuta la búsqueda recibe el texto a buscar y debe componer un array de resultados, un mapa, cuya clave es el ID del resultado y el valor es un texto (que puede incluir marcado HTML) que describe el resultado. Ese array debe ser dibujado por el método renderResults() de la instancia de FastInserter:
// ...Realizar búsqueda
$resultados = [
'8001' => 'Lorem ipsum dolor sit amet, con...',
'8002' => 'Mauris vel eros et... ',
'8003' => 'Morbi tortor arcu, eleif...',
'8004' => 'Sed maximus nunc ut blandit convallis. ',
'8005' => 'Nullam a pellentesque orci...',
'8006' => 'Sed et gravida eros. Sed sed l...'
];
// Devolver resultados
$this->fastInserter->renderResults($resultados);
Con las teclas y cursores o con el ratón se elige el resultado y se envía para su insercción (con la tecla INTRO). La acción recibe el ID del resultado. Como normalmente dicha acción hará una inserción, interesa que invoque a lst() para redibujar la tabla:
public function ins()
{
// ... Hacer la inserción obteniendo el ID desde POST.
$this->lst();
}
También se puede pedir uno o varios parámetros para ser enviado junto con la selección. Por ejemplo para especificar cantidades de material:
$this->fastInserter->setParamNumber(1);
$this->fastInserter->setParamLabels([
1 => 'Cantidad:',
2 => 'Importe:'
]);
$this->fastInserter->setParamDefaultValues([
1 => 5,
2 => 100
]);
La acción de insercción recibe vía POST las siguientes variables:
| Variable | Uso |
|---|---|
| id | El ID del resultado seleccionado |
| search | El texto de la búsqueda |
| param1, param2, ... | Los valores de los parámetros |